Algoritmo Needleman-Wunsch

Post on 20-Jul-2015

1872 Views

Category:

Science

1 Downloads

Preview:

Click to see full reader

Transcript

1

Algoritmo de Needleman-Wunsch

Alinhamento global

Marcos Castro

2

Introdução

O Algoritmo de Needleman-Wunsch é utilizado em Bioinformática para realizar o alinhamento global de sequências de proteínas ou nucleotídeos.

Essa foi uma das primeiras aplicações que utilizaram programação dinâmica para comparar sequências biológicas.

O algoritmo leva o nome dos seus autores: Needleman e Wunsch.

3

Alinhamento global vs local

Alinhamento global é um alinhamento que se faz em toda a extensão da sequência.

No alinhamento local se procura alinhar fragmentos das sequências e não toda a extensão das mesmas.

O algoritmo de Needleman-Wunsch realiza o alinhamento global garantindo solução ótima.

4

Algoritmo de Needleman-Wunsch

O algoritmo faz uso de uma matriz de pontuação (scores) para medir a similaridade entre os caracteres.

Temos os parâmetros: match (caracteres iguais), mismatch (caracteres diferentes) e gap penalty (penalidade por lacuna).

Exemplo: match = 1, mismatch = -1 e gap penalty = -1.

5

Supor uma sequência s1 e outra sequência s2, tam_s1 e tam_s2 serão os tamanhos dessas sequências.

“M” será o nome da nossa matriz. O primeiro passo é alocar uma matriz (tam_s2 + 1) linhas por (tam_s1 + 1) colunas.

Iremos indexar a partir do zero. M[0][0] corresponde ao elemento da primeira linha e primeira coluna, M[0][1] corresponde ao elemento da primeira linha e segunda coluna e assim por diante.

Algoritmo de Needleman-Wunsch

6

Algoritmo de Needleman-Wunsch

O M[0][0] será 0. O restante dos elementos da primeira linha serão preenchidos da seguinte forma:

M[0][i] = M[0][i - 1] + gap_penalty (i > 0)

O restante dos elementos da primeira coluna serão preenchidos da seguinte forma:

M[j][0] = M[j - 1][0] + gap_penalty (j > 0)

7

Exemplo para inicializar a primeira linha:

gap_penalty = -1

M[0][1] = M[0][0] + gap_penalty = 0 + (-1) = -1

M[0][2] = M[0][1] + gap_penalty = -1 + (-1) = -2

e assim por diante...

Exemplo para inicializar a primeira coluna:

M[1][0] = M[0][0] + gap_penalty = 0 + (-1) = -1

M[2][0] = M[1][0] + gap_penalty = -1 + (-1) = -2

e assim por diante...

Algoritmo de Needleman-Wunsch

8

Iremos alinhar as sequências GCAT e GAT.

Supor os valores para os seguintes parâmetros:

match = 1, mismatch = -1, gap_penalty = -1

Preenchemos a primeira linha e primeira coluna:

Algoritmo de Needleman-Wunsch

- G C A T

- 0 -1 -2 -3 -4

G -1

A -2

T -3

9

Para preencher o restante da matriz, precisamos calcular o valor que vem da diagonal superior esquerda, do topo e da esquerda de cada célula da matriz. Iremos calcular esses valores para M[1][1] que está representado pelo ponto de interrogação.

Algoritmo de Needleman-Wunsch

- G C A T

- 0 -1 -2 -3 -4

G -1 ?

A -2

T -3

10

O valor da diagonal é calculado:

diagonal = M[i - 1][j - 1] + score

“score” será igual a “match” se os caracteres forem iguais, caso contrário será igual a “mismatch”.

Algoritmo de Needleman-Wunsch

- G C A T

- 0 -1 -2 -3 -4

G -1 ?

A -2

T -3

11

diagonal = M[i - 1][j - 1] + score

Para M[1][1] (i = 1 e j = 1) ficará:

diagonal = M[0][0] + score

diagonal = 0 + (+1) (match) = 1

Algoritmo de Needleman-Wunsch

- G C A T

- 0 -1 -2 -3 -4

G -1 ?

A -2

T -3

12

O topo calcula-se da seguinte forma:

topo = M[i - 1][j] + gap_penalty

Para M[1][1] temos que (gap_penalty = -1):

topo = M[0][1] + (-1) = (-1) + (-1) = -2

Algoritmo de Needleman-Wunsch

- G C A T

- 0 -1 -2 -3 -4

G -1 ?

A -2

T -3

13

A esquerda calcula-se da seguinte forma:

esquerda = M[i][j - 1] + gap_penalty

