Biologia Molecolare Computazionale
Biologia Molecolare Computazionale
Biologia Molecolare Computazionale
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
<strong>Biologia</strong> <strong>Molecolare</strong> <strong>Computazionale</strong><br />
Paolo Provero - paolo.provero@unito.it<br />
2008-2009
Argomenti<br />
◮ Allineamento di sequenze<br />
◮ Ricostruzione di alberi filogenetici<br />
◮ Gene prediction
Allineamento<br />
Allineamento di sequenze<br />
1. Scoring<br />
2. Algoritmi esatti (programmazione dinamica)<br />
3. Algoritmi euristici (BLAST)<br />
4. Allineamento multiplo
Allineamento di sequenze<br />
Problema<br />
Date due sequenze (nucleotidiche, aminoacidiche o altro)<br />
determinare se sono sufficientemente simili da farci ritenere<br />
che siano derivate da un progenitore comune attraverso<br />
processi di mutazione.
Allineamento<br />
Un esempio di allineamento delle sequenze<br />
CGGGTATCCAA e CCCTAGGTCCCA è<br />
C G G G T A - - T C C A A<br />
C C C - T A G G T C C C A<br />
◮ Il simbolo “-” (indel) rappresenta un’inserzione o una<br />
delezione avvenuta durante la storia evolutiva che ha<br />
portato alle due sequenze<br />
◮ Una sequenza di L indel consecutivi si dice gap di<br />
lunghezza L: questo allineamento ha un gap di lunghezza<br />
1 e uno di lunghezza 2
Tipi di allineamento<br />
◮ Globale: si allineano le sequenze intere<br />
◮ Locale: si allineano sottosequenze delle sequenze di<br />
partenza<br />
◮ Gapped: sono permessi indels<br />
◮ Ungapped: non sono permessi indel<br />
◮ Pairwise: di due sequenze<br />
◮ Multiple: di più di 2 sequenze
Score di un allineamento<br />
◮ Due possibili allineamenti di CTGTA e CGTA<br />
C T G T A<br />
1.<br />
C - G T A<br />
2.<br />
C T G T A -<br />
- C - G T A<br />
◮ Il primo è migliore in quanto richiede un numero minore di<br />
cambiamenti (sostituzioni e inserzioni/delezioni)<br />
◮ E’ necessario definire uno score per confrontare<br />
quantitativamente gli allineamenti
Scoring per allineamenti di sequenze nucleotidiche<br />
◮ Per il momento adottiamo uno score semplice:<br />
◮ Ogni match conta +1<br />
◮ Ogni mismatch conta -1<br />
◮ Ogni indel conta -2<br />
◮ Esempio 1:<br />
C T G T A<br />
C - G T A<br />
+1 -2 +1 +1 +1 +2<br />
◮ Esempio 2:<br />
C T G T A -<br />
- C - G T A<br />
-2 -1 -2 -1 -1 -2 -9
Algoritmi di allineamento<br />
◮ Gli algoritmi di allineamento risolvono il seguente<br />
problema: dato un sistema di scoring e due sequenze,<br />
trovare l’allineamento (gli allineamenti) con lo score più<br />
alto tra tutti quelli possibili<br />
◮ Gli algoritmi esatti individuano certamente il migliore<br />
allineamento, ma richiedono molte risorse di calcolo<br />
1. Needleman-Wunsch: global gapped alignments<br />
2. Smith-Waterman: local gapped alignments<br />
◮ Gli algoritmi euristici non garantiscono che l’allineamento<br />
trovato sia il migliore possibile, ma sono molto più veloci<br />
1. BLAST (gapped or ungapped local alignments)
Perché abbiamo bisogno di algoritmi<br />
◮ In linea di principio sarebbe possibile trovare l’allineamento<br />
ottimale di due sequenze semplicemente:<br />
1. Scrivere tutti gli allineamenti possibili<br />
2. Calcolare il relativo score<br />
3. Scegliere il migliore<br />
◮ Tuttavia questo è possibile soltanto per sequenze molto<br />
corte, in quanto il numero di allineamenti possibili cresce<br />
molto rapidamente al crescere della lunghezza della<br />
sequenza
Perchè abbiamo bisogno di algoritmi<br />
◮ Supponiamo di avere due sequenze di n = 1000 residui<br />
◮ Il numero di allineamenti possibili è<br />
( 2n<br />
N =<br />
n<br />
)<br />
∼ 22n<br />
√ πn<br />
= 22000<br />
√<br />
1000π<br />
∼ 2 · 10 600
Programmazione dinamica<br />
◮ Gli algoritmi di programmazione dinamica suddividono il<br />
problema iniziale (trovare l’allineamento ottimale di due<br />
sequenze) in sottoproblemi più semplici e costruiscono<br />
progressivamente la soluzione del problema globale<br />
usando le soluzioni dei sottoproblemi<br />
◮ L’algoritmo di Needleman-Wunsch calcola lo score<br />
dell’allineamento ottimale di due sequenze in base agli<br />
score degli allineamenti ottimali delle loro sottosequenze,<br />
progressivamente più lunghe
Algoritmo di Needleman-Wunsch<br />
◮ Sequenze:<br />
x = X 1 X 2 . . . X m<br />
y = Y 1 Y 2 . . . Y n<br />
◮ L’algoritmo costruisce la matrice B tale che B ij è lo score<br />
dell’allineamento ottimale tra le prime i lettere di x e le<br />
prime j lettere di y<br />
◮ I valori di B ij vengono calcolati progressivamente fino a<br />
ottenere B mn , che è lo score dell’allineamento ottimale tra<br />
x e y
Algoritmo di Needleman-Wunsch<br />
◮ L’algoritmo di Needleman-Wunsch si basa sul fatto<br />
seguente:<br />
se si conoscono B i−1,j , B i,j−1 e B i−1,j−1 è possibile<br />
calcolare B ij<br />
◮ Una volta ottenuto lo score dell’allineamento ottimale il<br />
traceback consente di ottenere l’allineamento o gli<br />
allineamenti corrispondenti
Esercizio<br />
Trovare un allineamento globale ottimale tra le sequenze<br />
CATT<br />
GAATCT<br />
Soluzione: score -2<br />
Allineamento (non l’unico):<br />
C - A T - T<br />
G A A T C T<br />
-1 -2 +1 +1 -2 +1 -2
Algoritmo di Smith-Waterman<br />
◮ L’algoritmo di Smith-Waterman trova l’allineamento locale<br />
ottimale tra due sequenze, ovvero l’allineamento di score<br />
più alto tra tutti quelli possibili tra una qualsiasi<br />
sottosequenza di x e una qualsiasi sottosequenza di y<br />
◮ L’algoritmo procede in modo simile a Needleman-Wunsch<br />
eccetto che:<br />
1. Ogni volta che B ij è negativo, si scrive 0<br />
2. Il traceback non parte da B mn ma dallo score più alto<br />
trovato sulla tabella
Esercizio<br />
Trovare un allineamento locale ottimale tra le sequenze<br />
CATT<br />
GAATCT<br />
Soluzione: score 2<br />
Allineamento:<br />
A T<br />
A T<br />
+1 +1 +2
Gap penalties<br />
◮ Il tipo di gap penalty che abbiamo usato si chiama lineare:<br />
la penalty (score negativo) associata a un gap è<br />
proporzionale alla lunghezza del gap:<br />
δ(L) = −d · L<br />
◮ Un altro tipo di gap penalty usato spesso si chiama affine:<br />
δ(L) = −d − (L − 1) · e<br />
con e < d. In questo modo aprire un nuovo gap è più<br />
penalizzato che allungarne uno esistente
Gap penalty affine: esempio<br />
◮ Esempio: d = 2, e = 1<br />
A C C C T<br />
A - - C T<br />
+1 -3 +1 +1 0<br />
A C C C T<br />
A - C - T<br />
+1 -2 +1 -2 +1 -1
Allineamento di sequenze aminoacidiche<br />
◮ Nel caso di allineamento di sequenze di aminoacidi, un<br />
sistema di scoring come quello usato per le sequenze<br />
nucleotidiche non è adeguato, in quanto alcune sostituzioni<br />
sono più probabili di altre<br />
◮ Quindi i mismatch avranno score diversi a seconda degli<br />
aminoacidi coinvolti (matrici di sostituzione)<br />
◮ Gli algoritmi di allineamento funzionano nello stesso modo,<br />
eccetto che lo score per un match/mismatch varia a<br />
seconda degli aminoacidi coinvolti<br />
◮ Le matrici di sostituzione più usate sono BLOSUM e PAM
Esercizio<br />
Usare le matrici di sostituzione BLOSUM62 e una linear gap<br />
penalty uguale a -5 per trovare un allineamento ottimale<br />
globale tra le sequenze<br />
HAG<br />
HEAE<br />
Soluzione: score 5<br />
Allineamento:<br />
H - A G<br />
H E A E<br />
8 -5 4 -2 5
BLAST<br />
Algoritmo euristico per allineare<br />
◮ Query sequence vs target sequence<br />
◮ Query sequence vs sequence database<br />
Versione originale: ungapped alignments.<br />
BLAST2: gapped alignments.
BLAST steps (simplified)<br />
1. Generare una lista di tutte le parole di k (p.es. k = 3 per<br />
proteine) lettere nella query<br />
PQGEFG → (PQG, QGE, GEF, EFG)<br />
2. Per ognuna di queste generare una lista di tutte le possibili<br />
parole di 3 lettere che allineate danno un punteggio<br />
maggiore di una soglia T (p.es. T = 13 con BLOSUM62)<br />
PQG → PQG (18) PEG (15) . . .<br />
3. Cercare nella sequenza target queste parole ed allinearle<br />
alla parola della query<br />
4. Estendere in modo massimale gli allineamenti nelle due<br />
direzioni (ottenendo gli High Scoring Pairs)<br />
5. Se possibile unire gli HSP per ottenere allineamenti più<br />
lunghi.
BLAST
Grafi<br />
◮ Un grafo è un insieme di nodi e di archi<br />
◮ Ogni arco unisce due nodi<br />
◮ Un cammino tra il nodo n e il nodo m è una successione di<br />
archi consecutivi che porta da n a m<br />
◮ Un circuito è un cammino tra un nodo e se stesso<br />
◮ Un grafo è connesso se per ogni coppia di nodi (n, m)<br />
esiste un cammino tra n e m
Alberi<br />
◮ Un grafo connesso e privo di circuiti si dice albero<br />
◮ Dati due nodi di un albero, esiste uno e un solo cammino<br />
che li unisce<br />
◮ Un albero si dice binario senza radice se ogni nodo è<br />
connesso a uno o tre archi<br />
◮ Un albero si dice binario con radice se ogni nodo è<br />
connesso a uno o tre archi, tranne un unico nodo, la<br />
radice, che è connesso a due archi<br />
◮ I nodi connessi a un solo arco si dicono foglie
Ricostruzione di alberi filogenetici<br />
◮ Problema: dato un insieme di specie attualmente esistenti<br />
ricostruire l’albero filogenetico che riproduce il percorso<br />
evolutivo attraverso il quale esse sono derivate da un<br />
antenato comune<br />
◮ L’albero filogenetico è rappresentato da un albero binario,<br />
con o senza radice<br />
◮ La lunghezza degli archi è proporzionale al tempo<br />
trascorso tra gli eventi di speciazione<br />
◮ Le specie esistenti sono rappresentate dalle foglie<br />
◮ La radice, se specificata, rappresenta l’antenato comune<br />
◮ Se l’albero filogenetico è senza radice, non è specificata la<br />
direzione del tempo evolutivo tra nodi interni
Ricostruzione di alberi filogenetici<br />
◮ Distance methods<br />
◮ Parsimony methods<br />
◮ Statistical methods
Distanze<br />
◮ Una distanza è una regola per associare a ogni coppia<br />
(x, y) di punti di un insieme S un numero d(x, y) ≥ 0 tale<br />
che<br />
1. d(x, y) = 0 se e solo se x = y<br />
2. d(x, y) = d(y, x)<br />
3. d(x, y) + d(y, z) ≥ d(x, z)<br />
◮ Per esempio la distanza geometrica tra punti di un piano<br />
soddisfa questi assiomi
Distanza evolutiva<br />
◮ La distanza evolutiva tra due specie esistenti si può<br />
definire come il doppio del tempo trascorso dal loro<br />
antenato comune più recente<br />
◮ E’ facile convincersi che questa definizione soddisfa gli<br />
assiomi che definiscono una distanza<br />
◮ Se si considera un albero filogenetico con radice, la<br />
distanza evolutiva tra le specie x e y è proporzionale alla<br />
lunghezza del cammino tra x e y
Distanza ultrametrica<br />
◮ La distanza evolutiva ha la seguente proprietà:<br />
dati tre punti x, y, z e le tre distanze tra di essi, due di<br />
queste sono uguali tra loro e maggiori della terza<br />
◮ Una distanza che soddisfi queste proprietà si dice<br />
ultrametrica
Metodi basati sulle distanze<br />
◮ Vedremo due metodi basati sulle distanze:<br />
1. UPGMA: ricostruisce alberi filogenetici con radice<br />
2. Neighbor joining: ricostruisce alberi filogenetici senza<br />
radice<br />
◮ L’algoritmo UPGMA (Unweighted Pair Group Method using<br />
Arithmetic averages) permette di risolvere il problema<br />
seguente:<br />
dato un insieme di specie esistenti e le loro distanze<br />
evolutive, ricostruire l’albero filogenetico con radice che ne<br />
rappresenta l’evoluzione da un antenato comune
UPGMA<br />
1. Individuare le due specie più vicine tra le N esistenti<br />
2. Definire un nuovo nodo come loro antenato comune,<br />
ponendolo all’altezza uguale a metà della distanza tra i<br />
due nodi<br />
3. Eliminare le due specie dalla lista e sostituirle con<br />
l’antenato comune<br />
4. Ripetere con la nuova lista di N − 1 specie<br />
5. Ripetere fino a che la lista contiene una sola specie (la<br />
radice = antenato comune)<br />
6. Si può dimostrare che il metodo riproduce l’unico albero<br />
filogenetico con radice che riproduce le distanze evolutive
Distanza tra gruppi<br />
◮ Per calcolare la distanza tra nodi interni si usa la formula<br />
d(A, B) = 1<br />
n A n B<br />
∑<br />
x∈A;y∈B<br />
d(x, y)
Esempio<br />
◮ Le distanze evolutive tra 4 specie sono date nella tabella<br />
seguente (Mya)<br />
Human Chimp Bonobo Gorilla<br />
Human 0 12 12 14<br />
Chimp 12 0 4 14<br />
Bonobo 12 4 0 14<br />
Gorilla 14 14 14 0<br />
◮ Verificare la proprietà ultrametrica<br />
◮ Ricostruire l’albero filogenetico con radice usando UPGMA
UPGMA in pratica<br />
◮ In pratica le distanze evolutive in genere non sono note<br />
◮ Si usano allora distanze surrogate, chesi suppone siano<br />
approssimativamente proporzionali alle distanze evolutive<br />
◮ Le distanze surrogate in genere non sono ultrametriche<br />
◮ La conseguenza è che le distanze calcolate sull’albero<br />
così prodotto non sono uguali alle distanze in input
Esempio<br />
◮ Considerare la matrice di distanza tra 3 specie:<br />
A B C<br />
A 0 6 8<br />
B 6 0 4<br />
C 8 4 0<br />
◮ Mostrare che si tratta di una matrice di distanza<br />
◮ Mostrare che questa distanza non è ultrametrica<br />
◮ Costruire l’albero filogenetico con radice usando UPGMA e<br />
calcolare le distanze sull’albero<br />
◮ Mostrare che queste distanze sono ultrametriche e che<br />
non coincidono con quelle in input
Neighbors<br />
◮ Dato un albero filogenetico senza radice, due foglie si<br />
dicono neighbors se il cammino che le unisce passa per<br />
un solo nodo interno<br />
◮ Notare che non è necessariamente vero che il neighbor di<br />
una specie è la specie più vicina nel senso della distanza<br />
calcolata sull’albero
Tree-derived distances<br />
◮ Data una matrice di distanze il metodo del neighbor joining<br />
costruisce l’albero unrooted che riproduce le distanze date,<br />
se questo esiste<br />
◮ Una distanza per la quale esista tale albero si dice<br />
“tree-derived” o “additive”<br />
◮ Una distanza ultrametrica è tree-derived, ma l’opposto non<br />
è necessariamente vero
δ(x, y)<br />
◮ Supponiamo di avere una matrice di distanze d(x, y) tra<br />
specie<br />
◮ Definiamo la quantità<br />
δ(x, y) = (N − 4)d(x, y) − ∑<br />
(d(x, n) + d(y, n))<br />
n≠x,y<br />
◮ Se x e y sono tali che la δ(x, y) è minima, allora x e y<br />
sono neighbors
Neighbor joining<br />
◮ Calcolare la matrice delle δ<br />
◮ Unire la coppia di specie con il delta più piccolo attraverso<br />
un nodo interno r 1 con le distanze<br />
d(x, r 1 ) =<br />
d(x, n) − d(y, n) + d(x, y)<br />
2<br />
d(y, n) − d(x, n) + d(x, y)<br />
d(y, r 1 ) =<br />
2<br />
dove n è un’altra foglia qualsiasi<br />
◮ Sostituire x e y con r 1 . La distanza tra r 1 e le altre foglie è<br />
data da<br />
d(r 1 , n) =<br />
d(x, n) + d(y, n) − d(x, y)<br />
2<br />
◮ Ripetere fino a che non si ricostruisce l’intero albero
Esempio<br />
x<br />
y<br />
◮ Calcolare le distanze tra<br />
le foglie dell’albero<br />
rappresentato in figura<br />
1<br />
1<br />
1<br />
◮ Applicare l’algoritmo<br />
"neighbor joining" alle<br />
distanze calcolate e<br />
mostrare che l’albero<br />
ottenuto riproduce quello<br />
di partenza<br />
z<br />
5<br />
4<br />
w
Rooting<br />
◮ E’ possibile localizzare la radice di un albero ottenuto con<br />
neighbor-joining aggiungendo un outgroup (specie che si<br />
sa essere più distante dalle altre di quanto queste siano tra<br />
loro)<br />
◮ La radice dell’albero originario coincide con il punto da cui<br />
si diarma l’outgroup.
Esempio<br />
◮ Costruire l’albero unrooted di 3 specie dalle seguenti<br />
distanze:<br />
A B C<br />
A 0 3 4<br />
B 3 0 5<br />
C 4 5 0<br />
◮ Localizzare la radice usando l’outgroup D, con distanze<br />
d(D, A) = 12 d(D, B) = 11 d(D, C) = 14
Maximum Parsimony<br />
◮ Trovare l’albero che spiega la discendenza delle specie<br />
esistenti da un antenato comune con il minimo numero di<br />
mutazioni.<br />
◮ Per semplicità ci limiteremo a considerare sostituzioni<br />
◮ Esempio: le specie esistenti sono rappresentate dalle<br />
seguenti sequenze:<br />
AAG<br />
AAA<br />
GGA<br />
AGA
Costo di un albero<br />
1<br />
0<br />
AAA<br />
0<br />
AAA<br />
1<br />
1<br />
Cost = 3<br />
AGA<br />
0<br />
1<br />
0<br />
AAA<br />
1<br />
AAA<br />
0<br />
0<br />
Cost = 4<br />
AAA<br />
2<br />
AAG AAA GGA AGA<br />
AAG AGA AAA GGA<br />
◮ Elencare i possibili alberi<br />
◮ Calcolare il costo per ogni albero<br />
◮ Scegliere l’albero di costo minore
Alberi possibili<br />
Gli alberi si distinguono per<br />
◮ Topologia<br />
◮ Assegnazione delle specie esistenti alle foglie<br />
◮ Assegnazione di sequenze ai nodi intermedi
Topologie per 4 specie
Numero di alberi<br />
◮ Il numero di assegnazioni (sommato su tutte le topologie) è<br />
◮ Esempio: per N = 4<br />
(2N − 3)!<br />
2 N−2 (N − 2)!<br />
(2N − 3)!<br />
2 N−2 (N − 2)! = 5!<br />
4 · 2! = 15<br />
◮ Questo numero diventa rapidamente molto grande: per<br />
N = 10:<br />
17!<br />
2 8 8! = 34.459.425<br />
◮ Con metodi euristici si può usare parsimony anche per<br />
centinaia di specie
Allineamenti multipli: SP scores<br />
Il modo più comune di assegnare uno score a un allineamento<br />
multiplo è un Sum of Pairs (SP) score:<br />
◮ Lo score totale è la somma degli score delle singole<br />
colonne:<br />
S = ∑ S i<br />
i<br />
◮ Lo score di una colonna è la somma degli score di tutte le<br />
coppie di simboli (usando una matrice di sostituzione<br />
appropriata)<br />
S i = ∑ s(mi k , mi l )<br />
k
Esempio<br />
match = 1, mismatch = -1, d = -2<br />
A A C G<br />
A A C T<br />
A - C T<br />
A G C T<br />
+6 -7 +6 0 =5
SP scores: problema<br />
A A C T G G<br />
A A C T G G<br />
A A C A G G<br />
A A C T G G<br />
A A C T G G<br />
+10 +10 +10 +2 +10 +10 =52<br />
◮ Per N sequenze una colonna di T vale N(N−1)<br />
2<br />
◮ Un singolo mismatch costa N − 1<br />
◮ Costo relativo di un singolo mismatch: 2/N: decresce<br />
all’aumentare di N<br />
Over-counting of evolutionary events
Algoritmi per l’allineamento multiplo<br />
◮ Esistono algoritmi di programmazione dinamica per<br />
l’allineamento multiplo, ma sono utilizzabili solo per N<br />
piccolo<br />
◮ Tra gli algoritmi euristici i più comuni sono gli algoritmi di<br />
allineamento progressivo:<br />
◮ Allineare due sequenze<br />
◮ Allineare una terza sequenza all’allineamento ottenuto<br />
◮ Continuare ad aggiungere una sequenza alla volta<br />
all’allineamento
Algoritmo di Feng-Doolitle<br />
1. Trovare tutti gli N(N − 1)/2 pairwise alignments delle N<br />
sequenze<br />
2. Costruire un albero “filogenetico” usando come distanza<br />
una funzione dello score dei pairwise alignments<br />
3. Allineare le due sequenze “evolutivamente” più vicine<br />
4. Allineare gli altri nodi dell’albero nell’ordine i cui sono stati<br />
aggiunti all’albero<br />
Per allineare due insiemi di sequenze, calcolare tutti i pairwise<br />
alignments e usare il migliore
Esempio<br />
Usando lo scoring:<br />
match = 1; mismatch = -1; gap=-2<br />
allineare AAG, ATG, AA :<br />
A A G<br />
A T G<br />
A A -<br />
+3 -1 -3 =-1
Applicazione: Positional Weight Matrices<br />
◮ Siti di legame di TF:<br />
◮ Brevi sequenze di DNA (∼ 6 − 15 bps)<br />
◮ Non completamente conservate<br />
◮ Una descrizione possibile è la sequenza consensus,<br />
ricavabile da un allineamento multiplo di siti di legame noti:<br />
IUPAC codes:<br />
◮ Y = pyrimidine (C or T)<br />
◮ W = T or A<br />
A C C G G T<br />
A C T G G T<br />
- C T G G A<br />
A C C G G T<br />
A C Y G G W
Positional Weight Matrices<br />
Una descrizione più accurata è data dalla PWM:<br />
A C C G G T<br />
A C T G G T<br />
- C T G G A<br />
A C C G G T<br />
A C Y G G W<br />
n A C G T<br />
1 3 0 0 0<br />
2 0 4 0 0<br />
3 0 2 0 2<br />
4 0 0 4 0<br />
5 0 0 4 0<br />
6 1 0 0 3
Ricerca di TFBS con PWM<br />
Le PWM possono essere usate per identificare potenziali<br />
binding sites di TFs:<br />
◮ Considerare le sequenze regolatrici dei geni di interesse<br />
(promotore, primi introni, ...)<br />
◮ Fare “scorrere” la PWM sulla sequenza calcolando uno<br />
score a ogni posizione<br />
◮ Lo score esprime la somiglianza tra la sequenza e la<br />
matrice
Log-likelihood ratio<br />
Un sistema di scoring usato in pratica è il seguente: data una<br />
PWM M e una sequnenza S:<br />
dove<br />
S = log 2<br />
P(S|M)<br />
P(S|B)<br />
◮ P(S|M) è la probabilità di generare S a partire da M<br />
◮ P(S|B) è la probabilità di generare S a partire dalle<br />
(appropriate) frequenze nucleotidiche di background
Esempio<br />
S = ACTGGA<br />
n A C G T<br />
1 3 0 0 0<br />
2 0 4 0 0<br />
3 0 2 0 2<br />
4 0 0 4 0<br />
5 0 0 4 0<br />
6 1 0 0 3<br />
P(S|M) = 1 · 1 · 1<br />
2 · 1 · 1 · 1<br />
4 = 1 8<br />
( ) 6 1<br />
P(S|B) = = 2 −12 = 4096<br />
4<br />
P(S|M)<br />
P(S|B) = 2−3 + 2 12 = 2 9<br />
score = 9<br />
(N.B. per evitare problemi con log(0)<br />
si aggiungono “pseudocounts” per le<br />
basi che non compaiono mai in<br />
ciascuna posizione)
Ricerca di TFBS<br />
◮ Ogni volta che la sequenza supera un certo score minimo<br />
deciso a priori, la si identifica come un candidato TFBS<br />
◮ Problema: in genere si trovano troppi candidati:<br />
◮ PWM di lunghezza 6<br />
◮ Accettiamo solo il massimo score possibile (1 sola<br />
sequenza)<br />
◮ Su sequenze casuali, otteniamo un candidato ogni<br />
4 6 = 4, 000 basi<br />
◮ Sul genoma umano, ci aspettiamo<br />
3 · 10 9<br />
∼ 7.5 · 105<br />
4 · 103 candidati semplicemente per caso
Soluzioni<br />
1. Spesso i TFBS funzionali sono ripetuti nella regione<br />
regolatrice ⇒ Selezionare soltanto le regioni regolatrici<br />
in cui il numero di candidati è significativamente più<br />
alto di quanto ci si aspetta per caso<br />
2. Spesso i TFBS funzionali sono evolutivamente conservati<br />
⇒ Selezionare soltanto i candidati TFBS che si<br />
ritrovano in altre specie