Sunteți pe pagina 1din 9

U.M.F. Gr. T.

Popa Iaşi – Facultatea de Bioinginerie Medicală

Laborator 4

Alinierea secvenţelor
Măsurarea similarităţii secvenţelor
Atunci când se dau două secvenţe de caractere există două metode de măsurare a
distanţei dintre acestea:
- distanţa Hamming – se poate calcula numai pentru şiruri de caractere egale ca
lungime şi este dată de numărul de poziţii care diferă
- distanţa Levenshtein – sau distanţa de editare, poate fi calculată pentru şiruri de
lungimi diferite şi este formată din numărul minim de operaţii de ştergere, inserare
sau schimbare de caractere care transformă un şir în altul
-
Exemplu:
agtc Distanţa Hamming:2
cgta

ag-tcc Distanţa Levenshtein: 3


cgctca

Pentru aplicaţiile din domeniul biologiei moleculare, unele modificări din cadrul unei
secvenţe sunt mai frecvente decât altele. Un exemplu poate fi, înlocuirea aminoacizilor:
înlocuirea unui aminoacid cu unul având dimensiuni şi proprietăţi apropiate este mai
probabilă decât înlocuirea acestuia cu un altul având proprietăţi total diferite. Ştergerea unei
secvenţe continui de lungime N de aminoacizi este mai probabilă decât ştergerea a N
aminoacizi care nu sunt unul după altul. De aceea se pot acorda diferite punctaje pentru
diferite operaţii de editare. Sistemul de punctare trebuie să ţină cont de înlocuiri, inserări sau
ştergeri (o inserare din punctul de vedere al unei secvenţe poate fi considerată o ştergere din
punctul de vedere al celeilalte). Ştergerile şi spaţiile din secvenţă vor trebui să aibă punctaje
diferite în funcţie de lungimea acestora.
Distanţele Hamming şi Levenshtein măsoară în realitate nesimilaritatea secvenţelor:
Secvenţele similare au distanţe mici, în timp ce secvenţele care nu seamănă una cu alta au
distanţe mari.

Exemplu de calcul pentru punctaje


În cazul secvenţelor de acizi nucleici cel mai simplu sistem de punctare (scor) poate fi
următorul: +1 pentru potrivire -1 pentru nepotrivire.
Pentru cazurile mai complicate, care pun în evidenţă un număr mare de mutaţii se pot
folosi scheme mai complicate. De exemplu mutaţiile ag şi tc sunt mult mai probabile
decât at, ac, gt, gc. Acest lucru poate fi reprezentat prin intermediul următoarei
matrice:

a t g c
a 20 10 5 5
t 10 20 5 5
g 5 5 20 10
c 5 5 10 20

Bioinformatica L04 1
U.M.F. Gr. T. Popa Iaşi – Facultatea de Bioinginerie Medicală

Pentru proteine au fost propuse mau multe scheme de punctare. Aminoacizii pot fi
grupaţi în clase având proprietăţi similare. Acest lucru a fost făcut prima dată de M. O.
Dayhoff, colectând statistic frecvenţele de substituţie în secvenţele de proteine cunoscute în
acel moment. Rezultatele obţinute au fost folosite mult timp pentru a calcula scorul de aliniere
dintre diferite proteine. Ele au fost optimizate creând matrici noi pe baza numărului în creştere
de secvenţe disponibile.
Atunci când două organisme evoluează diferit, mutaţiile tind să se acumuleze. Pentru a
măsura probabilitatea relativă a unei substituţii particulare, de exemplu Serina->Treonina, se
poate calcula numărul de schimbări Serina->Treonina în perechile alineate ale unor
organisme. Frecvenţele de apariţie ale acestei mutaţii pot fi folosite la schimbarea matricelor
de substituţie.
O unitatea de măsură pentru divergenţa secvenţelor este PAM: 1PAM=1 Percent
Accepted Mutation. Pentru cele mai multe secvenţe de proteine, 1 PAM diferenţă înseamnă
nu mai mult de o schimbare la orice poziţie. Relaţia dintre scorul PAM şi identitatea secvenţei
în procente (%) este dată mai jos:
PAM 0 30 80 110 200 250
% 100 75 50 60 25 20
Pragul de PAM250 corespunzând 20% constituie pragul minim de similaritate între
două secvenţe pentru care se poate spera la obţinerea unei alinieri

