L'alineament de seqüències és un mètode computacional que permet inferir informació biològica només a partir de la informació que tenen les seqüències.

Introducció

Avui en dia l'acumulació de coneixement biològic creix de manera exponencial, i donar sentit a aquest coneixement és un repte que requereix una major comprensió de la biologia de les cèl·lules i els organismes.

La manera més fiable de determinar l'estructura o funció d'una molècula biològica és mitjançant l'experimentació directa. Tanmateix, és molt més fàcil obtenir la seqüència d'ADN del gen corresponent a un ARN o una proteïna, que no pas determinar experimentalment la seva funció o estructura.

Per tant part del repte és simplement organitzar, classificar i analitzar la immensa riquesa de dades de seqüències, i desenvolupar mètodes computacionals que puguin inferir informació biològica només a partir de la seqüència.

En aquest enllaç teniu el projecte de suport: https://gitlab.com/xtec/bio-align

Seqüències

Per entendre la natura no has de pensar en ella com un inventor que dissenya els organismes, sinó en una “entitat” que es dedica a arreglar i experimentar amb organismes i els seus components.

Les noves seqüències s'adapten a partir de seqüències preexistents en lloc d'inventar-se de zero, i aquest fet ens permet analitzar les seqüències de manera computacional per reconèixer una similitud significativa entre una seqüència nova i una seqüència sobre la qual ja se sap quelcom.

Quan fem això podem transferir informació sobre l'estructura i/o la funció a la nova seqüència. Diem que les dues seqüències relacionades són homòlogues i que estem transferint informació per homologia.

Dues seqüències són homologues si deriven d’una seqüència comuna, és a dir, tenen un ancestre comú.

La homologia no és quantificable, les seqüències són homologues o no.

Per tant, una de les preguntes més bàsiques sobre un gen o proteïna és si està relacionat amb algun altre gen o proteïna:

  • La relació de dues proteïnes a nivell de seqüència suggereix que són homòlogues.
  • La relació també suggereix que poden tenir funcions comunes.

Mitjançant l'anàlisi de moltes seqüències d'ADN i proteïnes, és possible identificar dominis o motius que es comparteixen entre un grup de molècules.

Aquestes anàlisis de la relació de proteïnes i gens s'aconsegueixen alineament seqüències.

La majoria dels problemes en l'anàlisi de seqüències computacionals són essencialment estadístics. Les forces evolutives estocàstiques actuen sobre els genomes. Discernir similituds significatives entre seqüències antigament divergents enmig d'un caos de mutació aleatòria, selecció natural i deriva genètica presenta seriosos problemes de senyal al soroll. Molts dels mètodes d'anàlisi més potents disponibles fan ús de la teoria de la probabilitat.

Alineament de proteïnes

A l’hora de comparar proteïnes, podem comparar la seqüència d’aminoàcids que la componen, o podem comparar els gens que codifiquen la seqüència d’aminoàcids.

