Biostatistica si Bioinformatica. Lab 1: Ilustrarea unor procese din biologia moleculara. Accesarea bazelor de date biologice. Familiarizare cu pachetul de Bioinformatica din Matlab I. Vizualizarea proceselor de transcriptie si translatie - se acceseaza http://vcell.ndsu.nodak.edu/animations/ - se activeaza succesiv animatiile de la procese moleculare (Molecular Processes): o transcriptia ADN-ului in ARN (Transcription) o prelucrarea ARN-ului mesager (mrna Processing) o sectionarea ARN-ului mesager (mrna Splicing) o translatie sinteza lantului peptidic (Translation) II. Accesarea resurselor de la NCBI National Center for Biotechnology Information (http://www.ncbi.nlm.nih.gov) Contine: - baze de date biologice - GenBank - http://www.ncbi.nlm.nih.gov/genbank/ o Nucleotide - http://www.ncbi.nlm.nih.gov/nucleotide/ o Proteine - http://www.ncbi.nlm.nih.gov/protein - instrumente software pentru analiza datelor biologice grupate intr-un sistem de cautare si regasire a informatiilor (Life Science Search Engine: Entrez - http://www.ncbi.nlm.nih.gov/gquery/gquery.fcgi ) - resurse referitoare la genomul uman - resurse pentru documentare Exercitii: 1. Vizualizarea structurii genomului uman. Indicatie: se acceseaza MapViewer (http://www.ncbi.nlm.nih.gov/mapview/); se alege la Search (se apasa pe butonul cu lupa) : Homo Sapiens; se selecteaza unul dintre cromozomi si se vizualizeaza secventa (View Sequence) 2. Sa se localizeze toate prezentele secventei TATA (promoter) in cromozomul 1 al genomului uman Indicatie. Dupa accesarea lui MapViewer se specifica TATA la Search for si 1 la Chromosome III. Pachetul de bioinformatica din Matlab Contine functii care permit analiza datelor genomice. Principalele categorii de functii oferite sunt: - Acces la baze de date biologice permite conectarea usoara la baze de date genomice si proteomice accesibile pe Web; asigura conversia intre diferite formate.
- Analiza secventelor determinarea caracteristicilor statistice ale secventelor, alinierea a doua sau mai multe secvente, identificarea sabloanelor in secvente. - Analiza filogenetica - permite crearea si manipularea arborilor filogenetici. - Analiza datelor de tip microarray citire, normalizare si vizualizare. - Analiza datelor obtinute prin spectrometrie de masa - Clasificarea datelor si identificarea caracteristicilor importante folosind tehnici statistice adaptive. - Asigura interfatarea cu alte instrumente software pentru bioinformatica (BioPerl, BioJava) 3.1. Accesarea bazelor de date Pentru preluarea unei secvente ADN din baza de date GenBank (de la NCBI) se poate efectua una dintre variantele : 1. Se identifica secventa, fie accesand direct http://www.ncbi.nlm.nih.gov fie realizand conectarea din MatLab folosind comanda: web( http://www.ncbi.nlm.nih.gov ) Daca se doreste incarcarea unei secvente de nucleotide se specifica la search Nucleotide si apoi identificatorul secventei (de exemplu ACOL01002945 sau MI0051). Secventa poate fi salvata (in diferite formate) folosind butonul S to. Daca se opteaza pentru formatul FASTA se va crea in directorul current un fisier cu extensia *.fa. Fisierul FASTA poate fi ulterior deschis din MatLab folosind comanda fastaread. Exemplu: s=fastaread( ACOL01002945.fa ); secv=s.sequence # citire fisier # preluare secventa ADN 2. Secventa poate fi transferata direct folosind comanda getgenbank ( IdentificatorSecventa, ToFile, numefisier, FileFormat, GenBank FASTA ) s=genbankread( numefisier ) secv=s.sequence Exemplu: getgenbank('acol01002945', 'ToFile', 'test1.txt'); s=genbankread( test1.txt ); secv=s.sequence Obs: 1. Secventa specificata corespunde unui cromozom de la Mycobacterium bovis 2. getgenbank transfera toate informatiile din GenBank referitoare la secventa specificata in fisier (format GenBank) 3. genbankread asigura citirea fisierului si transfera continutul intr-o structura Matlab. Secventa AND propriu-zisa se afla in campul Sequence al structurii Formate de fisiere: GenBank: fisier text care contine in prima parte o serie de informatii descriptive despre secventa, urmate de secventa propriu-zisa specficata ca un sir de caractere (a,c,g,t). E formatul implicit folosit de getgenbank FASTA: fisier text care contine un antet scurt (o linie) ce incepe cu simbolul > urmat de sirul de caractere (A,C,G,T) corespunzator secventei.
Exercitii: 1. Vizualizarea codului genetic (corespondenta codon aminoacid) si invers (aminoacid codon) Indicatie: geneticcode respectiv revgeneticcode 2. Vizualizarea tabelelor de cautare pentru baze si a aminoacizi Indicatie: baselookup respectiv aminolookup 3. Determinarea frecventei de aparitie a fiecarui tip de nucleotida in secventa ACOL01002945 Indicatie: s=getgenbank( ACOL01002945, ToFile, ex1.fa, FileFormat, FASTA ); secv=s.sequence; basecount(secv) 4. Determinarea frecventei de aparitie a fiecarui codon in secventa ACOL01002945 Indicatie: se foloseste codoncount(secv) 5. Determinarea regiunilor codante prin identificarea subsecventelor ce incep cu codoni de start (ORF = Open Reading Frame): Indicatie: seqshoworfs(secv) 6. Conversia unei secvente de nucleotide in secvente de aminoacizi. Indicatie: nt2aa(secv) 7. Incarcarea si vizualizarea unei secvente folosind o interfata specifica. Indicatie: se da comanda seqtool, se alege baza de date (de exemplu NCBI) si se specifica identificatorul secventei (de exemplu ACOL01002945 ); secventa de prelucrat se poate incarca dintr-un fisier in care a fost salvata in prealabil. Aplicatie (tema). Scrieti doua functii in Matlab: a) Pentru conversia unei secvente de nucleotide intr-o secventa de aminoacizi (functia my_nt2aa primeste secventa de nucleotide ca parametru si returneaza secventa de aminoacizi) b) Pentru conversia unei secvente de aminoacizi in secventa corespunzatoare de nucleotide (functia my_aa2nt primeste secventa de nucleotide ca parametru si returneaza secventa de aminoacizi) Indicatie: se foloseste geneticcode (respectiv revgeneticcode) si proprietatile structurilor si vectorilor din Matlab (vezi anexa cu introducerea in Matlab) Anexa. Scurta introducere in MatLab 1. MATLAB = MATrix LABoratory (http://www.mathworks.com/) MATLAB este sistem interactiv destinat prelucrarilor numerice si simbolice asupra structurilor de tip matrice dar care permite si efectuarea unor prelucrari grafice si ofera suport pentru programarea diferitelor aplicatii cu caracter tehnic si stiintific.
2. Construirea matricilor: explicit (prin specificarea elementelor): [a11 a12... a1n; a21 a22... a2n;... ;am1 am2... amn] Exemplu: A=[1 2 3; 4 5 6] Observatie: Elementele unei linii se separa prin spatiu sau virgula iar liniile se separa prin punct-virgula. folosind functii sistem: permit construirea unor matrici particulare Exemple: eye(5) (matricea identitate de dimensiune 5), zeros (2,3) (matrice de dimeniune 2 x 3 cu elemente nule), rand(3,4) (matrice 3x4 cu valori aleatoare uniform repartizate in [0,1]), randn(3,4) (matrice 3x4 cu valori aleatoare avand repartitia normala standard). prin incarcarea elementelor dintr-un fisier: load ( <nume fisier> ) Exemplu: A= load( mat.dat ) - se genereaza o variabila cu numele mat care va contine matricea aflata in fisierul text mat.dat (o linie a fisierului corespunde unei linii din matrice). Observatie. Functia load poate fi folosita si pentru incarcarea spatiului de lucru (fisier cu extensia.mat) salvat anterior cu save prin concatenarea unor matrici de dimensiuni compatibile: daca a este o matrice m*n iar b este o matrice m*k atunci c=[a b] (obtinuta prin concatenare va fi o matrice m*(n + k), primele n coloane fiind din a iar ultimele k din b. Concatenand a' cu b' prin d=[a';b'] se obtine o matrice (n+k)xm. Observatie. Operatorul ' aplicat postfixat unei matrici genereaza transpusa acesteia. Observatie. Vectorii sunt vazuti ca si cazuri particulare de matrici. Matlab face diferentiere intre vectorii linie si cei coloana. Un vector linie este o matrice cu o linie si mai multe coloane, pe cand un vector coloana este o matrice cu mai multe linii si o singura coloana. 3. Specificarea elementelor unei matrici: nume matrice(indice linie, indice coloana) Exemplu: modificarea valorii unui element al matricii: A(i,j)=expresie 4. Subdomenii si submatrici: m:n (reprezinta multimea valorilor intregi cuprinse intre m si n), a:h:b (reprezinta multimea nodurilor diviziunii de pas h a intervalului [a,b]), A(:,j) (reprezinta coloana j a matricii A), A(i,:) (reprezinta linia i a matricii A; de exemplu A(1:3,:) reprezinta primele 3 linii din A). A(i1:i2,j1:j2) (reprezinta submatricea constituita din liniile cuprinse intre i1 si i2 si coloanele cuprinse intre j1 si j2)
Observatii. 1. Valoarea h specificata ca pas in definirea unui subdomeniu poate fi atat pozitiva cat si negativa. 2. Pentru determinarea dimensiunii unei matrici se foloseste functia size. Apelata pentru o matrice returneaza o pereche de valori: prima valoare reprezinta numarul de linii iar a doua numarul de coloane. Pentru a retine in variabila lin numarul de linii ale unei matrici A iar in variabila col numarul de coloane se poate specifica: [lin col]=size(a). 3. Subdomeniul vid se specifica prin []. O matrice poate fi reorganizata prin eliminarea de linii sau coloane. De exemplu, prin a(1,:)=[] se elimina prima linie a matricii iar prin a(:,2)=[] se elimina a doua coloana din matrice. 5. Operatii asupra matricilor: adunare (+), scadere (-), inmultire (*), transpunere ( ), ridicare la putere (^), determinarea inversei lui A (inv(a)), determinarea lui x din A*x=b (x=a\ b), determinarea lui x din x*a=b (x=a/b). Daca se doreste efectuarea unor operatii la nivelul elementelor (de exemplu inmultirea sau ridicarea la putere) se folosesc operator de tip "punct". De exemplu se foloseste:.* (pentru inmultirea a dou a matrici la nivel de element),.^ (pentru ridicarea la putere a fiecarui element al matricii),./ (pentru impartirea la nivel de element). 6. Operatori relationali si logici: egal (==), diferit (~ =), strict mai mic (<), mai mic sau egal (<=), strict mai mare (>), mai mare sau egal (>=), negatie logica (~), disjunctie logica ( ), conjunctie logica (&). 7. Expresii si atribuire: expresiile se construiesc dupa regulile specifice limbajelor de programare iar atribuirea de valori variabilelor se specifica cu ajutorul operatorului =. Variabilele nu trebuie declarate iar numele lor poate fi constituit din litere, cifre si liniute de subliniere. Variabilele numerice pot fi de tip intreg, real sau complex (cele complexe se specifica folosind simbolurile i sau j pentru a desemna constanta specifica I avand proprietatea ce I*I=-1). Constante numerice predefinite: pi (π), i (constanta de la numere complexe), inf (simbolul pentru infinit), NaN (valoare nedefinit a, de exemplu 0/0), eps (precizia de calcul in virgula flotanta). Pentru consultarea valorii unei variabile se specifica numele variabilei. Vizualizarea listei cu variabilele utilizate in sesiunea curent a se poate face prin comanda who sau prin consultarea ferestrei Workspace. Resetarea variabilelor se poate face prin comanda clear <nume variabila> 8. Functii de argument scalar: sin, cos, tan, asin, acos, atan, exp, log (logaritm natural), abs (modul), sqrt, sign (functia signum), round, floor, ceil, rem (restul impartirii intregi). 9. Functii cu argument vectorial: max, min, sum, prod, mean (medie aritmetica), std (abatere standard), median (mediana), sort (ordonare crescatoare). Observatie. Aplicate asupra unei matrici aceste functii sunt aplicate separat asupra fiecarei coloane producand un vector linie cu rezultate.
Exemplu: pentru a determina cel mai mic element al unei matrici: min(min(a)) 10. Fisiere de comenzi si functii definite de utilizator. MatLab este un sistem de tip interpretor (fiecare comanda este executata imediat dupa introducerea ei). Daca se doreste gruparea mai multor prelucri intr-un "program" se pot crea (prin intermediul editorului inclus in sistem) asa numitele "m-files" (fisiere cu extensia *.m). Exista doua tipuri de astfel de fisiere: Script files: contin succesiuni de comenzi Matlab. La incarcarea fisierului se executa toate comenzile specificate. Variabilele au caracter global, in sensul ca efectul executiei instructiunilor din script se va regasi in valorile variabilelor din spatiul de lucru. Scriptul este lansat in executie prin tastarea numelui in fereastra de comanda sau prin activarea comenzii RUN (F5) din fereastra de editare. Este necesar ca directorul in care se afla fisierul cu comenzi sa fie cel current (directorul current se seteaza din meniul principal de la Current Directory) Function files: definesc functii care completeaza prelucrarile oferite de sistem. Numele fisierului in care se salveaza descrierea functiei trebuie sa coincida cu numele functiei. Variabilele au caracter local. Functia poate returna mai multe rezultate si poate fi fara parametri sau cu parametri. Antetul unei functii este de forma: function[rez1,rez2, rezn]=numefunctie(par1,par2,,parm) Functia se apeleaza simplu prin numele ei urmat de lista valorilor asignate parametrilor. In cadrul unui fisier cu extensia.m se pot defini mai multe functii. Functia care are numele identic cu cel al fisierului este considerata functie principala (ea va fi putea fi apelata din fereastra de lucru sau din alte fisiere) iar celelalte sunt considerate subfunctii (pot fi apelate doar din functiile definite in cadrul fisierului respective). Corpul unei functii se termina cu Exemplu: calculul mediei si abaterii standard pentru un vector (coloana) function [medie, abstd]=indicatori(x) m=size(x,1); % determinarea dimensiunii obiectului medie=sum(x)/m; abstd=sqrt(sum(x.^2)/m-medie^2); % terminatorul este optional Dupa ce se salveaza functia in fisierul indicatori.m se poate apela astfel: indicatori([1;3;4;5;4]) 11. Prelucrari alternative si repetitive. MatLab ofera un set de comenzi specifice programarii in stil imperativ corespunzatoare principalelor categorii de prelucrari: alternative si repetitive. Prelucrari alternative. Ramificarea prelucrarii in functie de satisfacerea unei conditii se poate specifica astfel: if <conditie> <prelucrari> else <prelucrari> Conditia este de regula o expresie logica in care pot interveni operatori relationali (==,~=, <, >,
<=, >=) sau logici (, &). Daca pe o ramura sunt mai multe prelucrari acestea se separa prin virgula. Se pot suprapune mai multe prelucrari alternative astfel: if <conditie> <prelucrari> elseif <prelucrari> else <prelucrari> Exemplu. Definirea unei functii care determina semmnul argumentului pe care il primeste: function [s]=semn(x) if x>0 s=1 elseif x==0 s=0 else s=-1 In cazul ramificarii pe mai multe ramuri se poate folosi comanda switch similara instructiunii omonime din C: switch <expresie> case <valoare_de_caz>, <prelucrari> case <valoare_de_caz>, <prelucrari>... otherwise, <prelucrari> Un exemplu simplu de utilizare a comenzii switch este: arg=input('valoare din multimea {1,2,3} =') switch arg case 1, disp 'unu' case 2, disp 'doi' case 3, disp 'trei' Prelucrari repetitive. MatLab ofera comenzi de ciclare cu contor (for): for <variabila> = <subdomeniu> <prelucrare>... <prelucrare> si de ciclare conditionata anterior (while):
while <conditie> <prelucrare>... <prelucrare> Observatie. 1. Daca sunt amplasate mai multe comenzi pe aceeasi linie, trebuie separate prin virgule. 2. Iesirea fortata dintr-un ciclu for sau while se poate face cu break. Exemple. 1. for i=1:10, i, afiseaza valorile succesive pe care le ia variabila i (obs: specificarea unei expresii are ca efect afisarea valorii ei). 2. while(n), disp(mod(n,2)),n=floor(n/2);, afiseaza cifrele binare ale numarului n (in ordine inversa). 12. Siruri de caractere, afisare si preluare date: Sirurile de caractere se specifica intre apostroafe (exemplu: ' Acesta e un sir de caractere'). Afisarea variabilelor si a sirurilor de caractere se face prin comanda disp care accepta un singur parametru (exemplu: disp('rezultatul:');disp(rez)). Daca se doreste afisarea mai multor valori se poate folosi disp(sprintf( format,var1,var2 )). Formatul specificat la sprint are aceeasi sintaxa ca in C Afisarea mesajelor de eroare se face prin comanda error care are si rolul de a intrerupe executia comenzilor ulterioare aflate intr-un "m-file" (exemplu: error('eroare!')). In fisierele cu extensia *.m datele pot fi solicitate prin comanda input (exemplu: var=input ('Introduceti variabila')). 13. Reprezentari grafice: 2D: pentru reprezentarea graficului unei functii f:[a,b]->r se specifica: x=a:h:b; plot(x,f(x)) unde [a; b] reprezinta domeniul de definitie, h pasul de discretizare a acestuia, iar f este functia de reprezentat. Pentru reprezentarea pe acelasi grafic a mai multor functii se specifica x=a:h:b; plot(x,f(x),x,g(x),x,h(x)) Se poate specifica culoarea (r-rosu, b-albastru, g-verde, y- yellow etc.), tipul liniei (- - linie continua, - - - linie intrerupta, : - linie punctata) precum si simbolul pentru marcarea punctelor corespunzatoare nodurilor diviziunii (+, o) prin adaugarea unui al treilea parametru: plot(x,f(x),' r-o')
La generarea unei figuri se va crea o fereastra cu reprezentarea grafica. La fiecare comanda grafica se redeseneaza in aceeasi fereastra. Pentru a pastra graficul generat de o comanda anterioara se poate folosi comanda hold on (revenirea la varianta implicita se face prin hold off). Exemplu. x=0:0.1:2*pi; plot(x,sin(x),x,sin(x/2),x,sin(2*x)); xlabel('x');ylabel('sinus'); leg('sin(x)','sin(x/2)','sin(2x)'); Pentru vizualizarea mai multor grafice separate in aceeasi fereastra se poate folosi comanda subplot(m,n,i) unde m si n reprezinta dimensiunile structurii tabelare unde vor plasate figurile iar i numarul de ordine al pozitiei. Exemplu. x=0:0.1:4*pi; subplot(1,3,1);plot(x,sin(x));xlabel('x');ylabel('sin(x)'); subplot(1,3,2);plot(x,sin(x/2));xlabel('x');ylabel('sin(x/2)'); subplot(1,3,3);plot(x,sin(2*x));xlabel('x');ylabel('sin(2*x)'); 3D: Pentru reprezentarea grafica a unei suprafete (corespunzatoare unei functii f definite pe domeniul [a; b] x[c; d] se parcurg urmatoarele etape: se defineste o grila a domeniului de definitie prin: [x,y]=meshgrid(a:hx:b,c:hy:d) (corespunzatoare pasilor de discretizare hx, respectiv hy) se calculeaza valorile functiei in nodurile grilei z=f(x,y) (se va tine cont ca x si y sunt matrici) se reprezinta suprafata prin mesh(x,y,z) sau prin surf(x,y,z) Exemplu. Reprezentarea functiei f (x,y)=x 2 +y 2 definita pe [-2, 2] x [-2; 2] folosind acelasi pas de discretizare (0.1): [x, y]=meshgrid(-2:0.1:2); z=sqrt(x.^2+y.^2); mesh(x,y,z); pause; meshc(x,y,z); pause; contour(x,y,z); pause; contour3(x,y,z); 14. Alte structuri de date: Tablouri multidimensionale. Extind structura de matrice (tablou bidimensional). Pot fi create in aceleasi moduri ca si matricile specificand insa mai multe dimensiuni. Elementele se identifica prin specificarea tuturor indicilor incadrati intre paranteze.
Exemplu. a=rand(2,3,4) - genereaza un tablou cu 4 elemente, fiecare fiind o matrice 2x3. Elementul de pe pozitia (i, j, k) se specifica prin a(i,j,k). Vectori de celule (cell arrays). Extind structura de tablou multidimensional, elementele componente ale tabloului putand fi de dimensiuni diferite. Se creeaza prin gruparea intre acolade a mai multor tablouri ce pot avea dimensiuni diferite. Elementele se identifica prin indice cuprins intre acolade. Exemplu. Crearea unui vector cu trei celule (fiecare celula este o matrice de alta dimensiune): a=rand(2,2); b=rand(3,3); c=rand(4,4); d={a b c} Specificarea primei celule (matricea a): d{1}. Specificarea primei linii din a doua celula: d{2}(1,:). Observatie. Continutul matricilor a, b si c este copiat in vectorul d. Structuri neomogene. Sunt colectii de date de diverse tipuri ale caror elemente pot fi identificate prin calificare (si nu prin indexare ca la vectorii de cellule descrisi de mai sus), fiecarui element asociindu-se un nume. Sunt similare tipului structura din limbajele de programare clasice (struct din C). Structurile pot fi la randul lor organizate in vectori. Exemplu. Definirea unei structuri cu numele art prin completarea separata a campurilor: art.nume='popescu'; art.tabel=rand(2,2); Adaugarea unui nou element intr-un vector cu structuri: art(2)=struct('nume','ionescu','tabel',rand(2,2)) Consultarea continutului primului articol: art(1). Consultarea campului nume din toate elementele vectorului art: art.nume 15. Alte particularitati ale lucrului in Matlab: a) Pentru inhibarea afisarii rezultatului unei evaluari se foloseste separatorul ; (exemplu: a=[1 2 3];) b) Pentru trecerea la linia urmatoare fara a efectua evaluarile din linia curenta se folose»ste separatorul : (exemplu: a=[1 2 3]:) c) Intreruperea evaluarii unor comenzi se face cu CTRL+BREAK d) Salvarea sesiunii curente se face prin functia Save Workspace din meniu prin care se transfera informatiile corespunzatoare sesiunii curente intr-un fisier cu extensia.mat. Reincarcarea sesiunii se face cu Load Workspace. e) MatLab este case-sensitive.