Semnificaţia alinierilor
În cazul descoperirii unei similarităţi între două secvenţe apare următoarea întrebare:
similaritatea este semnificativă sau a fost pură întâmplare?
Pentru fenomenele simple, există o teorie a probabilităţilor care poate calcula exact
distribuţia aşteptată a unui rezultat. În cazul secvenţelor nu este o sarcină uşoară definirea
populaţiilor din care se vor alege secvenţele. Un exemplu ar fi alegerea unor şiruri aleatoare
de nucleotide sau aminoacizi ca secvenţe de control şi compararea cu toate acestea – totuşi
numărul mare de secvenţe existente împiedică obţinerea unui rezultat .
O abordare practică a acestei probleme este următoarea: dacă scorul alinierii observate
nu este mai bun decât cel realizat în urma unei permutări aleatoare a secvenţei, este foarte
probabil ca acesta să fie obţinut dintr-o întâmplare. Se poate amesteca de mai multe ori una
dintre secvenţe, recalcularea alinierii acesteia cu a doua secvenţă şi colectarea distribuţiei
rezultatului. Un rezultat tipic este dat în figura de mai jos:

Scorurile de aliniere pentru două perechi de secvenţe formează curba lui gauss
(distribuţie normală). Pentru orice scor x, probabilitatea de a observa un scor mai mare sau
egal cu x este: P( scor  x)  1  exp(  Ke x ) , unde K şi  sunt parametri relativi la înălţimea
maximă şi lăţimea distribuţiei.
În mod clar, dacă secvenţa amestecată obţine scoruri la fel de bune ca cea originală,
atunci rezultatul obţinut nu este semnificativ.

Bioinformatica L04 2
U.M.F. Gr. T. Popa Iaşi – Facultatea de Bioinginerie Medicală

Alți coeficienți (indecși de similaritate)

 Sørensen–Dice coefficient
 Jaccard index
 Renkonen similarity index (datorită Olavi Renkonen)
 Tversky index

Distanța Damerau–Levenshtein

Distanța Damerau-Levenshtein între două cuvinte este numărul minim de operațiuni (care
constau în inserții, ștergeri sau înlocuiri ale unui singur caracter sau transpunerea a două
caractere adiacente) necesare pentru a schimba un cuvânt în altul.
Funcția de distanță între două șiruri s1 și s2 se construiește recursiv i – prefix pentru subșir
initial j – prefix pentru șirul s2 target.

 D (i  1, j )  del_cost( source(i ))

D (i, j )  min  D (i, j  1)  del_insert(target( j ))
 D (i  1, j )  subst_cost( source(i ), target( j ))

Dacă alocăm valorile


inserție = 1
deletion = 1
substitution = 2


 D(i  1, j )  1

D(i, j )  min  D(i, j  1)  1

 D(i  1, j )  2 dacă source(i )  target( j )
 0 dacă source(i )  target( j )

Se construiește o matrice de distanțe, pe baza valorilor de mai sus

Bioinformatica L04 3
U.M.F. Gr. T. Popa Iaşi – Facultatea de Bioinginerie Medicală

Exemplu 2, ‘zeil’  ‘trials’

What's the minimum cost to convert “Z” to “t”? It's the smallest of
the three values computed as
Add
1 plus the cost of converting “Z” to “” (we get this cost by
looking to the left one position).
Remove
1 plus the cost of converting “” to “t”, giving “tZ” (we get
this cost by looking up one position).
Change
1 (because “Z” and “t” are different characters) plus the
cost of converting “” to “” (we get this cost by looking
diagonally up and to the left one position).
The last of these yields the minimal distance: 1.

What's the minimum cost to convert “Z” to “tr”? It's the smallest of the three values computed as