Les seqüències d’aminoàcids són més informatives perquè:

  • Molts canvis en una seqüència d'ADN (especialment a la tercera posició d'un codó) no canvien l'aminoàcid que s'especifica.

  • Molts aminoàcids comparteixen propietats biofísiques relacionades (per exemple, la lisina i l'arginina són tots dos aminoàcids bàsics).

El resultat d’això és que les comparacions de seqüències de proteïnes poden identificar seqüències homòlogues mentre que les comparacions de seqüències d'ADN corresponents no poden.

Per tant, quan s'analitza una seqüència de codificació de nucleòtids sovint és preferible estudiar la seva proteïna traduïda.

A Blast veurem que ens podem moure fàcilment entre els mons de l'ADN i les proteïnes.

Per exemple, l'eina TBLASTN del lloc web NCBI BLAST permet cercar proteïnes relacionades derivades d'una base de dades d'ADN amb una seqüència de proteïnes.

Aquesta opció de consulta s'aconsegueix traduint cada seqüència d'ADN a les sis proteïnes que potencialment codifica.

No obstant tot el que hem explicat fins ara, en molts casos és adequat comparar seqüències d’ADN.

Aquesta comparació pot ser important per confirmar la identitat d'una seqüència d'ADN en una cerca de bases de dades, per buscar polimorfismes, per analitzar la identitat d'un fragment d'ADNc clonat o per comparar regions reguladores, per posar alguns exemples.

Homologia

Dues seqüències són homòlogues si comparteixen un ascendent evolutiu comú.

No hi ha graus d'homologia; les seqüències són homòlogues o no.

Les proteïnes homòlogues gairebé sempre comparteixen una estructura tridimensional significativament relacionada. Un exemple d’homologia és el de la mioglobina humana (NP_005359.1) i la beta globina (NP_000509.1), dues proteïnes que estan relacionades llunyanament, però significativament.

Es creu que la mioglobina i les cadenes d'hemoglobina (alfa, beta i altres) van divergir fa uns 450 milions d'anys, a prop del moment en què els llinatges de peixos humans i cartílagens van divergir.

La mioglobina i la beta globina tenen estructures molt semblants, tal com determina la cristal·lografia de raigs X tal com pots veure en aquests imatge:

TODO

Aquestes proteïnes són homòlogues (descendeixen d'un avantpassat comú) i comparteixen estructures tridimensionals molt semblants.

Tanmateix, l'alineament per parelles de les seqüències d'aminoàcids d'aquestes proteïnes revela que les proteïnes comparteixen una identitat d'aminoàcids molt limitada.

Identitat

Quan dues seqüències són homòlogues, les seves seqüències d'aminoàcids o de nucleòtids solen compartir una identitat significativa.

Si bé l'homologia és una inferència qualitativa (les seqüències són homòlogues o no), la identitat i la semblança són quantitats que descriuen la relació de les seqüències.

En particular, dues molècules poden ser homòlogues sense compartir una identitat estadísticament significativa d'aminoàcids (o nucleòtids).

A la família de la globina, tots els membres són homòlegs, però alguns tenen seqüències que han divergit tant que no comparteixen cap identitat de seqüència reconeixible

Per exemple:

  • La beta globina humana i la neuroglobina humana només comparteixen un 22% d'identitat d'aminoàcids.
  • Les cadenes de globina individuals comparteixen la mateixa forma general que la mioglobina, tot i que les proteïnes de mioglobina i alfa globina només comparteixen un 26% d'identitat d'aminoàcids.

En general, les estructures tridimensionals divergeixen molt més lentament que la identitat de la seqüència d'aminoàcids entre dues proteïnes.

I és l’estructura la que defineix la funció de la proteïna!

Reconèixer aquest tipus d'homologia és un problema bioinformàtic especialment complex.

Ortologia

Les proteïnes que són homòlogues poden ser ortologues o paralogues.

Els ortòlegs són seqüències homòlogues en diferents espècies que tenen un gen avantpassat comú i que han divergit per especiació.

La història del gen reflecteixi la història de l'espècie, i per això els gens s'anomenen ortòlegs (orto = exacte). Es suposa que els ortòlegs tenen funcions biològiques similars, i podem deduir la funció d’una seqüència a partir d’una altra seqüència homòloga.

Per exemple, els humans i els rosegadors van divergir fa uns 90 milions d'anys (MYA), moment en què un sol gen de la mioglobina ancestral va divergir per especiació, i en ambdós casos la funció del gen es transportar oxigen a les cèl·lules musculars

A continuació tens un dibuix amb l’arbre dels ortòlegs de la mioglobina:

Paralogia

Els paràlegs són seqüències homòlogues sorgides per un mecanisme com la duplicació de gens.

En aquest cas l'homologia és el resultat de la duplicació gènica de manera que ambdues còpies han baixat una al costat de l'altra durant la història d'un organisme.

Els gens s’anomenan paralògics (para = en paral·lel) perquè evolucionen dins de la mateixa espècie.

Per exemple, la globina alfa 1 humana (NP_000549.1) és paraloga a la globina alfa 2 (NP_000508.1). De fet, aquestes dues proteïnes comparteixen una identitat d'aminoàcids del 100%.

La globina alfa 1 i la globina beta humanes també són paralogs, com totes les proteïnes humanes que es mostren a continuació i que són membres de la familia globina:

Totes les globines tenen propietats diferents, inclosa la distribució regional al cos, el temps de desenvolupament de l'expressió gènica i l'abundància. Però encara que totes tenen funcions diferents, aquestes funcions estan relacionades com a proteïnes portadores d'oxigen.

Per saber una mica més sobre aquests arbres i la evolució podeu consultar aquest video:

Similitud

A primera vista, decidir que dues seqüències biològiques són semblants no és diferent de decidir que dues cadenes de text són semblants.

Els algoritmes de semblança de text es fan servir per buscar la paraula més semblant en un diccionari quan una paraula no es troba en un diccionari perquè està mal escrita. És el que coneixes com a corrector ortogràfic bàsic.

Per tant, no t’ha d’estranyar que els algoritmes d'anàlisi de seqüències comparteixin molta semblança amb els algoritmes de semblança de text.

Distància de Levenshtein

La distància de Levenshtein (o distància d’edició) és un algorisme del 1965 dissenyat per comparar dues paraules, que es va aplicar posteriorment a seqüències biològiques.

Aquest algorisme es basa en que, per transformar una paraula en un altre, només són necessàries tres operacions bàsiques: inserir, suprimir o substituir un caràcter.

Cada vegada que s’aplica una d’aquestes operacions, la distància s’incrementa 1 punt, i quants més punts major és la distància d’edició de les dues paraules i menys semblants són.

Programació dinàmica

La programació dinàmica és un mètode de resolució de problemes que es basa en resoldre el problema a partir d’un subproblema més petit de manera recursiva fins trobar el resultat del subproblema menor.

Per exemple per calcular el factorial de 7, el podem calcular multiplicant 7 pel factorial de 6, i el factorial de 6 el podem calcular multiplicant 6 pel factorial de 5, etc.

A continuació tens un algorisme recursiu per calcular el factorial de n:

def factorial(n):
    if n == 0:
        return 1
    return n * factorial(n-1)

assert factorial(6) == 720

Tots els algoritmes recursius es poden transformar en lineals mitjançant un array que guarda els resultat parcials, tal com pots veure a continuació:

import numpy as np

def factorial(n):
    array = np.arange(n+1, dtype=np.dtype("int64"))
    array[0] = 1

    for i in range(1, n+1):
        array[i] = array[i-1]*i

    return array[n]

assert factorial(6) == 720, f"n = {factorial(6)}"

Encara que un algoritme recursiu sigui molt més senzill d’escriure, i més “entenedor”, els algoritmes lineals són molt més ràpids d’executar i no estan limitats per la mida de la pila d’execució del procés.

Per aquest motiu, molts compiladors reescriuen el codi recursiu en lineal de manera automàtica si l'algoritme és "tail-recursive".

Matriu de distàncies

La distància d’edició és un algorisme lineal que fa servir una matriu (un array de dos dimensions) per guardar els resultats parcials que permeten anar construint el resultat final.

Donades dues seqüències d'àcids nucleics xs i ys, la matriu de distàncies conté les distàncies entre tots els prefixos de la seqüència xs i tots els prefixos de la seqüència ys.

Per començar, has d’omplir la matriu amb el resultat del subproblema basic a partir del qual anirem construint resultats parcials fins arribar al resultat final.

Per exemple, si vols comparar les seqüències CGA i AGAT, has de crear una matriu de 4 x 5 amb aquest valors inicials (el símbol - indica un string buit "")

- A G A T
- 0 1 2 3 4
C 1 ?
G 2
A 2

TODO

Google Docs - Alineament de seqüències