Para M[1][1] temos que (gap_penalty = -1):

esquerda = M[1][0] + (-1) = (-1) + (-1) = -2

Algoritmo de Needleman-Wunsch

- G C A T

- 0 -1 -2 -3 -4

G -1 ?

A -2

T -3

14

Temos os valores da diagonal, do topo e da esquerda:

diagonal = 1, topo = -2, esquerda = -2

Para saber o M[1][1] basta calcular o máximo desses valores:

M[1][1] = max(1, -2, -2) = 1

Algoritmo de Needleman-Wunsch

- G C A T

- 0 -1 -2 -3 -4

G -1 ?

A -2

T -3

15

Agora iremos calcular o M[1][2]:

diagonal = -1 + (-1) (mismatch) = -2

topo = -2 + (-1) = -3

esquerda = -1 + (-1) = 0

M[1][2] = max(-2, -3, 0) = 0

Algoritmo de Needleman-Wunsch

- G C A T

- 0 -1 -2 -3 -4

G -1 1 ?

A -2

T -3

16

Matriz preenchida:

Algoritmo de Needleman-Wunsch

- G C A T

- 0 -1 -2 -3 -4

G -1 1 0 -1 -2

A -2 0 0 1 0

T -3 -1 -1 0 2

17

O algoritmo permite reconhecer qual a célula que deu origem a cada entrada da matriz. Essa precedência é indicada pelas setas:

Essas setas é o nosso traceback que utilizaremos para realizar o alinhamento.

Algoritmo de Needleman-Wunsch

- G C A T

- 0 -1 -2 -3 -4

G -1 1 0 -1 -2

A -2 0 0 1 0

T -3 -1 -1 0 2

18

Para construir o alinhamento, começa-se pela última célula que foi preenchida, para o nosso exemplo é a M[3][4] que possui o valor 2.

Utilizaremos a orientação das setas para construir o alinhamento.

Algoritmo de Needleman-Wunsch

- G C A T

- 0 -1 -2 -3 -4

G -1 1 0 -1 -2

A -2 0 0 1 0

T -3 -1 -1 0 2

19

M[3][4] veio da diagonal, então as duas sequências recebem caracteres.

Sequência 1: T

Sequência 2: T

Algoritmo de Needleman-Wunsch

- G C A T

- 0 -1 -2 -3 -4

G -1 1 0 -1 -2

A -2 0 0 1 0

T -3 -1 -1 0 2

20

M[2][3] veio da diagonal, então as duas sequências recebem caracteres.

Sequência 1: AT

Sequência 2: AT

Algoritmo de Needleman-Wunsch

- G C A T

- 0 -1 -2 -3 -4

G -1 1 0 -1 -2

A -2 0 0 1 0

T -3 -1 -1 0 2

21

M[1][2] veio da esquerda, então coloca-se o caractere na sequência 1 e a lacuna (gap) na sequência 2.

Sequência 1: CAT

Sequência 2: -AT

Algoritmo de Needleman-Wunsch

- G C A T

- 0 -1 -2 -3 -4

G -1 1 0 -1 -2

A -2 0 0 1 0

T -3 -1 -1 0 2

22

M[1][1] veio da diagonal, então as duas sequências recebem caracteres.

Sequência 1: GCAT

Sequência 2: G-AT

Algoritmo de Needleman-Wunsch

- G C A T

- 0 -1 -2 -3 -4

G -1 1 0 -1 -2

A -2 0 0 1 0

T -3 -1 -1 0 2

23

Se tivesse uma seta apontando para o topo, colocaríamos uma lacuna na sequência 1 e o caractere na sequência 2.

Algoritmo de Needleman-Wunsch

- G C A T

- 0 -1 -2 -3 -4

G -1 1 0 -1 -2

A -2 0 0 1 0

T -3 -1 -1 0 2

24

A implementação foi feita utilizando a linguagem de programação Python. O código encontra-se no endereço:

https://github.com/marcoscastro/msc_bioinfo/tree/master/needleman_wunsch

Para executar o nosso exemplo basta fazer:

python needleman_wunsch.py GCAT GAT 1 -1 -1

GCAT e GAT são as sequências. 1, -1 e -1 são os parâmetros match, mismatch e gap_penalty respectivamente.

Implementação

25

Dúvidas?

mcastrosouza@live.comObrigado!

26

http://www.cs.utoronto.ca/~brudno/bcb410/lec2notes.pdf

http://web.ist.utl.pt/ist155746/relatorio_2_bc.pdf

http://en.wikipedia.org/wiki/Needleman-Wunsch_algorithm

Referências

top related