Add
1 plus the cost of converting “Z” to “t” (we get this cost by looking to the left one position).
Remove
1 plus the cost of converting “” to “tr”, giving “trZ” (we get this cost by looking up one position).
Change
1 (because “Z” and “t” are different characters) plus the cost of converting “” to “t” (we get this cost by looking
diagonally up and to the left one position).

The last of these yields the minimal distance: 2.

Bioinformatica L04 4
U.M.F. Gr. T. Popa Iaşi – Facultatea de Bioinginerie Medicală

Exemplu, funcție implementată în Matlab:


‘zeil’  ‘trials’

function [d,v] = EditDistanceLevensthein(string1,string2)


% Edit Distance is a standard Dynamic Programming problem.
% Given two strings s1 and s2, the edit distance between s1 and s2 is the
% minimum number of operations required to convert string s1 to s2.
% The following operations are typically used:
% Replacing one character of string by another character.
% Deleting a character from string
% Adding a character to string
% Example:
% s1='article'
% s2='ardipo'
% EditDistance(s1,s2)
% > 4
% you need to do 4 actions to convert s1 to s2
% replace(t,d) , replace(c,p) , replace(l,o) , delete(e)
% using the other output, you can see the matrix solution to this problem
% Return:
% - d levensthein distance
% - V matrix cost

m=length(string1);
n=length(string2);
v=zeros(m+1,n+1);
for i=1:1:m
v(i+1,1)=i;
end
for j=1:1:n
v(1,j+1)=j;
end
for i=1:m
for j=1:n
if (string1(i) == string2(j))
v(i+1,j+1)=v(i,j);
else
v(i+1,j+1)=1+min(min(v(i+1,j),v(i,j+1)),v(i,j));
end
end
end
d=v(m+1,n+1);
en

Bioinformatica L04 5
U.M.F. Gr. T. Popa Iaşi – Facultatea de Bioinginerie Medicală

Funcţii matlab
randperm
Calculează o permutare
Sintaxa:
randperm(N)
Argumente:
N – dimensiunea permutării
Descriere:
Funcţia returnează o permutare a numerelor de la 1 până la N.
Exemple:
>> x=randperm(10);
>> x

nwalign

nwalign(...,'ALPHABET', A)
Specifică cu ajutorul variabilei A alfabetul folosit la calcularea similaritaţii. A poate
avea valorile: ‘AA’ specifică aminoacizi, ‘NT’ specifică nucleotide. Dacă alfabetul nu este
specificat, se foloseşte AA.
Exemple:
Compară două secvenţe de nucleotide
[sc, al]=nwalign(s1, s2, 'ALPHABET', ’NT’);
Compară două secvenţe de aminoacizi
[sc, al]=nwalign(s1, s2, 'ALPHABET', ’AA’);
[sc, al]=nwalign(s1, s2)

stem
Trasează un grafic de puncte.
Sintaxa:
stem(Y)
stem(X, Y)
Argumente:
Y – valorile punctelor care se trasează
X – dacă există, reprezintă punctele pe axa Ox unde se vor desena valorile din Y.
Descriere
Trasează un grafic de puncte. Graficul este trasat prin linii verticale de lungime Y.
Exemple:
>> y=randperm(5);
>> stem(y)

hist
Trasează histograma.
Sintaxa:
hist(Y)
hist(Y, X)
Argumente:
Y – valorile punctelor pentru care se trasează histograma

Bioinformatica L04 6
U.M.F. Gr. T. Popa Iaşi – Facultatea de Bioinginerie Medicală

X – dacă există, reprezintă numărul de categorii în care se vor încadra punctele de pe


histograma. Dacă nu există, punctele vor fi împărţite în 10 categorii.
Descriere
Trasează un grafic de puncte. Graficul este trasat prin linii verticale de lungime Y.
Exemple:
>> hist(x)

Exemple:
1. Amestecarea unui şir de caractere
Iniţializarea unui şir de caractere
>> s='abcdefg';
Calculează lungimea şirului în vederea obţinerii unei permutări cu dimensiunea dorită
>> n=length(s);
Calculează permutarea
>> p=randperm(n);
Amestecă şirul de caractere. Rezultatul va fi copiat in variabila sa
>> sa=s(p);
Afişează rezultatul
>> sa

2. Similaritatea dintre două secvenţe de proteină:


Următoarele instrucţiuni sunt scrise într-un fişier de tip m.
Şterge toate variabilele din memorie pentru a elimina orice interferenţe ale unor calcule
efectuate anterior
clear all
Citeşte secvenţele de comparat. Fişierele sunt în format GenPept
p1=genpeptread('c:\ncbi\AAD13390.gpwithparts');
p2=genpeptread('c:\ncbi\AAF61377.gpwithparts');
Calculează alinierea celor doua secvenţe
[sc, al]=nwalign(p1.Sequence, p2.Sequence);
Afişează scorul de aliniere pe ecran
fprintf('Scor de aliniere = %f\n', sc);
Afişează alinierea
showalignment(al);
Se pregăteşte pentru calcularea semnificaţiei alinierii. Numărul de permutări este 20
n=20;
Iniţializează cu 0 un şir unde se vor păstra cele n scoruri care vor fi calculate
scor=zeros(n, 1);
Calculează dimensiunea secvenţei din p1. Aceasta va fi folosită la calcularea permutarii
p1l=length(p1.Sequence);
Repetă de n ori calculele
for i=1:n
Crează o permutare
p=randperm(p1l);
Amestecă secvenţa din p1
secv=p1.Sequence(p);
Calculează scorul de aliniere dintre secvenţa permutată şi secvenţa p2
scor(i)=nwalign(secv, p2.Sequence);
end
Creează o figură nouă pentru afişarea rezultatului
figure

Bioinformatica L04 7
U.M.F. Gr. T. Popa Iaşi – Facultatea de Bioinginerie Medicală

Afişează histograma rezultatelor (pentru histogramă rezultatele au fost împărţite în 5


categorii)
hist(scor, 5)
Pastrează graficul activ, pentru a desena pe el în continuare
hold on
Afişează sub o line verticală de lungime 1 în dreptul scorului de aliniere dintre p1 şi p2
(pentru a evidenţia distanţa dintre scorurile cu secvenţele permutate şi scorul obţinut iniţial)
stem(sc, 1);
Afişează texte pentru axele de coordonate
xlabel('Scor');
ylabel('Numar de secvente');

După rularea acestui program se obţine un grafic asemănător cu cel de mai jos. Datorită
modului de generarea numerelor aleatoare, graficul poate diferi de la un calculator la altul.

6
Numar de secvente

0
-160 -140 -120 -100 -80 -60 -40 -20 0 20 40
Scor

Se observă faptul că scorul alinierii celor două secvenţe este mult mai mare decât cele
obţinute în urma alinierii cu o secvenţă permutată. Pentru un număr mai mare de încercări se
poate arăta faptul că probabilitatea de obţinere a unei alinieri mai mari folosind o secvenţă
permutată este foarte mică. Se poate trage concluzia că secvenţele sunt aliniate corespunzător.

În figura de mai jos este redată rularea programului pentru un număr de 1000
permutări, cu histograma împărţită în 20 de categorii. Se observă faptul că nici o aliniere cu
secvenţa permutată nu s-a apropiat la distanţă semnificativă de alinierea iniţială.

Bioinformatica L04 8
U.M.F. Gr. T. Popa Iaşi – Facultatea de Bioinginerie Medicală

120

100

80
Numar de secvente

60

40

20

0
-200 -150 -100 -50 0 50
Scor

Probleme
1. Încărcaţi o secvenţă la alegere din fişierele de pe CD-ul laboratorului şi creaţi o
permutare din secvenţa existentă (se recomandă alegerea unui fişier in format GenPept
deoarece secvenţa conţinută de acestea este mai mare)
2. Rulaţi exemplele din laborator. Încercaţi şi alegerea altor secvenţe din fişierele
furnizate pe CD.
3. La exemplul 2 înlocuiţi una din înregistrări cu AAC28367. Ce observaţi?

Bioinformatica L04 9

S-ar putea să vă placă și