UNIVERSIT`A CA` FOSCARI DI VENEZIA Tesi di

UNIVERSITÀ CA’ FOSCARI DI VENEZIA
Facoltà di Scienze Matematiche, Fisiche e Naturali
Corso di Laurea in Informatica
Tesi di Laurea Triennale
Laureando: Silvio Zennaro
Consensus Trees per alberi filogenetici:
teoria e implementazione
Relatore: Dott.ssa Marta Simeoni
Anno Accademico 2003-2004
Consensus trees per alberi filogenetici:
teoria e implementazione
Silvio Zennaro
Venezia, 4 marzo 2005
Indice
1 Introduzione
8
2 Principali Metodi di inferenza di alberi filogenetici
2.1 Alberi filogenetici . . . . . . . . . . . . . . . . . . . .
2.2 Classificazione dei Metodi . . . . . . . . . . . . . . .
2.3 Il metodo UPGMA . . . . . . . . . . . . . . . . . . .
2.4 Il metodo di Neighbor Joining . . . . . . . . . . . . .
2.5 Il metodo di Fitch Margoliash . . . . . . . . . . . . .
2.6 Il metodo di Minima Evoluzione . . . . . . . . . . . .
2.7 Il metodo di Massima Parsimonia . . . . . . . . . . .
2.7.1 Parsimonia di Fitch . . . . . . . . . . . . . . .
2.7.2 Parsimonia di Wagner . . . . . . . . . . . . .
2.7.3 Parsimonia di Dollo . . . . . . . . . . . . . . .
2.7.4 Parsimonia di Camin-Sokal . . . . . . . . . . .
2.8 Il metodo di Massima Verosimiglianza . . . . . . . .
2.8.1 Algoritmo di Felsenstein per la verosimiglianza
3 Consensus Trees
3.1 I consensus trees . . . .
3.2 Strict Consensus . . . .
3.3 Majority-rule Consensus
3.4 Greedy Consensus . . . .
3.5 Median Consensus . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
1
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
11
11
12
14
19
24
30
32
35
37
38
38
39
45
.
.
.
.
.
47
47
50
53
56
60
INDICE
3.6
3.7
3.8
3.9
3.10
3.11
2
Loose Consensus . . . . . . . . . . . . .
Nelson-Page Consensus . . . . . . . . . .
Adams Consensus . . . . . . . . . . . . .
Average Consensus . . . . . . . . . . . .
Riepilogo dei metodi . . . . . . . . . . .
Tecniche avanzate: subtrees e supertrees
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
4 WebConsensus
4.1 L’applicazione per il calcolo dei consensus trees . . . . . .
4.2 Struttura dell’applicazione . . . . . . . . . . . . . . . . . .
4.2.1 L’interfaccia WEB: PHP Consensus . . . . . . . . .
4.2.2 Il tool di visualizzazione grafica Phylondendron . .
4.2.3 Collegamento tra i componenti: Bridge PHP-JAVA
4.2.4 Struttura delle classi: JAVA Consensus . . . . . . .
4.2.5 Diagramma delle attività di JAVA Consensus . . .
4.3 Dettagli degli algoritmi . . . . . . . . . . . . . . . . . . . .
4.3.1 L’idea generale . . . . . . . . . . . . . . . . . . . .
4.3.2 Algoritmo per lo Strict Consensus . . . . . . . . . .
4.3.3 Algoritmo per il Majority-Rule Consensus . . . . .
4.3.4 Algoritmo per l’Adams Consensus . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
5 Conclusioni
A Codice PHP di WebConsensus
A.1 consensus.php . . . . . . . . .
A.2 consensusResult.php . . . . .
A.3 frameSup.php . . . . . . . . .
A.4 frameInf.php . . . . . . . . . .
.
.
.
.
.
.
61
63
64
69
72
74
.
.
.
.
.
.
.
.
.
.
.
.
76
76
77
79
82
84
87
92
94
94
98
104
107
111
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
119
. 119
. 127
. 127
. 128
B Codice Java di WebConsensus
130
B.1 Main.java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
B.2 Utility.java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
B.3 Package Consensus . . . . . . . . . . . . . . . . . . . . . . . . 137
INDICE
B.4
B.5
B.6
B.7
B.8
B.9
3
B.3.1 Consensus.java . . . . . . .
B.3.2 Strict.java . . . . . . . . . .
B.3.3 Majority.java . . . . . . . .
B.3.4 Adams.java . . . . . . . . .
Package Trees . . . . . . . . . . . .
B.4.1 Tree.java . . . . . . . . . . .
B.4.2 GenTree.java . . . . . . . .
B.4.3 TreeNode.java . . . . . . . .
B.4.4 TreeDepthIterator.java . . .
B.4.5 TreeWidthIterator.java . . .
Package Heap . . . . . . . . . . . .
B.5.1 Heap.java . . . . . . . . . .
B.5.2 BinaryHeapNode.java . . . .
B.5.3 HeapBT.java . . . . . . . .
B.5.4 MinHeapBT.java . . . . . .
Package PriorityQueues . . . . . .
B.6.1 PriorityQueue.java . . . . .
B.6.2 BTPriorityQueue.java . . .
Package MultiBST . . . . . . . . .
B.7.1 MultiBSTNode.java . . . . .
B.7.2 MultiBinarySearchTree.java
B.7.3 MultiBSTLevelOrder.java .
B.7.4 MBSTInorderIterator.java .
Package Lists . . . . . . . . . . . .
B.8.1 List.java . . . . . . . . . . .
B.8.2 DL ListEl.java . . . . . . .
B.8.3 DL List.java . . . . . . . . .
B.8.4 Iterator.java . . . . . . . . .
B.8.5 DL ListIterator.java . . . .
Package Queues . . . . . . . . . . .
B.9.1 Queues.java . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
137
138
141
142
145
145
146
159
159
160
162
162
162
168
172
177
177
177
179
179
184
191
199
201
201
202
204
209
210
211
211
INDICE
B.9.2 QueueRecord.java . .
B.9.3 QueueCollegata.java
B.10 Package Stacks . . . . . . .
B.10.1 Stack.java . . . . . .
B.10.2 StackRecord.java . .
B.10.3 StackCollegato.java .
4
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
211
212
214
214
214
215
Elenco delle figure
2.1
2.2
2.3
2.4
2.5
2.6
2.7
2.8
Classificazione dei principali metodi. . . . . . . . . . . . . .
Esempio di applicazione del metodo UPGMA. . . . . . . . .
Test di additività. . . . . . . . . . . . . . . . . . . . . . . . .
Esempio di applicazione del metodo Neighbour-joining. . . .
Albero di riferimento del metodo Fitch-Margoliash. . . . . .
Esempio di applicazione di Fitch Margoliash. . . . . . . . . .
Esempio di applicazione della Massima Parsimonia. . . . . .
Etichettamento di un albero per la Massima Verosimiglianza.
3.1
3.2
3.3
3.4
3.5
3.6
3.7
3.8
3.9
3.10
Relazioni tra i principali metodi del consensus. .
Semplice esempio dello strict consensus. . . . . .
Un’applicazione dello strict consensus. . . . . .
Semplice esempio del Majority-rule consensus. .
Applicazione del Majority-rule consensus. . . . .
Calcolo del greedy consensus tree. . . . . . . . .
Applicazione del loose consensus. . . . . . . . .
Applicazione intuitiva del metodo di Adams. . .
Esempio di applicazione del metodo di Adams. .
Calcolo dell’average consensus tree su due alberi
4.1
4.2
Struttura dei componenti di WebConsensus. . . . . . . . . . . 78
Struttura delle comunicazioni tra i componenti di WebConsensus. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
5
.
.
.
.
.
.
.
.
12
17
19
22
25
28
34
42
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
senza radice.
49
51
52
54
55
58
62
66
68
71
ELENCO DELLE FIGURE
4.3
4.4
4.5
4.6
4.7
4.8
4.9
Pagina principale di WebConsensus. . . . . . . . . . . . . . .
Pagina principale di Phylodendron. . . . . . . . . . . . . . .
Struttura del package Consensus. . . . . . . . . . . . . . . .
Struttura completa dei package. . . . . . . . . . . . . . . . .
Diagramma delle attività delle classi JAVA. . . . . . . . . .
Gli alberi fondamentali dai quali calcolare lo strict consensus
tree. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Gli insiemi dei valori degli alberi prima e dopo i confronti. .
6
.
.
.
.
.
81
83
88
90
93
. 101
. 102
Elenco delle tabelle
2.1
Distanze genetiche tra le sequenze di ⌘-globine . . . . . . . . 31
3.1
3.2
Distanze di due alberi e la loro media. . . . . . . . . . . . . . 71
Breve riepilogo dei metodi trattati. . . . . . . . . . . . . . . . 73
7
Capitolo 1
Introduzione
La Bioinformatica è la disciplina che da sempre ha cercato di beneficiare
dell’utilizzo dei mezzi informatici per risolvere le problematiche proprie della
Biologia.
Questioni quali la necessità di archiviazione delle sequenze aminoacidiche o
nucleotidiche di un notevole numero di specie in banche dati e di mantenerle
costantemente aggiornate, o anche problematiche come il calcolo delle similitudini e delle diversità tra sequenze, non sarebbero state a↵rontabili in tempi
accettabili senza l’ausilio di un elaboratore.
Quest’ultimo problema di analisi delle somiglianze e delle di↵erenze tra le
varie sequenze viene identificato con il nome di Analisi Filogenetica, ovvero
la determinazione delle relazioni occorse nel tempo tra le diverse specie.
Gli alberi filogenetici, risultato di tale analisi per un insieme di specie, hanno anch’essi trovato un valido supporto nell’informatica. Ad oggi infatti essi
vengono costruiti automaticamente, dato in input un insieme di dati iniziali,
utilizzando diversi algoritmi di calcolo.
In questa tesi si focalizza l’attenzione sulla classificazione dei metodi di inferenza di alberi filogenetici fornendo una panoramica sui principali metodi di
calcolo.
Verranno cioè distinti i metodi in base a come vengono ricostruiti gli alberi
filogenetici o in base al formato dei dati iniziali da cui comincia la loro ela8
CAPITOLO 1. INTRODUZIONE
9
borazione. In particolare si descriveranno tecniche che stimano una soluzione
in base ad una particolare relazione matematica o che accoppiano ad ogni
passo le specie più vicine o ancora metodi che elaborano matrici contenenti le
distanze tra le specie o che elaborano direttamente le sequenze aminoacidiche
o nucleotidiche.
Capita però talvolta che, a seconda dell’insieme su cui viene calcolato l’albero filogenetico e in base al metodo utilizzato, il risultato possa essere non
univoco, ovvero che un insieme di risultati sia equamente candidato ad essere
la migliore rappresentazione del dato insieme.
Tale situazione si adatta al calcolo dei consensus tree, ovvero la ricostruzione di un albero attraverso l’elaborazione delle informazioni contenute in un
insieme di alberi concorrenti dando vita a quella che può essere definita una
loro generalizzazione.
I consensus trees possono quindi dare informazioni sulle distanze tra più alberi, indicando le loro somiglianze e di↵erenze.
La descrizione dei principali metodi per il calcolo di tali alberi generalizzati
viene riportato nei prossimi capitoli, rappresentando le relazioni e le principali di↵erenze tra di essi.
È stata inoltre implementata WebConsensus, un’applicazione per il calcolo di
consensus trees, utilizzabile come web service da chiunque in modo gratuito
attraverso un semplice browser web. Tale applicazione consente l’inserimento
di un numero arbitrario di alberi da cui calcolare il risultato, utilizzando tecniche di consensus quali Strict, Majority Rule e Adams Consensus Methods.
L’applicazione è stata scritta interamente in linguaggio JAVA attraverso la
sincronizzazione di diverse classi ed è stata interfacciata con delle pagine web
dinamiche create attraverso degli script PHP, per consentire il loro utilizzo
in internet.
Oltre a fornire un risultato testuale, l’applicazione permette anche di ottenere una rappresentazione grafica dell’albero risultante utilizzando il tool di
visualizzazione di alberi filogenetici Phylodendron creato da D.G.Gilbert [20].
CAPITOLO 1. INTRODUZIONE
10
Il lavoro di tesi qui presentato si sviluppa nel seguente modo: nel capitolo 2
vengono descritti i principali metodi per inferire alberi filogenetici raggruppati secondo una naturale classificazione, anch’essa descritta nel capitolo, e
riportando per ognuno di essi alcuni esempi di diverse applicazioni e gli algoritmi che vengono utilizzati per il loro funzionamento.
Nel capitolo 3 vengono descritte le più importanti e conosciute tecniche di
ricostruzione dei consensus trees a partire da un insieme di alberi fondamentali.
Nel capitolo 4 è si riporta una dettagliata descrizione dell’applicazione WebConsensus, che comprende non solo informazioni quali la struttura dei componenti o la loro comunicazione bensı̀ scendendo nei dettagli degli algoritmi
di Strict, Majority-Rule e Adams metodi, valutandone anche la complessità
d’esecuzione.
Infine, nel capitolo 5, si presentano le conclusioni del lavoro e alcune idee per
futuri sviluppi dell’applicazione WebConsensus.
Capitolo 2
Principali Metodi di inferenza
di alberi filogenetici
2.1
Alberi filogenetici
Le variazioni molecolari, che sono il presupposto fondamentale per l’evoluzione biologica, hanno nel tempo avuto origine in seguito ad errori nella
replicazione del DNA oppure in base a mutazioni accidentali dovute a fattori
esterni quali quelli climatici o territoriali [1].
Tali mutazioni hanno dato vita ad un processo di diversificazione evolutiva
delle specie viventi.
Scopo della bioinformatica è anche quello di cercare di ricostruire le relazioni
evolutive tra le varie specie, lavorando direttamente sulle sequenze del DNA,
cercando di relazionare diverse specie viventi.
Gli alberi filogenetici sono alberi che illustrano le relazioni evolutive occorse
tra un insieme di organismi e indicando quali sono i progenitori comuni.
Ogni albero è composto da nodi che vengono collegati attraverso rami, i quali
impongono una relazione tra quelli che esso congiunge.
Gli alberi filogenetici completamente risolti hanno al più grado tre, ovvero
da esso partono al massimo tre rami. Tali possibilità sono: un ramo verso il
padre e gli altri due verso i figli.
11
CAPITOLO 2. PRINCIPALI METODI DI INFERENZA DI ALBERI FILOGENETICI12
Basati sui dati iniziali
Distanze
Sequenze
Clustering
Ottimizzazione
Basati sulla costruzione dell’albero
UPGMA
Neighbor-joining
Fitch Margoliash
Massima
Parsimonia
Minima Evoluzione
Massima
Verosimiglianza
Figura 2.1: Classificazione dei principali metodi.
Distanze
Nel caso in cui da un nodo escano più di tre rami, allora si dice che quel nodo
contiene una politomia, ovvero più di due figli e l’albero si dice non essere
completamente risolto [1].
Si esporranno qui di seguito i principali metodi per inferire alberi filogenetici.
2.2
Classificazione dei Metodi
Una delle questioni più comuni che ci si pone parlando di metodi per la costruzione di alberi filogenetici è la scelta di quale approccio utilizzare per
inferirli. La costante crescita del numero di metodi e delle loro varianti non
fa altro che ra↵orzare l’interrogativo di come a↵rontare tale sovrabbondanza
di possibilità [11].
La soluzione solitamente più comune per a↵rontare questo problema consiste
nella classificazione dei metodi sulla base del tipo di metodologia utilizzata
e sulla base della natura dei dati analizzati [1].
Parlando dapprima di quest’ultima di↵erenziazione, la divisione è basata su
come vengono trattati i dati sui quali costruire gli alberi filogenetici e solita-
CAPITOLO 2. PRINCIPALI METODI DI INFERENZA DI ALBERI FILOGENETICI13
mente vengono distinte due categorie: metodi basati sulle distanze e metodi
basati sulle sequenze.
I metodi basati sulle distanze procedono convertendo un multiallineamento
di sequenze in una matrice delle distanze, ovvero una matrice i cui valori
rappresentano le diversità tra le sequenze. Tale matrice diventa parametro
d’ingresso per l’algoritmo di costruzione dell’albero in questione [11].
I metodi basati sulle sequenze invece considerano ad ogni passo durante l’analisi direttamente ogni sito delle sequenze (ogni carattere dell’alfabeto nucleotidico o aminoacidico di cui la sequenza è composta) o qualche funzione
su di essi calcolata come, ad esempio, la probabilità della presenza di un
carattere piuttosto che un altro. In questo modo è possibile valutare direttamente l’attendibilità di ogni posizione in base ad un confronto diretto con i
caratteri nello stesso sito ma all’interno delle altre sequenze allineate [3].
La seconda classificazione dei metodi, ovvero per tipo di metodologia utilizzata, è intesa invece come una diversificazione su come l’albero filogenetico
viene e↵ettivamente costruito. Le usuali distinte tipologie di questa categoria
sono il metodo di clustering ed il criterio di ottimizzazione.
Il metodo di clustering procede accoppiando ad ogni passo due diverse unità
tassonomiche ed in particolare quelle la cui distanza genetica risulta minore.
Tali unità verranno quindi trattate come una singola identità (un cluster),
permettendo di continuare il procedimento non riferendosi più alle due specie, bensı̀ al cluster appena creato.
Il criterio di ottimizzazione invece si basa sul concetto di punteggio di un albero (definito nello specifico costo o lunghezza). In pratica, date le sequenze
da analizzare o una matrice che informa sulle distanze tra le sequenze, tali
metodi restituiscono l’albero con punteggio minore (e quindi costo e lunghezza minore), scelto tra tutti i possibili alberi.
Le relazioni tra i vari criteri di di↵erenziazione dei metodi appena descritti,
con associati i principali metodi che vengono descritti in questo capitolo, sono riportate in figura 2.1.
In particolare verranno trattati tre metodi basati sul clustering ed i cui alberi
CAPITOLO 2. PRINCIPALI METODI DI INFERENZA DI ALBERI FILOGENETICI14
vengono costruiti a partire da una matrice delle distanze. Tali metodi sono:
UPGMA, Neighbor-Joining e Fitch-Margoliash.
Verranno poi descritti i due principali metodi di ottimizzazione i cui dati
iniziali consistono di un multiallineamento di sequenze e cioè i metodi di
Massima Parsimonia e di Massima Verosimiglianza.
Viene poi riportato per completezza anche il metodo di Minima Evoluzione,
come rappresentante della categoria di metodi di ottimizzazione in cui la costruzione degli alberi filogenetici avviene attraverso il calcolo della matrice
delle distanze.
Si noti come usualmente in letteratura non vengono elencati metodi basati
sul clustering e che analizzano direttamente le sequenze fornite.
2.3
Il metodo UPGMA
Tra i metodi basati sul clustering il più semplice è quello noto come UPGMA
(Unweighted Pair Group with Arithmetic Means), che si basa sull’ipotesi di
validità dell’orologio molecolare, cioè che la velocità di evoluzione delle sequenze sia costante lungo tutti i rami degli alberi.
Proprio per questo motivo tale metodo viene definito ultrametrico, cioè impone che la lunghezza di tutti i rami discendenti da un nodo interno fino ai
nodi più esterni sia la stessa.
Il metodo lavora utilizzando un algoritmo iterativo che raggruppa due unità
tassonomiche o gruppi di unità ad ogni iterazione, partendo da quelle che
inizialmente appaiono come le più simili e proseguendo fino a determinare
una radice dell’albero.
Per determinare le similarità si utilizzano matrici di distanze che permettono
di individuare ad ogni passo quali sono le unità più simili. Tali unità infatti
corrisponderanno a quelle che all’interno della matrice avranno la distanza
minore.
Si supponga di voler calcolare l’albero filogenetico tra quattro unità: A, B,
CAPITOLO 2. PRINCIPALI METODI DI INFERENZA DI ALBERI FILOGENETICI15
C e D le cui distanze sono date dalla matrice:
A
B dAB
C dAC
D dAD
B
C
dBC
dBD
dCD
Come detto sopra ad ogni passo si raggruppa una coppia di elementi che
diventano cosı̀ un nuovo cluster e che verrà quindi trattato come una sola
unità all’iterazione successiva. Questa operazione necessita però di adattare
la matrice alla nuova situazione, considerando quindi le distanze tra un’unità
ed i due elementi appena uniti.
Si supponga che nella matrice precedente la distanza minore sia dBC . Questo
comporta allora una clusterizzazione delle due unità B e C che verranno
congiunte cosı̀ da un ramo il cui punto medio corrisponderà al nodo padre.
Come descritto sopra si necessita di ricalcolare la matrice delle distanze, non
considerando più le due unità B e C, bensı̀ il nuovo nodo clusterizzato BC:
BC
D
A
BC
d(A,BC)
dAD
d(BC,D)
dove le due nuove distanze sono date da:
d(A,BC) =
dAB + dAC
2
dBD + dCD
2
L’algoritmo prosegue nello stesso modo fino a trovare due soli elementi, la
cui unificazione determina la radice dell’albero.
d(BC,D) =
Algoritmo di clustering UPGMA
INIZIALIZZAZIONE
Assegna ad ogni sequenza i il suo cluster Ci . Poni ogni
CAPITOLO 2. PRINCIPALI METODI DI INFERENZA DI ALBERI FILOGENETICI16
sequenza come foglia dell’albero T e con altezza uguale a 0
ITERAZIONE
Determina la coppia di elementi i e j con dij minore.
Crea quindi un nuovo cluster k in cui Ck = Ci [ Cj e calcola
dkl per ogni l. Poni i e j figli di k e assegna a
quest’ultimo altezza dij /2. Nel cluster corrente sostituisci
i e j con k
TERMINAZIONE
Quando rimangono solamente due cluster i e j allora poni
la radice ad altezza dij /2
Nell’algoritmo appena riportato [4] si è indicato con Ci il cluster in posizione
i-esima e con dij la distanza tra i e j. Inoltre, ad ogni iterazione, la distanza
dkl viene calcolata secondo la seguente formula:
dkl =
dkl |Ci | + dkl |Cj |
|Ci | + |Cj |
Esempio 2.1. Consideriamo cinque sequenze A, B, C, D ed E, le cui distanze
iniziali sono:
A B C D
B 22
C 39 41
D 39 41 18
E 41 43 20 10
Come si può immediatamente derivare dalla matrice, le due unità D e E sono
quelle più vicine, pertanto le prime ad essere soggette alla clusterizzazione.
Vengono pertanto collegate ad un padre comune, ognuna con lunghezza del
ramo pari a tD = tE = dDE /2 = 10/2 = 5, come mostrato in figura 2.2 (a).
Ricalcolando ora la matrice considerando le due precedenti unità come un
CAPITOLO 2. PRINCIPALI METODI DI INFERENZA DI ALBERI FILOGENETICI17
Figura 2.2: Esempio di applicazione del metodo UPGMA.
CAPITOLO 2. PRINCIPALI METODI DI INFERENZA DI ALBERI FILOGENETICI18
singolo cluster, si ottiene:
B
C
DE
A B C
22
39 41
40 42 19
Nonostante sia appena stato creato, il cluster DE è ancora soggetto a clusterizzazione, poichè assieme all’unità C rappresenta la minor distanza della
nuova matrice.
Procedendo come prima, ma considerando che DE è un cluster, si pone un
nuovo ramo tra il nodo genitore del cluster e la singola unità C, come mostrato in figura 2.2 (b), e si calcolano la lunghezza del ramo tC = d(C,DE) /2 =
19/2 = 9, 5 e quella di tDE = d(C,DE) /2 dDE = 19/2 5 = 9, 5 5 = 4, 5.
Aggiornando nuovamente la precedente matrice, si ottiene:
B
CDE
A
22
39,5
B
41,5
Ora le due unità ad essere soggette al clustering sono A e B, che sono momentaneamente esterne al cluster precedente. Viene quindi formato un nuovo
cluster come mostrato in figura 2.2 (c), la cui lunghezza dei rami è pari a
tA = tB = dAB /2 = 22/2 = 11.
Si noti come rimangono ora solo due cluster. Il passo finale di questo metodo è proprio quello di unificare i due cluster rimanenti, ponendo infine una
radice, come illustrato in figura 2.2 (d).
Quello che infine manca è calcolare la lunghezza dei rami che collegano i due
cluster alla radice. Per fare questo si trova dapprima una media delle distanze
iniziali di dAC , dAD , dAE , dBC , dBD e dBE = 39 + 39 + 41 + 41 + 41 + 43 =
244/6 = 40, 7. La metà di questo valore, ovvero 40, 75/2 = 20, 35 è quindi la
distanza dalla radice alle foglie in uno dei due sottoalberi. Volendo trovare
la lunghezza di tAB e di tCDE si calcolano similmente tAB = 20, 35 tA =
20, 35 11 = 9, 35 e tCDE = 20, 35 tDE tD = 20, 35 4, 5 5 = 10, 85.
CAPITOLO 2. PRINCIPALI METODI DI INFERENZA DI ALBERI FILOGENETICI19
Figura 2.3: Test di additività.
2.4
Il metodo di Neighbor Joining
Nel descrivere la proprietà ultrametrica del metodo UPGMA, si è implicitamente assunto un’altra proprietà: l’additività. Essa si basa sul principio che,
dato un albero, la distanza tra una coppia di foglie deve essere uguale alla
somma delle lunghezze dei rami che ne formano il cammino [4].
Formalmente, dato un albero T in cui i, j e m sono tre sue foglie, allora
esiste il nodo k in cui si incontrano i cammini tra di esse, come mostrato
in figura 2.3. Per l’additività si ha che dim = dik + dkm , djm = djk + dkm e
dij = dik + dkj da cui ne segue che:
1
dkm = (dim + djm
2
dij )
La proprietà dell’additività può essere garantita anche se non è confermata
la veridicità dell’orologio molecolare. È questo il caso del metodo NeighborJoining.
Questo metodo utilizza un algoritmo di clustering iterativo in cui, proprio
CAPITOLO 2. PRINCIPALI METODI DI INFERENZA DI ALBERI FILOGENETICI20
come accade nell’UPGMA, ad ogni iterazione vengono determinate le relazioni tra coppie di singole unità. A di↵erenza però del precedente, tale metodo
parte da un albero senza radice e con una topologia a stella, in cui inizialmente non vi è alcuna relazione esplicita tra le unità.
L’algoritmo itera procedendo all’identificazione della coppia di sequenze che
ha distanza minima e la collega ad un padre comune. Tale coppia diventerà
quindi un cluster e verrà poi trattata come una singola unità.
In tale identificazione può però non essere sufficiente cercare tra le foglie vicine. Può infatti capitare di avere due foglie vicine e che la distanza tra di loro
sia maggiore rispetto al cammino tra una delle due unità ed un’altra foglia
(si pensi al caso in cui le lunghezze dei rami siano molto diverse).
Una soluzione al problema appena presentato può essere quella di sottrarre
la media delle distanze verso tutte le altre foglie, secondo la formula:
Dij = dij
(ri + rj )
dove ri ed rj sono del tipo:
ri =
1
|L|
2
X
dik
k2L
e con |L| indichiamo la dimensione dell’insieme di foglie L.
Da questa nuova matrice si può identificare quindi la coppia con distanza
minore, unificarla e calcolare le nuove distanze dalle precedenti unità verso
il nuovo cluster, anzichè verso le foglie.
Successivamente si può ripetere tutto il procedimento appena visto per assemblare tutti i cluster fino a trovare due soli elementi da unificare, che
verranno infine collegati.
Tale metodo viene preferito al precedente nel caso in cui l’albero da calcolare
presenti diverse lunghezze dei rami, ovvero una grande varianza dei tempi di
evoluzione.
Algoritmo Neighbor-Joining
INIZIALIZZAZIONE
CAPITOLO 2. PRINCIPALI METODI DI INFERENZA DI ALBERI FILOGENETICI21
Costruisci T come l’insieme delle foglie, le quali corrispondono
alle singole sequenze e poni L = T .
ITERAZIONE
Prendi una coppia i e j per cui Dij è minima. Crea poi un
nuovo nodo k ponendo dkm = 12 (dim + djm dij ) per ogni m 2 L.
Aggiungi k a T ponendo le lunghezze dik = 12 (dij + ri rj ) e
djk = dij dik ) collegando k a i e j. Rimuovi i e j da
L ed aggiungi k
TERMINAZIONE
Quando rimangono solamente due cluster i e j allora uniscili
con un ramo che avrà lunghezza dij
Esempio 2.2. Si cerca di applicare l’algoritmo di neighbor-joining a sei
unità, che inizialmente hanno la seguente matrice delle distanze:
A B C
B 5
C 4 7
D 7 10 7
E 6 9 6
F 8 11 8
D
E
5
9
8
e la cui topologia a stella è rappresentata in figura 2.4 (a).
La distanza più piccola risulta essere tra A e C ma, per quanto detto in
precedenza, si deve prima verificare che siano e↵ettivamente due foglie vicine.
Come prima cosa si calcola allora ri per ogni sequenza:
5+4+7+6+8
30
=
= 7, 5
6 2
4
5 + 7 + 10 + 9 + 11
42
r(B) =
=
= 10, 5
6 2
4
4+7+7+6+8
32
r(C) =
=
=8
6 2
4
7 + 10 + 7 + 5 + 9
38
r(D) =
=
= 9, 5
6 2
4
r(A) =
CAPITOLO 2. PRINCIPALI METODI DI INFERENZA DI ALBERI FILOGENETICI22
Figura 2.4: Esempio di applicazione del metodo Neighbour-joining.
CAPITOLO 2. PRINCIPALI METODI DI INFERENZA DI ALBERI FILOGENETICI23
6+9+6+5+8
34
=
= 8, 5
6 2
4
8 + 11 + 8 + 9 + 8
44
r(F ) =
=
= 11
6 2
4
r(E) =
Si può quindi calcolare la nuova matrice che sarà la seguente:
A
B
C
D
B -13
C -11,5 -11,5
D -10
-10 -10,5
E -10
-10 -10,5 -13
F -10,5 -10,5 -11 -11,5
E
-11,5
dove ad esempio DAB viene calcolato, come si è visto in precedenza, nel
seguente modo:
DAB = dAB
(rA + rB ) = 5
(7, 5 + 10, 5) =
13
Procedendo nello stesso modo per tutte le combinazioni, si ottiene la matrice
riportata sopra.
Ora si possono scegliere le due sequenze da unificare che sono quelle con valore
minore nella nuova matrice. Come si può vedere ci sono due combinazioni
con valore minore: AB e DE. La scelta può essere casuale. In questo esempio
viene considerata la prima.
Si crei quindi un nuovo cluster etichettato con AB e le cui distanze da A e
B sono rispettivamente:
dAB + (rA rB )
5 + (7, 5 10, 5)
=
=1
2
2
= dAB d(A,AB) = 5 1 = 4
d(A,AB) =
d(B,AB)
Ora, per poter e↵ettuare l’iterazione successiva con il nuovo albero, si devono
ricalcolare le distanze tra tutte le coppie, considerando il nuovo cluster AB
CAPITOLO 2. PRINCIPALI METODI DI INFERENZA DI ALBERI FILOGENETICI24
anzichè le due foglie A e B. La nuova matrice sarà quindi:
AB
C 3
D 6
E
5
F
7
C
D E
7
6
8
5
9
8
in cui, ad esempio:
dAC + dBC dAB
4+7 5
=
=3
2
2
Ripetendo ora il procedimento, fino a trovare due elementi, come illustrato
in figura 2.4 (b-d) si ottiene l’albero raffigurato in (e).
d(AB,C) =
2.5
Il metodo di Fitch Margoliash
Anche il metodo di Fitch Margoliash, come i due precedenti, è basato sull’utilizzo di una matrice delle distanze e, ad ogni iterazione, cerca di ricostruire
la gerarchia tra le sequenze calcolandone le lunghezze [2].
L’idea che sta alla base dell’algoritmo è che, date tre sequenze A, B e C il
cui albero senza radice di riferimento è riportato in figura 2.5, è possibile
calcolare le distanze tra A e D attraverso la relazione:
dAB + dAC dBC
dAD =
2
Similmente le distanze tra B e D e tra C e D sono date da:
dBA + dBC dAC
dBD =
2
dCD =
dCA + dCB
2
dAB
Questo è possibile in quanto, come visto precedentemente per il metodo neighbor joining, si presume che le distanze dell’albero siano additive.
CAPITOLO 2. PRINCIPALI METODI DI INFERENZA DI ALBERI FILOGENETICI25
Figura 2.5: Albero di riferimento del metodo Fitch-Margoliash.
In presenza di un albero con più di tre sequenze è possibile ad ogni iterazione
ricondursi alla situazione appena descritta, prendendo in considerazione due
sequenze, ad esempio A e B e, prendendo come terzo valore la media di tutte
le rimanenti distanze scartando A e B [10].
Quindi, identificando con C l’insieme di tutte le sequenze dell’albero diverse
da A e B, dAC corrisponderà alla distanza tra A e tutte le sequenze comprese
in C mentre dBC alla distanza tra B e tutte le altre comprese in C.
Il metodo di Fitch-Margoliash prevede che vengano prese in considerazione
tutte le possibili topologie delle sequenze prese in esame, invertendo ogni
volta la posizione delle unità tassonomiche nell’albero. Questo può sembrare
inizialmente un approccio molto dispendioso, soprattutto se paragonato a
metodi simili come ad esempio il neighbor joining.
Infatti, il numero di possibili topologie per alberi senza radice (SR) e con
radice (R) è direttamente proporzionale al numero di specie (n) contenute
nell’insieme che si vuole rappresentare ed è pari a [1]:
NR =
NSR =
(2n
2n 2 (n
(2n
2n 3 (n
3)!
2)!
5)!
3)!
il che giustifica quanto appena a↵ermato.
Essendo però l’obiettivo del metodo quello di trovare l’albero che minimizza la
CAPITOLO 2. PRINCIPALI METODI DI INFERENZA DI ALBERI FILOGENETICI26
lunghezza totale, è necessario provare tutte le possibili topologie per garantire
la corretta identificazione dell’albero con minor lunghezza.
In tale metodo la lunghezza di un albero viene intesa come la misura della
di↵erenza tra le distanze tra le unità tassonomiche misurate sui rami degli
alberi e quelle osservate sulla matrice. Tra le varie misure di errore, la più
comune è [10]:
T 1 X
T
X
E=
wij |dij pij |2
i=1 j=i+1
dove con T si rappresenta il numero di unità, con wij il peso che viene associa⇣ ⌘2
to all’errore (che nella versione originale è d1ij ), con dij la stima osservata
nella matrice tra i e j e con pij la stima calcolata nell’albero per il ramo che
unisce i e j.
L’albero più corretto sarà allora quello che tra tutti gli alberi calcolati (tramite l’inversione iniziale delle unità) sarà quello il cui valore di E risulterà
minore.
Viene riportato ora l’algoritmo generale di Fitch-Margoliash per un numero
di sequenze superiore a tre [2].
Algoritmo di Fitch Margoliash
1. Trova le due sequenze con minor distanza e dai loro etichette A e B
rispettivamente.
2. Considera l’insieme di tutte le altre sequenze come un’unica unità e
calcola la media tra A e tale insieme dapprima e tra B e quest’ultimo
poi.
3. Usa i valori appena trovati per calcolare dAD e dBD , dove D corrisponde
al nodo in cui si incontrano i cammini che partono da A e da B.
4. Crea un nuovo cluster AB unendo le due singole unità e crea una nuova
matrice delle distanze utilizzando la media tra A e B.
CAPITOLO 2. PRINCIPALI METODI DI INFERENZA DI ALBERI FILOGENETICI27
5. Identifica la prossima coppia con minor distanza e procedi come descritto dal passo 1, calcolando dove necessario il valore del ramo interno.
6. Ripeti l’intera procedura invertendo la posizione iniziale delle foglie,
cosı̀ da provare tutte le possibili topologie dell’albero.
Come si può notare, il metodo in questione è molto simile al metodo UPGMA
anche se di↵erisce principalmente per due cose:
• le unità vengono raggruppate in gruppi di tre;
• vengono usate le medie delle distanze tra le unità composite.
Inoltre il metodo Fitch-Margoliash è consigliato per alberi con rami corti.
La presenza di rami lunghi tenderebbe infatti a diminuire l’attendibilità del
metodo in quanto comporterebbe una perdita delle analogie tra le specie in
esame [10].
Esempio 2.3. Si consideri la seguente matrice delle distanze iniziale per
le cinque sequenze:
Chimp
Gorilla
Orang
Gibbon
Human
94
111
180
206
Chimp
115
194
218
Gorilla Orang
188
218
217
Il primo passo consiste nel prendere la combinazione con minor distanza,
che in questo caso è Human-Chimp. Viene assegnato al primo la lettera A ed
al secondo la lettera B e, come descritto in precedenza, viene identificato con
C l’insieme di tutte le altre sequenze. Risulta quindi possibile calcolare le
distanze:
dAB = 94
111 + 180 + 206
dAC =
= 166
3
CAPITOLO 2. PRINCIPALI METODI DI INFERENZA DI ALBERI FILOGENETICI28
Figura 2.6: Esempio di applicazione di Fitch Margoliash.
CAPITOLO 2. PRINCIPALI METODI DI INFERENZA DI ALBERI FILOGENETICI29
dBC =
115 + 194 + 218
= 176
3
Ora, se si indica con D il nodo in cui i cammini tra le singole unità si incontrano, è possibile calcolare le distanze tra A, B e C e tale nodo come
segue:
94 + 166 176
dAD =
= 42
2
94 + 176 166
dBD =
= 52
2
166 + 176 94
dCD =
= 124
2
Il risultato di questo primo passo si può vedere in figura 2.6 (a).
Ora si necessita di ricalcolare la matrice considerando le precedenti due unità
Human-Chimp come un unico cluster, identificato con H/C.
H/C
Gorilla 113
Orang 187
Gibbon 212
Gorilla
Orang
188
218
217
La coppia con minor distanza è quella formata dal nuovo cluster e da Gorilla.
Come prima viene indicato il primo con A ed il secondo con B, mentre con C
il restante insieme delle unità non ancora considerate. Le loro distanze sono:
dAB = 113
111 + 180 + 206
dAC =
= 200
3
115 + 194 + 218
dBC =
= 203
3
Ancora una volta si consideri il nodo D, come il punto di incontro dei cammini
che partono da A, B e C. Le loro distanze da esso saranno quindi:
113 + 166 + 176
dAD =
= 55
2
CAPITOLO 2. PRINCIPALI METODI DI INFERENZA DI ALBERI FILOGENETICI30
113 + 176
2
166 + 176
=
2
dBD =
dCD
166
113
= 58
= 145
Tali relazioni sono descritte nella figura 2.6 (b1). Risulta però che A non è
un’unità tassonomica dell’albero ma il cluster unito al passo precedente. Si
può quindi ora calcolare anche la lunghezza del ramo interno IB (Internal
Branch) sottraendo dalla distanza appena calcolata la media della lunghezza
dei rami delle due unità, cioè:
dIB = dAD
dHu/D + dCh/D
= 55
2
42 + 52
=8
2
dove con dHu/D e dCh/D si indicano rispettivamente le distanze di Human e
Chimp dal loro padre.
L’albero calcolato fino a questo momento, con le relative lunghezze dei rami
è riportato in figura 2.6 (b2).
Proseguendo similmente per altre due iterazioni si trovano le nuove relazioni
tra il cluster creato e Orang dapprima e Gibbon successivamente. Gli alberi
risultanti sono riportati rispettivamente in figura 2.6 (c) e (d).
2.6
Il metodo di Minima Evoluzione
Come si è appena visto, i metodi UPGMA, Neighbor-joining e di FitchMargoliash consentono di determinare le lunghezze di ogni ramo dell’albero,
o↵rendo cosı̀ la possibilità di ricalcolare la matrice delle distanze tra tutte le
coppie di sequenze considerate nell’analisi.
Si considerino i metodi basati sulle distanze e quelli basati sulle sequenze e si
faccia riferimento alla tabella 2.1. A causa di eventuali sostituzioni multiple o
convergenti si presume che le distanze calcolate sulle sequenze possano essere
inferiori a quelle calcolate direttamente sull’albero, proprio perché tali analisi
CAPITOLO 2. PRINCIPALI METODI DI INFERENZA DI ALBERI FILOGENETICI31
A
Chimp
Human
0,014
Gorilla
0,020
Orang
0,037
Macaque
0,082
OWL_Monkey
0,119
Spider_Monkey 0,110
B
C
D
E
0,014 0,018 0,036 0,080 0,114 0,114
0,018 0,036 0,080 0,114 0,114
0,015
0,036 0,080 0,114 0,114
0,032 0,038
0,080 0,114 0,114
0,076 0,080 0,080
0,114 0,114
0,115 0,118 0,118 0,135
0,054
0,104 0,106 0,109 0,123 0,055
-
Tabella 2.1: Distanze genetiche tra le sequenze di ⌘-globine
inducono una sottostima delle distanze misurate.
Accade però talvolta che la regola appena descritta venga violata nell’utilizzo dei metodi di clustering basati sulle matrici delle distanze [1], come
mostrato nella tabella 2.1. Infatti può capitare proprio l’esatto contrario, come si può vedere dalla combinazione d13 Chimp-Gorilla in cui dtree = 0, 018 <
dsequence = 0, 020. In tale tabella vengono infatti riportate le distanze genetiche calcolate tra le sequenze di ⌘-globine di primati calcolati con il metodo
GTR1 (parte inferiore della matrice) e determinate invece con il metodo
UPGMA (parte superiore della matrice).
Può inoltre succedere che alcune distanze prendano valori negativi, cosa che
dal punto di vista biologico non ha alcun senso.
Per ovviare a queste inconsistenze, è possibile utilizzare il metodo di minima
evoluzione. Tale metodo di↵erisce dai precedenti in quanto è una procedura
di ottimizzazione e non di clustering.
Sia N il numero di sequenze da analizzare, allora le relazioni tra le specie
saranno descritte da un albero senza radice con un numero di rami pari a
2N 3, ognuno con lunghezza li . Quindi la lunghezza complessiva dell’albero
GTR (General Time Reversible): complesso modello stocastico per la stima delle
distanze genetiche tra coppie di sequenze nucleotidiche [1].
1
CAPITOLO 2. PRINCIPALI METODI DI INFERENZA DI ALBERI FILOGENETICI32
sarà data da:
L=
2N
X3
li
i=1
L’albero di lunghezza minima sarà dunque quello che minimizza il valore di
L.
L’algoritmo di ottimizzazione utilizzato per calcolare l’albero con lunghezza
minore, si basa su due costrizioni.
La prima dice che, per ogni ramo dell’albero, il suo valore non può essere
negativo, ovvero
li 0
La seconda indica invece che, data qualsiasi coppia di sequenze i e j, la
distanza calcolata sull’albero (⌧ij ) non deve in nessun caso essere minore
della distanza calcolata sulle sequenze (Sij ), ovvero:
⌧ij >= Sij
2.7
Il metodo di Massima Parsimonia
Il metodo della massima parsimonia è probabilmente quello più di↵uso e che
viene maggiormente utilizzato tra i metodi basati sull’analisi delle sequenze.
Tale metodo consiste nell’associare ad ogni albero un certo punteggio, solitamente chiamato lunghezza, che rappresenta il numero minimo di sostituzioni
necessarie per relazionare le sequenze in quel determinato modo, ovvero per
definizione è l’albero con minori cambi di residui paralleli [3]. L’albero (o gli
alberi) più parsimonioso sarà quindi quello che avrà lunghezza minore.
É un metodo che non tiene conto della possibilità di sostituzioni multiple
o convergenti ma prende in considerazione solo il numero minimo finale di
sostituzioni e proprio per questo motivo viene solitamente indicato come un
metodo deterministico.
CAPITOLO 2. PRINCIPALI METODI DI INFERENZA DI ALBERI FILOGENETICI33
Il metodo della massima parsimonia dato un multiallineamento di sequenze
calcola innanzitutto quali siti nelle sequenze sono informativi. Un sito del
multiallineamento si dice informativo se contiene almeno due residui ciascuno dei quali sia presente almeno in due delle sequenze in esame [1]. Una
volta identificati tali siti si procede calcolando, per ogni topologia, l’albero
che richiede il numero minimo di sostituzioni. Quell’albero che alla fine per
ogni sito informativo avrà lunghezza minore, considerando la somma di ogni
singolo sito, sarà il più parsimonioso. Nel caso in cui più alberi abbiano la
stessa lunghezza, allora ci si troverà ad avere più alberi parsimoniosi.
Formalizzando, in presenza di k siti, la lunghezza dell’albero L è data da
L=
k
X
li
i=1
dove ogni li rappresenta il numero di sostituzioni per sito [6].
Il metodo in questione viene solitamente utilizzato quando l’insieme delle sequenze da analizzare sono abbastanza simili tra loro e comunque solo quando
non sono molte. Infatti per determinare correttamente l’albero più parsimonioso si dovrebbero prendere in considerazione tutte le possibili topologie
dell’albero che aumentano esponenzialmente con l’aumentare dei nodi dell’albero.
Esempio 2.4. Consideriamo le seguenti quattro sequenze
Seq
Seq
Seq
Seq
1:
2:
3:
4:
G
G
G
G
G
A
A
A
C
G
T
T
A
C
G
T
*
G
G
A
A
T
T
T
T
*
C
C
T
T
C
C
C
C
*
A
G
A
G
C
C
C
C
facendo riferimento alla figura 2.7.
Per trovare l’albero più parsimonioso si devono innanzitutto considerare i siti
informativi che sono rispettivamente il 5 , il 7 ed il 9 , come indicato con i
CAPITOLO 2. PRINCIPALI METODI DI INFERENZA DI ALBERI FILOGENETICI34
Figura 2.7: Esempio di applicazione della Massima Parsimonia.
CAPITOLO 2. PRINCIPALI METODI DI INFERENZA DI ALBERI FILOGENETICI35
tre asterischi (*) sopra le sequenze. Trovati i siti informativi si costruiscono le
varie topologie possibili: per quattro sequenze ci sono tre possibili topologie.
Si identifichi con Albero1, Albero2 e Albero3 le varie topologie che vengono
in questo caso elaborate tre volte, tante quanti i siti informativi riscontrati.
Sempre in figura 2.7 si è indicato con un pallino (•) il verificarsi di una
sostituzione.
Occorre poi contare il numero di sostituzioni per albero per sito. E↵ettuando
la somma delle sostituzioni nei siti per un dato albero si ottiene:
Albero 1 :
Albero 2 :
Albero 3 :
1 + 1 + 2 = 4 sostituzioni
2 + 2 + 1 = 5 sostituzioni
2 + 2 + 2 = 6 sostituzioni
L’albero con lunghezza minore è l’albero 1 che ha in totale il numero minimo
di sostituzioni ed è quindi l’albero più parsimonioso.
2.7.1
Parsimonia di Fitch
Il primo metodo di parsimonia che viene descritto è quello che utilizza l’algoritmo di Fitch. Tale algoritmo si basa su una matrice del tipo
0
B
B
M =B
@
0
1
1
1
1
0
1
1
1
1
0
1
1
1
1
0
1
C
C
C
A
in cui cioè ad ogni sostituzione viene assegnato un costo unitario.
Inoltre, come si può notare, un cambiamento dal primo al secondo residuo ha
lo stesso costo di un cambiamento dal primo al terzo o al quarto. In e↵etti
qualsiasi sia la direzione in cui vengono e↵ettuate le sostituzioni, il loro peso
rimane uguale.
Proprio per questo motivo tale metodo viene talvolta indicato con il nome
CAPITOLO 2. PRINCIPALI METODI DI INFERENZA DI ALBERI FILOGENETICI36
di unordered character parsimony in quanto l’ordine dei residui non è vincolante.
Si noti però che due sostituzioni da 0 a 1 e successivamente da 1 a 2 hanno
un costo maggiore rispetto ad una sostituzione da 0 a 2, anche se il risultato
finale è lo stesso.
La parsimonia di Fitch è quella che solitamente viene intesa quando si utilizza il semplice termine di parsimonia e non si specifica l’eventuale variante
da quella tradizionale.
Algoritmo della Parsimonia Tradizionale
INIZIALIZZAZIONE
Poni C = 0 e k = 2n 1
RICORSIONE
Calcola l’insieme Rk come segue:
Se k è una foglia
poni Rk = xku
Se k è un nodo interno
Calcola Ri e Rj per i due figli i e j di k e poni
Rk = Ri \ Rj se tale intersezione non è vuota, altrimenti
poni Rk = Ri [ Rj ed incrementa C
TERMINAZIONE
Il minimo costo dell’albero è proprio C
L’algoritmo appena descritto si basa sul fatto che è sufficiente contare solamente il numero di sostituzioni per ottenere il costo totale, come già detto
in precedenza. Si può fare ciò mantenendo una lista dei residui utilizzabili,
in base alle informazioni calcolate nelle foglie per ogni nodo e mantenendo
parallelamente il costo parziale C.
CAPITOLO 2. PRINCIPALI METODI DI INFERENZA DI ALBERI FILOGENETICI37
2.7.2
Parsimonia di Wagner
Si consideri ora il caso in cui si vogliano pesare le sostituzioni secondo il
modello di Wagner, che si basa sulla seguente matrice:
0
B
B
M =B
@
0
1
2
3
1
0
1
2
2
1
0
1
3
2
1
0
1
C
C
C
A
in cui vengono assegnati dei pesi alle sostituzioni ed il cui valore dipende
dal numero di passi da un residuo ad un’altro, ovvero corrisponde al modulo
della di↵erenza tra i numeri degli stati [7].
Proprio perché tale metodo si basa sull’ordine dei residui talvolta viene indicato con il nome di ordered character parsimony.
Come si può facilmente calcolare attraverso la matrice data e a di↵erenza
della parsimonia tradizionale, per un carattere che ha gli stati possibili 0, 1
e 2 un cambiamento da 0 a 1 ed uno successivo ad 1 a 2 ha ora lo stesso
identico peso di un cambiamento da 0 a 2.
Algoritmo della Parsimonia Pesata
Viene riportato, anzichè un algoritmo specifico per la parsimonia di Wagner,
uno strumento più generico, da utilizzare quando i costi per ogni sostituzione
non sono sempre unitari.
INIZIALIZZAZIONE
Poni k = 2n 1
RICORSIONE
Calcola Sk (a) per ogni a come segue:
Se k è una foglia
poni Sk (a) = 0 se a = xku , Sk (a) = 1 altrimenti
Se k è un nodo interno
Calcola Si (a) e Sj (a) per i due figli i e j di k e poni
CAPITOLO 2. PRINCIPALI METODI DI INFERENZA DI ALBERI FILOGENETICI38
Sk (a) = minb (Si (b) + S(a, b))+ minb (Sj (b) + S(a, b))
TERMINAZIONE
Il minimo costo dell’albero è dato da C = mina S2n 1 (a)
Nell’algoritmo sopra riportato si è denotato con S(a, b) il costo di una sostituzione del residuo a nel residuo b, con u il sito in questione e con Sk (a) il
minimo costo di una sostituzione nel residuo a nel nodo k.
Come si può facilmente intuire tale l’algoritmo si può ricondurre alla parsimonia tradizionale quando S(a, a) = 0 per ogni a e S(a, b) = 1 per ogni
a 6= b.
2.7.3
Parsimonia di Dollo
I modelli visti precedentemente sono forse quelli che maggiormente vengono
utilizzati nella pratica. Esistono però dei metodi asimmetrici, ovvero che
cambiano il peso di una sostituzione a seconda della direzione cui è orientata.
La parsimonia di Dollo ne è un esempio, come si può notare dalla sua matrice:
0
1
0 1M 2M 3M
B 1 0 1M 2M C
B
C
M =B
C
@ 2 1
0 1M A
3
2
1
0
dove M è un numero arbitrario, solitamente grande.
In particolare la parsimonia in questione si basa sul concetto che lo stato di
ogni carattere può essere derivato solo una volta [8] e, nel caso in cui una
sostituzione porti ad un assegnamento di un carattere che non va bene, questo
deve dar vita ad un’inversione extra, cioè ad una perdita [6]. Un possibile uso
di questo metodo può essere quello di analizzatore, per limitare quei siti in
cui risulta maggiore la probabilità di perdita piuttosto che di guadagno.
2.7.4
Parsimonia di Camin-Sokal
Quest’ultima variante della parsimonia non è molto utilizzata ma viene riportata per completezza ed importanza storica, in quanto fu la proposta
CAPITOLO 2. PRINCIPALI METODI DI INFERENZA DI ALBERI FILOGENETICI39
originale del metodo della parsimonia.
La sua matrice è del tipo:
0
B
B
M =B
@
0 1 2
1 0 1
1 1 0
1 1 1
3
2
1
0
1
C
C
C
A
Come facilmente si può immaginare dai dati appena riportati, tale metodo
non consente inversioni, ma solo guadagni multipli [6].
Proprio per questa sua caratteristica viene solitamente chiamata anche irreversible character parsimony.
2.8
Il metodo di Massima Verosimiglianza
Il metodo della massima verosimiglianza rappresenta probabilmente il metodo migliore per determinare l’albero più consistente a partire da un multiallineamento di sequenze.
Esso di↵erisce dal metodo della massima parsimonia in quanto calcola il punteggio di un multiallineamento attraverso un modello esplicito di riferimento.
Più nel dettaglio, tale metodo si basa su [6]:
• un modello di evoluzione dell’alfabeto (la probabilità di cambiamento
di nucleotidi o aminoacidi);
• un albero con le lunghezze dei rami.
Il punteggio di un multiallineamento viene indicato come la stima di massima
verosimiglianza di un modello (compreso l’albero che si vuole rappresentare)
ovvero come la probabilità di ottenere i dati attuali supponendo che il modello
sia vero.
Formalmente, dato un insieme di dati D (il multiallineamento) ed un’ipotesi
CAPITOLO 2. PRINCIPALI METODI DI INFERENZA DI ALBERI FILOGENETICI40
H (l’albero che descrive le relazioni tra le sequenze), si tratta di calcolare la
probabilità L che vengano restituiti tali dati, cioè [1]:
L = P r(D|H),
ovvero la probabilità condizionata di osservare D dato A.
Ne deriva facilmente che l’albero di massima verosimiglianza Hi sarà quello
la cui probabilità L risulterà maggiore rispetto a tutte le altre.
Si noti come la probabilità di massima verosimiglianza sia la probabilità
(condizionata) del multiallineamento e non quella del modello (dell’albero).
Infatti la somma delle probabilità calcolate su tutti gli alberi solo casualmente
potrà dare come risultato 1 [6].
La probabilità totale di un albero viene determinata calcolando dapprima la
probabilità che lo stato dei caratteri osservati per ogni sito sia il risultato
di un particolare processo evolutivo e, successivamente, moltiplicando tra di
loro tutti i singoli risultati ottenuti. Tale operazione risulta possibile perchè
si assume che i singoli siti evolvano indipendentemente gli uni dagli altri.
Come facilmente si può immaginare, una diretta conseguenza dell’ipotesi di
indipendenza tra i siti, è che per un particolare albero la verosimiglianza
potrà essere alta in alcuni siti e bassa in altri. Intuitivamente, si avranno cosı̀
risultati alti per un “buon” albero mentre si avranno risultati bassi per un
albero “cattivo”.
Formalmente, sia
P r(b|a, t)
la probabilità che un residuo a venga trasformato in un residuo b in un ramo
di lunghezza t, allora per due sequenze allineate x e y [4]:
P r(x|y, t) =
Y
u
P r(xn |yn , t)
dove u corrisponde all’indice dei siti delle sequenze.
Si noti inoltre come venga preso in considerazione il parametro t che indica la
lunghezza dei rami dell’albero e quindi corrisponde allo scorrere del tempo.
CAPITOLO 2. PRINCIPALI METODI DI INFERENZA DI ALBERI FILOGENETICI41
Esso è fondamentale in questo metodo in quanto, scopo della verosimiglianza
è proprio quello di calcolare la probabilità di cambiamento di un nucleotide
in un altro all’interno di un determinato periodo di tempo.
Come si è già commentato all’inizio di questo paragrafo, il metodo della massima verosimiglianza è probabilmente il migliore tra tutti i metodi in termini
di qualità della ricostruzione e di quantità di informazioni associate ad un
albero [5], infatti riesce a ottenere ottimi risultati dove altri metodi falliscono.
Inoltre, il fatto di basarsi su un modello può essere considerato un forte vantaggio in quanto la visibilità dei valori passati come parametri al metodo
permette di verificarne la loro validità ed eventualmente adattarli.
È comunque altresı̀ vero che tale metodo comporta un enorme carico computazionale nell’arrivare alla soluzione. Infatti la sua applicazione richiede di
esaminare tutte le possibili topologie dell’albero e tutti i possibili parametri
relativi al modello di sostituzione. Come già visto in precedenza, il numero
di possibili topologie per alberi senza radice (SR) e con radice (R) è direttamente proporzionale al numero di specie (n) contenute nell’insieme che si
vuole rappresentare ed è pari a [1]:
NR =
NSR =
(2n
2n 2 (n
(2n
2n 3 (n
3)!
2)!
5)!
3)!
il che giustifica quanto appena a↵ermato.
Quello della massima verosimiglianza viene infatti considerato come il metodo più lento tra tutti quelli esistenti, anche a causa della sua estensione a
considerare tutte le possibili topologie dell’albero [1]. Questo problema limita
quindi ad utilizzare tale metodo solo con l’associazione di semplici modelli,
perchè l’utilizzo di modelli complessi innalzerebbe notevolmente il carico di
lavoro del metodo.
Solitamente i risultati delle stime di massima verosimiglianza, in quanto probabilità comprese tra 0 e 1, assumono valori molto piccoli. Per questo è buona
CAPITOLO 2. PRINCIPALI METODI DI INFERENZA DI ALBERI FILOGENETICI42
Figura 2.8: Etichettamento di un albero per la Massima Verosimiglianza.
norma utilizzare i valori logaritmici delle stime, ricordando che:
L=
k
Y
Li
i=1
ln L =
k
X
ln(Li )
i=1
ovvero che il logaritmo della verosimiglianza di un albero corrisponde alla
somma dei logaritmi delle verosimiglianze dei caratteri.
Esempio 2.5. Prendiamo come esempio l’albero rappresentato in figura
2.8. Per la definizione appena data, la sua stima di massima verosimiglianza
sarà:
P r(x1 , ..., x5 |T, t) = P r(x1 |x4 , t1 )P r(x2 |x4 , t2 )P r(x3 |x5 , t3 )P r(x4 |x5 , t4 )P r(x5 )
dove P r(x5 ) rappresenta la probabilità di avere x5 come radice dell’albero.
Solitamente però le probabilità degli antenati, che in questo caso sono x4
e x5 non sono conosciute a priori. Quindi per ottenere la probabilità delle
sequenze note, per un dato albero, bisogna e↵ettuare la somma su tutti i
CAPITOLO 2. PRINCIPALI METODI DI INFERENZA DI ALBERI FILOGENETICI43
possibili antenati, che in questo esempio si riconduce a calcolare:
X
P r(x1 , ..., x3 |T, t• ) =
P r(x1 , ..., x5 |T, t• )
x4 ,x5
Esempio 2.6. Si vuole ora calcolare la stima di massima verosimiglianza
di un semplice multiallineamento formato da sole due sequenze con due soli
caratteri nucleotidici. Siano Seq1 e Seq2 le due seguenti sequenze:
Seq1 :
Seq2 :
AC
CC
Per calcolare la stima occorre, come descritto in precedenza adottare un
modello di riferimento. Per la sua semplicità si preferisce prendere in questo
esempio quello di Jukes-Cantor che indica che ogni carattere ha un’equa
probabilità di comparire, quindi di 0.25.
La verosimiglianza di ogni sito è quindi data dalla probabilità di avere un
particolare carattere moltiplicata per la probabilità di avere caratteri diversi
nelle due sequenze.
Come si può facilmente vedere per le due semplici sequenze nel primo sito si
hanno diversi caratteri, mentre nel secondo sono uguali. Quindi, supponendo
che µt sia la distanza tra le due sequenze nell’albero (la distanza del ramo
che le unisce) la stima di massima verosimiglianza è data da:
L1 = P r(A)P r(A ! C|µt)
✓
◆
1
1 1 1 µt
=
pAC (t) =
e
4
4 4 4
per il primo sito che presenta due caratteri diversi, mentre
L2 = P r(C)P r(C ! C|µt)
✓
◆
1
1 1 3 µt
=
pCC (t) =
+ e
4
4 4 4
per il secondo sito i cui caratteri sono uguali.
La stima di massima verosimiglianza totale dell’albero sarà quindi data dal
CAPITOLO 2. PRINCIPALI METODI DI INFERENZA DI ALBERI FILOGENETICI44
prodotto delle probabilità dei due siti, ovvero:
L = L1 L2
che, nel caso si voglia usare la forma logaritmica, equivale a dire:
ln L = ln L1 + ln L2
Esempio 2.7. Si estende ora il precedente esempio considerando due
sequenze con un numero totale di caratteri pari a 31. Siano le due sequenze
le seguenti:
*
*
*
* * **
Polycera quadrilineata: AAATGGAGTCAGGAATGAATGGAATAACCGG
Dendronotus frondosus: AATTGGAGCCAGGTATGAATGGAGTTACGTG
Come si può notare sono stati segnalati tramite un asterisco (*) quei siti che
presentano diversità nelle due sequenze. Per arrivare alla stima totale di massima verosimiglianza basterà calcolare la probabilità dei siti che presentano
caratteri uguali e quelli che presentano caratteri diversi poi.
Si consideri ancora una volta il modello di Jukes-Cantor e si supponga quindi
l’indipendenza di evoluzione dei singoli siti.
Più nel dettaglio, si hanno 7 siti che presentano diversità e ben 24 che invece
mantengono lo stesso carattere. Procedendo come nell’esempio precedente si
trova:
L1 = P r(i = j|µt)
 ✓
◆
1 1 1 µt
=
e
4 4 4
7
ovvero la probabilità di ottenere due caratteri diversi, mentre
L2 = P r(i 6= j|µt)
 ✓
◆
1 1 3 µt
=
+ e
4 4 4
24
CAPITOLO 2. PRINCIPALI METODI DI INFERENZA DI ALBERI FILOGENETICI45
che corrisponde alla probabilità di avere due caratteri uguali su uno stesso
sito.
Esattamente come descritto in precedenza la stima totale di massima verosimiglianza sarà ottenuta moltiplicando tra di loro i due risultati appena
calcolati L1 e L2 .
2.8.1
Algoritmo di Felsenstein per la verosimiglianza
Come già detto nel precedente paragrafo, la verosimiglianza è un metodo
molto efficace, anche se computazionalmente molto dispendioso. In e↵etti la
sua applicazione richiede di esaminare tutte le possibili topologie dell’albero
e tutti i possibili parametri relativi al modello di sostituzione, cosa che lo
rende di fatto impraticabile per multiallineamenti con più di 20-30 sequenze
[1].
Una possibile soluzione per ottenere la massima verosimiglianza di un multiallineamento con un numero limitato di sequenze può essere il calcolo della
probabilità maggiore mediante l’algoritmo di Felsenstein (1981). Tale algoritmo utilizza un approccio ricorsivo per il calcolo delle probabilità, partendo
cioè dalle foglie e risalendo gradualmente verso la radice, e↵ettuando una
visita in post-ordine.
Algoritmo di Felsenstein
INIZIALIZZAZIONE
Poni k = 2n 1
RICORSIONE
Calcola P r(Lk |a) per ogni possibile valore di a:
Se k è una foglia
poni P r(Lk |a) = 1, se a = xku , 0 altrimenti
Se k è un nodo interno
Calcola P r(Li |a) e P r(Lj |a) per ogni valore di a
nei figli i e j di a, quindi poni:
CAPITOLO 2. PRINCIPALI METODI DI INFERENZA DI ALBERI FILOGENETICI46
P
P r(Lk |a) = b,c P r(b|a, ti )P r(Li |b)P r(c|a, tj )P r(Lj |c)
TERMINAZIONE
La stima di massima verosimiglianza per il sito u è data da
P
P r(x•u |T, t• ) = a qa P r(L2n 1 |a)
In tale algoritmo abbiamo denotato con P r(Lk |a) la probabilità di tutte
le foglie radicate nel nodo k sapendo che il residuo di quest’ultimo nodo è
proprio a. Tale calcolo viene fatto scendendo sui due figli i e j e calcolando
quindi le probabilità P r(Li |b) e P r(Lj |c), i cui valori saranno poi utilizzati
per trovare la probabilità dello stesso nodo k.
Capitolo 3
Consensus Trees
3.1
I consensus trees
Come si è visto nel capitolo precedente, può capitare che un metodo per inferire alberi filogenetici restituisca diverse topologie di alberi che abbiano la
stessa lunghezza migliore e quindi che siano tutte considerate come equamente candidate ad essere le migliori rappresentanti delle relazioni tra le unità
considerate.
Proprio per questo motivo può essere utile talvolta trovare un compromesso
tra questi candidati, ovvero ricercare partendo da essi un unico albero che
prendendo da loro le informazioni in input, le elabori e costruisca poi una
struttura generalizzata.
A questo scopo vengono utilizzati i Consensus Trees ovvero strutture che
indicano quanto bene si combinano tra loro le informazioni tratte da una
collezione di alberi che rappresenta le stesse unità tassonomiche.
Tale generalizzazione non viene però ridotta ad un numero o ad una misura,
come ad esempio una stima di probabilità, ma fondamentalmente si tratta di
una ricostruzione di un albero calcolata attraverso l’utilizzo di una funzione
o di un algoritmo [13].
Solitamente un consensus tree, proprio perchè più generale, può apparire come meno strutturato, ovvero può contenere alcune politomie (nodi con più
47
CAPITOLO 3. CONSENSUS TREES
48
di due figli). Questo non deve però far pensare ad una mancata risoluzione
dell’albero, ma piuttosto a delle divergenze multiple, considerate come generalizzazioni [14]. Ad esempio, un nodo avente come figli le foglie A, B e C è
considerato come una generalizzazione dei nodi di due o più alberi in cui le
relazioni tra tali foglie sono discordanti.
Quindi, come si è appena visto, un albero di questo tipo non solo ritorna
informazioni sulle somiglianze tra due o più alberi ma sottolinea anche quelli
che sono i nodi ed i rami in conflitto, ovvero che segnano le di↵erenze rinvenute tra gli alberi esaminati [13].
Un albero del consenso in generali non è un albero filogenetico, anche se gli
alberi dai quali esso viene generato lo sono. Infatti esso potrà essere definito
tale solo se la sua topologia risulterà identica ad almeno uno degli alberi
filogenetici elaborati.
A prova di quanto appena detto si consideri un semplice albero del consenso
composto da una radice e tre figli (ovvero una politomia). Tale consensus
non rappresenta un albero filogenetico in quanto, per la sua stessa definizione, ogni nodo in un albero filogenetico può contenere al massimo due figli
[18].
Solitamente gli alberi filogenetici prendono il nome di fundamental trees, ovvero alberi fondamentali che rappresentano la struttura gerarchica, mentre
gli alberi del consenso vengono identificati come derivative trees, ovvero alberi derivati, poichè costruiti da un insieme di alberi (filogenetici e non) [14].
I consensus trees trovano un loro potenziale utilizzo in molti di↵erenti contesti, oltre a quello bioinformatico. Per questo motivo può essere interessante
salvaguardare alcune informazioni rispetto ad altre e quindi generare consensus trees con metodi diversi. È proprio per questo che ad oggi esistono molti
metodi per il calcolo di di↵erenti consensus trees.
Come si è detto gli alberi del consenso vogliono generalizzare degli alberi in
input, ovvero trovare le loro informazioni condivise e scelte poi a seconda del
metodo utilizzato. Un’importante osservazione [17] dice però che per trovare
le informazioni tra un insieme di alberi bisogna conoscere quali informazioni
CAPITOLO 3. CONSENSUS TREES
49
Strict
Adams
Average
Nelson-Page
Local
Greedy
Majority-Rule
Median
Strict
Figura 3.1: Relazioni tra i principali
metodi del consensus.
sono e↵ettivamente
da essi rappresentate.
Adams
Average
In questo documento, come detto sopra, gli alberi che vengono considerati
Loose
Majority-Rule
rappresentano le relazioni filogenetiche che intercorrono tra le specie considerate. Si considereranno quindi alberi radicati e non in cui i valori dei nodi
Nelson-Page
interni sono significativi.
Greedy
Median
Si focalizzerà ora l’attenzione sui principali metodi per la ricostruzione dei
consensus trees. In particolare verranno approfonditi metodi che si basano
sulle seguenti assunzioni:
• tutti gli alberi fondamentali dai quali costruire il consensus devono
rappresentare le relazioni tra un uguale insieme di unità tassonomiche;
• l’albero risultante deve contenere esattamente le stesse unità che vengono descritte dagli alberi fondamentali forniti.
In figura 3.1 sono riportati i metodi del consensus che verranno trattati nelle
prossime pagine.
Le frecce tra da un metodo in un altro indicano che tutti i consensus trees
ritornati da questi ultimi sono estensioni di quelli ritornati dai primi. Questo
vale a dire ad esempio che un greedy consensus tree è un’estensione dello
strict consensus tree, ovvero che tutti i nodi contenuti in quest’ultimo presenti
CAPITOLO 3. CONSENSUS TREES
50
anche nell’altro ma non il viceversa.
Si noti come tutti i metodi estendono lo strict consensus, che, come si vedrà,
è il metodo più restrittivo che permette l’inclusione di un minor numero di
nodi rispetto agli altri.
3.2
Strict Consensus
Il primo metodo per determinare un consensus tree è il metodo dello strict
consensus che viene spesso indicato come il più semplice tra tutti i metodi.
Esso si basa sulla teoria che nodi e rami di un albero saranno presenti nell’albero risultante se e solo se essi saranno presenti e manterranno le identiche
relazioni in tutti gli altri alberi forniti in input [12].
In pratica quindi verranno inclusi nell’albero finale solo quei nodi che avranno esattamente gli stessi figli in tutti gli alberi trattati.
In presenza di sottoalberi contenenti lo stesso insieme di foglie in tutti gli alberi in input ma in cui le relazioni tra tali foglie risultano di↵erenti si procede
alla generalizzazione e tutte le unità tassonomiche vengono inserite come figlie del nodo in cui il sottoalbero è radicato.
Esempio 3.1. Si considerino le quattro sequenze A, B, C, D. Due topologie di alberi con tali sequenze sono riportati in figura 3.2 (1) e (2). Come si
può facilmente vedere in entrambi gli alberi esistono i cluster {A,B,C,D} e
{A,B,C}. Tali cluster identificano i nodi che hanno tali foglie nei sottoalberi
radicati in essi.
Quindi si può a↵ermare che entrambi gli alberi hanno i due sottoalberi
{A,B,C,D} e {A,B,C} e pertanto lo strict consensus sarà formato esattamente da questi due nodi interni, come riportato in figura 3.2 (3).
In particolare si osservi come il cluster più esterno nell’albero (1) sia {A,B}
che non trova però un nodo uguale nell’altro albero. La stessa cosa accade
per il cluster {B,C} nell’albero (2). I due sottoalberi vengono allora riportati
ad un livello minore, in particolare al livello in cui tutti i figli dei cluster
CAPITOLO 3. CONSENSUS TREES
51
Figura 3.2: Semplice esempio dello strict consensus.
considerati nei due alberi sono compresi.
Esempio 3.2. Si consideri ora il caso illustrato in figura 3.3, leggermente
più complesso del precedente.
Gli alberi (1) e (2) sono gli alberi fondamentali dai quali si vuole ricavare lo
strict consensus.
Si può notare che i due alberi hanno entrambi un sottoalbero della radice comune, quello radicato nel cluster {a,r,s,t,z}. Essendo tutti i (sotto)cluster
e tutte le relazioni uguali in entrambi (1) e (2) si potrà copiare lo stesso
sottoalbero nel consensus tree.
Per quanto riguarda l’altra metà dell’albero, si tratta di cercare quei cluster
che appartengono sia ad (1) che a (2). Mentre i cluster nel primo albero sono
{{cm}, {cmd, {hjk}}}
nell’altro albero sono
{{mdhj}, {cmdhj}
CAPITOLO 3. CONSENSUS TREES
Figura 3.3: Un’applicazione dello strict consensus.
52
CAPITOLO 3. CONSENSUS TREES
53
È evidente che i due sottoalberi in (1) e in (2) non hanno elementi in comune
e questo significa che tale sottoalbero deve essere rappresentato nello strict
consensus come una divergenza multipla di tutte le foglie contenute in esso.
Il risultato finale è rappresentato in figura 3.3 (3): si noti come il sottoalbero
comune ai due alberi fondamentali e l’altro sottoalbero completamente diverso.
Un’importante proprietà dello strict consensus è che l’ordine con cui vengono considerati gli alberi (nel caso siano più di due) non è vincolante per
calcolare il risultato. Infatti l’idea è che dato un albero meno generale e applicato ad un consensus tree il risultato sarà ancora lo stesso consensus tree.
E’ importante sottolineare che lo strict consensus, considerato qui per gli alberi con radice, può essere tranquillamente applicato agli alberi senza radice,
ottenendo lo stesso risultato.
3.3
Majority-rule Consensus
Come si può facilmente intuire dal nome, l’albero calcolato dal majority-rule
method dipende da una regola di selezione che prende in considerazione solo
quei cluster il cui numero di presenze all’interno di tutti gli alberi forniti
risulta maggiore.
In pratica, volendo assegnare un valore minimo a questa maggioranza, si può
dire che i cluster che verranno presi in considerazione dovranno apparire in
almeno metà degli alberi filogenetici forniti [12].
Come facilmente si può intuire, nel caso di soli due alberi tale metodo si
riconduce allo strict consensus. Più in generale ci si riconduce allo strict consensus nel caso di più topologie di alberi presenti tutte con eguale numero di
ripetizioni.
Esempio 3.3. [14] Si consideri la figura 3.4 per comprendere meglio quanto
appena detto.
CAPITOLO 3. CONSENSUS TREES
54
Figura 3.4: Semplice esempio del Majority-rule consensus.
Siano a, b e c le unità considerate e (1), (2) e (3) gli alberi considerati. Il
risultante Majority-rule consensus sarà la topologia (2) e (3) perchè il numero di cluster in essa contenuti compare in esattamente più della metà degli
alberi considerati, cioè due su tre.
Ma se si provasse ad esempio a considerare un altro albero fondamentale in
aggiunta ai precedenti ed in particolare un altro albero con topologia (1), ci
si ricondurrebbe ad avere due diverse topologie ognuna con uguale numero
di presenze negli alberi considerati. In tal caso allora il comportamento del
metodo sarebbe lo stesso dello strict consensus e l’albero risultante sarebbe
quello identificato in figura 3.4 con (4), ovvero un nodo rappresentante una
multipla divergenza.
Esempio 3.4. Si consideri invece ora una situazione leggermente più complessa, con i tre alberi fondamentali riportati in figura 3.5 (1), (2) e (3).
Innanzitutto si noti come il cluster {c,d} sia presente in due dei tre alberi e
CAPITOLO 3. CONSENSUS TREES
Figura 3.5: Applicazione del Majority-rule consensus.
55
CAPITOLO 3. CONSENSUS TREES
56
sempre nello stesso numero di alberi il precedente cluster ne formi uno nuovo
con {b}. Il cluster {a} invece presenta tre di↵erenti relazioni nei tre alberi.
La momentanea situazione del nuovo consensus tree è riportata in (4).
Continuando con la costruzione dell’albero si trova che il cluster {e,f} è
presente anch’esso in due dei tre alberi (1 e 2) e viene cosı̀ aggiunto (5). Si
noti infine come l’ultimo gruppo, contenente le foglie {g}, {h} e {j}, nonostante nella terza topologia sia presente come una divergenza multipla, venga
inserito nel Majority-rule consensus tree esattamente come nel primo e nel
secondo albero, poichè tale relazione occorre due volte anzichè una.
Il risultato finale di queste operazioni è raffigurato dall’albero riportato in
figura 3.5 (6).
Si noti che questo metodo, come il precedente, può essere applicato sia agli
alberi con radice (come appena visto) che agli alberi senza radice.
3.4
Greedy Consensus
Il greedy consensus è un metodo che estende il majority-rule precedentemente illustrato, permettendo di accettare un numero maggiore di cluster [13].
Il metodo agisce utilizzando una strategia greedy.
Gli algoritmi greedy, per definizione, procedono alla risoluzione di un problema mediante una sequenza di decisioni, sfruttando due importanti proprietà:
la scelta greedy e la sottostruttura ottima.
La prima proprietà indica che ad ogni iterazione l’algoritmo deve scegliere
la strada al momento più conveniente, facendo quindi la scelta localmente
migliore.
La sottostruttura ottima invece consiste nel mantenimento di una struttura
che ad ogni iterazione viene incrementata con il valore localmente ottimo
scelto dalla precedente proprietà.
Ritornando al greedy consensus method, si indichi con T = (T1 , T2 , ..., Tk )
l’insieme degli alberi sui quali calcolare il consensus tree e sia S l’insieme dei
CAPITOLO 3. CONSENSUS TREES
57
cluster da cui si ricaverà il nuovo albero. S sarà cioè quella che in precedenza
è stata indicata come sottostruttura ottima.
Il primo passo consiste nell’elaborare ogni albero di T creando una lista ordinata contenente tutti i cluster distinti riscontrati negli alberi. L’ordinamento
viene dettato dal numero di ripetizioni di ogni cluster calcolato in tutti gli
alberi.
Questo significa che il primo elemento in testa alla lista corrisponde a quello
con ripetizioni maggiori, cioè il cluster che con maggior frequenza compare
tra tutti gli alberi. Nel caso in cui gli alberi rappresentino tutti le stesse unità
tassonomiche allora il primo elemento sarà il cluster radice (che comparirà
infatti in tutti gli alberi in input).
Tale primo cluster verrà quindi rimosso dalla lista e verrà inserito nell’insieme S come il primo cluster del nuovo albero.
Successivamente si continuerà prendendo sempre i cluster con maggior frequenza nella lista che verranno inseriti in S, dopo aver verificato la compatibilità con i cluster già presenti in tale insieme (ovvero i cluster devono
formare un albero).
Alla fine in S si avranno cosı̀ tutti i cluster con maggior frequenza tra di
loro compatibili. Il greedy consensus tree si otterrà facilmente ricostruendo
l’albero da tale insieme secondo la regola di inclusione.
Esempio 3.5. Si consideri la figura 3.6 in cui gli alberi (1), (2) e (3) sono
gli alberi fondamentali su cui calcolare il greedy consensus tree.
Come prima cosa occorre formare l’insieme contenente i cluster di tutti gli
alberi, ordinato per numero di ripetizioni in questi ultimi. Dopo l’analisi di
tutti gli alberi, l’insieme risulta:
{{ABCDEF, 3}, {ABC, 3}, {DEF, 2}, {DE, 2}, {ABCF, 1}, {AB, 1}, {EF, 1}}
dove, ad esempio per il primo elemento, ABCDEF corrisponde al cluster e 3
identifica la sua frequenza. Si noti che proprio questo cluster preso come
esempio, essendo il primo della lista sarà pure il primo ad essere evaso.
È infatti ora possibile costruire l’insieme S inserendo, come appena detto,
CAPITOLO 3. CONSENSUS TREES
Figura 3.6: Calcolo del greedy consensus tree.
58
CAPITOLO 3. CONSENSUS TREES
59
il primo valore (la radice). Possono successivamente essere inseriti i valori,
nell’ordine: ABC, DEF e DE.
All’iterazione successiva si dovrà prendere ABCF che però non risulta essere
compatibile con gli elementi già inseriti in S. Viene per questo scartato.
L’elemento seguente è AB che viene inserito in S essendo compatibile con
tutti gli altri cluster. Si noti come ne majority-rule consensus tale nodo non
sarebbe stato inserito nel consensus poichè appartiene solo ad un albero.
Infine il cluster EF non verrà inserito in S poichè non compatibile. Quindi
l’insieme finale S sarà:
S = {ABCDEF, ABC, DEF, DE, AB}
dal quale si potrà costruire il greedy consensus tree che è riportato in figura
3.6 (4).
È stato riportato all’interno della stessa figura anche lo il majority-rule consensus tree (5) calcolati sugli stessi alberi (1), (2) e (3). In particolare si noti
come esso venga costruito con la divergenza multipla {a,b,c} poichè compare in due dei tre alberi in input.
Si noti che la costruzione dell’albero finale di tale metodo può non essere
unica. Infatti essa dipende da come vengono considerati (ordinati) i cluster
in caso di due o più di essi con stessa frequenza ma tra di loro incompatibili.
Il greedy consensus tree viene considerato come un raffinamento sia del
majority-rule consensus che del loose consensus descritto in sezione 3.6.
Infatti, come si è visto sopra, gli elementi con frequenza maggiore saranno i
primi ad essere evasi dalla lista ed in particolare gli elementi che compariranno almeno in metà degli alberi saranno i primi in lista ad essere evasi. Quindi
il greedy consensus tree soddisfa anche la condizione del majority-rule tree.
Inoltre, un cluster AB presente in un loose consensus tree indica che tale cluster è compatibile con tutti i cluster degli alberi in input. Siccome nel greedy
consensus un cluster (ordinato per frequenza) viene inserito nell’insieme S
se e solo se è compatibile con tutti i cluster precedentemente inseriti, allora
CAPITOLO 3. CONSENSUS TREES
60
lo stesso cluster AB verrà sempre inserito in S. Tale analogia permette di
a↵ermare che il greedy consensus raffina il loose consensus method.
3.5
Median Consensus
Anche il median consensus method può essere visto come un’estensione del
majority-rule consensus.
Tale metodo è basato sull’utilizzo di una misura per calcolare la distanza
tra gli alberi. Solitamente la misura utilizzata prende il nome di symmetric
di↵erence measure.
Tale misura, indicata con ds (T1 , T2 ) viene definita per gli alberi con radice
come:
ds (T1 , T2 ) = | (T1 )
(T2 )| + | (T2 )
(T1 )|
dove, ad esempio, | (T1 )
(T2 )| corrisponde al numero di cluster che appartengono a T1 ma non appartengono a T2 .
Quindi il valore rappresentato da tale misura corrisponde al numero totale
di cluster che, tra due determinati alberi, non risultano presenti in entrambi.
Se si indica con T = {T1 , T2 , ..., Tk } l’insieme degli alberi dai quali estrarre
il median consensus tree, ognuno costruito sull’insieme di foglie L(T ), allora
tale median consensus tree sarà quell’albero che minimizza il valore
ds (T, T ) =
X
ds (T, Ti )
i
ovvero quell’albero in cui i cambiamenti (le di↵erenze di cluster) tra esso e
tutti gli altri alberi risulta minore.
È proprio per questo motivo che spesso l’albero calcolato da tale metodo
viene descritto come un albero che si posiziona a metà tra gli alberi forniti
in input [12].
Il median consensus può anche essere descritto in termini del majority-rule
method.
Si indichi infatti con k il numero di alberi dai quali calcolare il consensus
CAPITOLO 3. CONSENSUS TREES
61
median tree. La riconduzione al majority-rule tree distingue tra valori di k
pari o dispari [12]:
• nel caso in cui k sia pari, allora il median tree corrisponde esattamente
al majority-rule tree.
• nel caso diverso in cui k sia dispari, allora il majority tree corrisponde
ad un possibile median tree, ma come esso anche tutti gli altri alberi
composti esattamente da quei cluster che compaiono in almeno k2 degli
alberi forniti.
Un’altra regola di calcolo dell’unità di misura, anche se probabilmente meno nota, misura di di↵erenza asimmetrica (asymmetric di↵erence measure)
definita come:
X
da (T, T ) =
da (T, Ti )
i
=
X
i
| (Ti )
(T )|
considerando quindi le di↵erenze tra i cluster contenuti in un albero e non
nell’altro ma non il viceversa, entrambi con radice.
Si noti che anche questo metodo, come il majority-rulem può essere applicato
senza restrizioni sia ad alberi con radice che ad alberi senza radice.
3.6
Loose Consensus
A di↵erenza di quanto detto per lo strict consensus in cui per ogni cluster
non comune a tutte le topologie elaborate veniva restituita una divergenza
multipla (una politomia), nel loose consensus si vuole invece prima verificare
che tale diversità non sia in conflitto con tutti gli altri alberi, ovvero che gli
alberi siano comunque compatibili tra di loro.
In particolare, dato un insieme di alberi filogenetici C esso viene detto compatibile solo se esiste un albero filogenetico T che mostra ogni albero in C
CAPITOLO 3. CONSENSUS TREES
62
Figura 3.7: Applicazione del loose consensus.
[16].
Un albero filogenetico T 0 si dice che mostra un albero filogenetico T 00 se l’albero filogenetico ottenuto eliminando da T 0 tutte le foglie (e i rami ad esse
collegate) che non compaiono in T 00 , risulta uguale a T 00 o lo risolve (è più
generale).
Nel caso in cui esista T per cui l’insieme di alberi C risulti compatibile si dice
che T è un parent tree di C.
Quindi dato un insieme di alberi il loose consensus method analizza tutti i
cluster e solo quelli che appaiono compatibili con tutti gli alberi forniti entrano a far parte dell’albero finale [12].
Esempio 3.6. Si considerino gli alberi rappresentati in figura 3.7. Come
si può facilmente vedere in questo semplice esempio il cluster {a,b} risulta
compatibile con entrambi gli alberi mentre il cluster {c,d} non risulta compatibile con il cluster {a,b,c} dell’albero (2).
CAPITOLO 3. CONSENSUS TREES
63
L’albero risultante è quindi (3) in cui viene riportato il cluster {a,b}, mentre
l’elemento {c,d} viene diviso e riportato come politomia.
Si noti infine come il risultato dello strict consensus applicato agli stessi alberi avrebbe visto le quattro foglie come figli diretti della stessa radice.
Si è quindi visto come questo metodo utilizzi regole diverse dallo strict consensus anche se comunque rimane un metodo che viene da esso raffinato.
Infatti nel caso particolare in cui tutti gli alberi da elaborare siano alberi
binari, il loose consensus tree corrisponde esattamente allo strict consensus
tree.
Anche in questo metodo l’applicazione può avvenire indistintamente ad alberi
con e senza radice.
3.7
Nelson-Page Consensus
Il metodo di Nelson-Page (1989) è una ridefinizione dell’originale metodo di
Nelson (1979) resa necessaria per ovviare ad alcune grosse ambiguità che
quest’ultimo presentava.
La premessa di base di tale metodo è che, dato un insieme di alberi su cui
calcolare il consensus, un cluster che non viene ripetuto in nessun altro albero
può essere errato, mentre già una sua singola ripetizione può essere significativa.
Infatti il metodo di Nelson prende in considerazione tutti quei cluster che
appaiono in due o più alberi. Tali cluster prendono il nome di replicated clusters o replicated components [12].
Quindi per costruire il Nelson consensus tree occorre prendere i replicated
cluster e tutti i rimanenti cluster che risultano essere compatibili con essi.
Proprio da questa dicitura nascono però le ambiguità del metodo. Infatti
[12,13]:
• i replicated cluster potrebbero non essere compatibili (cioè potrebbero
non formare un albero);
CAPITOLO 3. CONSENSUS TREES
64
• potrebbero esserci diversi gruppi di unreplicated cluster (che compaiono
cioè solo una volta negli alberi) compatibili tra di loro e con i replicated
cluster ma di cui non viene data indicazione sul comportamento da
assumere.
Il nuovo algoritmo creato da Page per risolvere questi problemi consiste nell’associare un peso ad ogni cluster che corrisponde al numero di volte che esso
appare negli alberi in input meno uno. In questo modo i replicated cluster
avranno tutti valori maggiori di zero.
L’albero ritornato da tale algoritmo sarà quindi composto da quei cluster che
formano i sottoinsiemi compatibili con maggior peso all’interno della collezione.
Nel caso in cui esistano più sottoinsiemi con lo stesso peso si considera la
loro intersezione per l’e↵ettiva costruzione dell’albero.
3.8
Adams Consensus
Storicamente il primo metodo per calcolare il consensus tra alberi fu l’Adams
consensus che ad oggi è sicuramente quello più conosciuto [12]. Nella sua definizione Adams intese che il consensus di due o più alberi è un albero che
rappresenta solo quelle informazioni condivise tra tutti gli alberi da elaborare
e che quindi ogni informazione non rappresentata in tutti gli alberi non deve
essere rappresentata nel consensus finale [17].
Esistono due versioni di questo metodo, una per gli alberi con i nodi interni
significativi, l’altra in cui tali valori vengono ignorati. Come detto in precedenza si prenderà qui in considerazione solo quest’ultima tipologia di alberi.
Il metodo descritto da Adams prevede che le informazioni su un insieme di
foglie venga descritto dall’LUB (least upper bound) di tale insieme. In altre
parole ogni nodo deve contenere le informazioni su quali sono le foglie contenute nel sottoalbero in esso radicato.
Per comprendere il suo funzionamento si introdurranno due definizioni: quel-
CAPITOLO 3. CONSENSUS TREES
65
la di prodotto tra partizioni e quella di partizioni di cluster massimali [13].
Siano ⇡1 , ⇡2 , ..., ⇡k partizioni di un insieme di unità tassonomiche. Il prodotto
di queste partizioni è la partizione ⇡ tale che se due elementi a e b sono in
uno stesso blocco in ⇡, allora devono essere in uno stesso blocco anche in
ogni ⇡1 , ⇡2 , ..., ⇡k .
Quindi, ad esempio, il prodotto di ⇡1 e ⇡2 tali che
⇡1 = {ab|cde}
⇡2 = {ac|bde}
è definito come
⇡ = {a|b|c|de}
Infatti, come si può vedere, gli elementi de risultano nello stesso blocco in
entrambi ⇡1 e ⇡2 e vengono mantenuti come tali in ⇡.
I cluster massimali di un albero con radice Ti corrispondono ai cluster che
rappresentano informazioni sul maggior numero di unità. La partizione massimale dei cluster di Ti è dunque la partizione ⇡(Ti ) dell’insieme di unità
tassonomiche che hanno blocchi uguali ai cluster massimali di Ti .
L’Adams consensus tree viene calcolato prendendo ad ogni passo tutte le partizioni massimali degli alberi forniti in input e calcolando poi il prodotto tra
ogni singola partizione. Tutte le intersezioni non nulle verranno poste come
figli dell’albero e si potrà iterativamente seguire questo modello scendendo
nell’albero.
In altre parole, se alcuni alberi non sono logicamente consistenti quei rami che
creano conflitti vengono collegati al più vicino nodo comune. Questo consensus tree può quindi non riflettere completamente gli stessi gruppi supportati
dagli alberi iniziali [14].
Proprio per questo motivo Adams dovette dimostrare che l’albero creato dal
suo metodo manteneva comunque le stesse informazioni sull’annidamento
comune tra tutti gli alberi. La definizione di annidamento data da Adams è
riportata qui di seguito [12].
Siano A e B sottoinsiemi dell’insieme L(T ) delle foglie di T e sia <T una
CAPITOLO 3. CONSENSUS TREES
Figura 3.8: Applicazione intuitiva del metodo di Adams.
66
CAPITOLO 3. CONSENSUS TREES
67
relazione tra tali insiemi nello stesso albero radicato T .
Si scrive allora che A <T B se A ⇢ B e il minimo comune antenato di A è
un discendente del minimo comune antenato di B. In tal caso si dice allora
che A si annida in B e che A <T B è un annidamento di T .
La seconda regola che caratterizza tale consensus è che, per ogni coppia di
cluster X e Y , nell’albero costruito dal metodo si ha che:
X ⇢ Y ) X <Ti Y
per ogni albero Ti fornito in input.
Esempio 3.7. [14] Si consideri dapprima la figura 3.8 che rappresenta una
simulazione intuitiva del procedimento di Adams.
Si prendano inizialmente in considerazione i tre alberi fondamentali (1), (2)
e (3) sui quali si vuole calcolare l’Adams consensus tree.
Come si può facilmente notare CD forma un cluster in tutti e tre gli alberi,
come pure EF . Allo stesso modo anche la tripla GHJ. Quindi questi tre
gruppi verranno inseriti nell’albero finale. L’albero (4) mostra infatti le relazioni correnti dell’albero del consensus.
Si noti che, nonostante quanto detto, i tre gruppi vengono collocati come figli
della radice. Infatti le relazioni individuate si riferiscono alle coppie di foglie,
ad esempio tra C e D e non tra CD e tutte le altre foglie.
È proprio considerando quest’ultimo aspetto che tali cluster vengono posizionati come figli della radice, poichè nei tre alberi hanno posizioni contrastanti.
A e B risultano invece in conflitto nei tre alberi forniti, pertanto vengono riposizionati al nodo radice formando in esso una politomia.
Come si può vedere il risultato finale (5) è diverso da quello che si sarebbe
ottenuto con lo strict consensus. Infatti, a di↵erenza di quest’ultimo, nell’Adams consensus l’albero finale assume il significato che C e D sono unità più
vicine rispetto alle altre foglie.
Esempio 3.8. [13] Si prenda ora invece in considerazione la figura 3.9 in
cui si vuole esemplificare il procedimento di Adams risolto tramite il calcolo
CAPITOLO 3. CONSENSUS TREES
68
Figura 3.9: Esempio di applicazione del metodo di Adams.
del prodotto partizione e delle partizioni massimali dei cluster.
Siano i due alberi (1) e (2) gli alberi fondamentali dai quali calcolare il consensus tree.
Si calcolano innanzitutto le partizioni massimali di (1) e di (2) ottenendo
rispettivamente:
⇡1 = {abcde|f }
⇡2 = {abdef |c}
Calcolando da queste il prodotto partizione si ha che
⇡ = {abde|c|f }
Da ⇡ possiamo allora a↵ermare che la radice dell’albero avrà esattamente tre
figli: {abde}, {c} e {f }.
Riducendo ora gli alberi (1) e (2) all’insieme {abde} si ottengono le due
partizioni:
⇡1 = {abd|e}
CAPITOLO 3. CONSENSUS TREES
69
⇡2 = {ade|b}
Calcolando nuovamente il prodotto partizione si trova:
⇡ = {ad|b|e}
ovvero anche il nodo corrente avrà una tripla divergenza per i figli {ad}, {b}
e {e}.
La nuova partizione massimale risulta essere {ad} ma, essendo formata esattamente da due foglie, è ovvio che questi due elementi saranno entrambi figli
diretti del nodo corrente.
L’albero definitivo è l’albero (3) riportato in figura 3.9.
L’utilizzo dell’Adams consensus method viene comunque sfruttato al meglio quando gli alberi fondamentali contengono una o più unità che appaiono
in di↵erenti posizioni negli alberi [14]. Infatti in tal caso le informazioni da
esso restituite sono maggiormente significative, in quanto, come detto in precedenza, indicano quali foglie sono più vicine rispetto alle altre nell’albero.
A di↵erenza di quanto accadeva nei precedenti metodi l’Adams consensus
viene utilizzato esclusivamente per alberi con radice e non esiste metodo
analogo per gli alberi senza radice.
3.9
Average Consensus
L’average consensus method fa parte di quella categoria di metodi che elabora le informazioni prelevate dagli alberi in input convertendole in nuovi tipi
di dati quali sequenze o distanze. A partire da tali dati viene poi costruito il
consensus tree utilizzando un metodo di costruzione di alberi filogenetici.
A di↵erenza dei metodi trattati in precedenza, in questo si richiede che per
gli alberi fondamentali dai quali calcolare il consensus tre sia nota la distanza tra ogni coppia di nodi, ovvero che ad ogni arco venga associato un peso
indicante la distanza tra i nodi di cui ne è il ramo.
CAPITOLO 3. CONSENSUS TREES
70
L’average consensus method innanzitutto costruisce delle matrici rappresentanti le distanze tra le singole unità per ogni albero ricevuto in input. Più in
particolare, ciascuna cella della matrice creata contiene la distanza del cammino che unisce le unità tassonomiche della corrispondente riga e colonna
[13].
Il cammino tra due unità tassonomiche a e b è definito come la somma di
tutti gli archi che vengono percorsi per raggiungere b partendo dal nodo a.
Come già visto per il median consensus tree anche in questo metodo è possibile confrontare coppie di alberi. In particolare è possibile utilizzare come
unità di misura quella che viene chiamata di↵erenza ai minimi quadrati.
Tale valore viene calcolato tra due alberi pesati T1 e T2 come [13]:
XX
(T1 , T2 ) =
[d1 (a, b) d2 (a, b)]2
a
b
dove d1 e d2 sono le distanze tra le lunghezze dei cammini rispettivamente
per T1 e per T2 , calcolate per ogni a e b appartenenti all’insieme delle foglie
L(T ).
Quindi, dato un insieme di alberi senza radice T = (T1 , T2 , ..., Tk ), tutti con
associate le lunghezze dei rami, l’average consensus tree corrisponde all’albero
Tc tale che venga minimizzato il valore
(Tc , T ) =
k
X
(Tc , Ti )
i=1
In altri termini, per risolvere l’average consensus tree occorre calcolare il
valore di dc per cui
XX
[dc (a, b) d(a, b)]2
a
b
risulta minima, dove con d si è intesa la media dei valori delle matrici degli
alberi fondamentali forniti in input, ovvero:
k
d(a, b) =
1X
di (a, b)
k 1=1
CAPITOLO 3. CONSENSUS TREES
Unità
a
b
c
d
e
T1
71
T2
0
T3
0
0.2
0
0.8
0.8
0
0.9
0.9
0.3
0
1.1
1.1
0.5
0.4
0
0
0.3
0
0.2
0.3
0
0.6
0.5
0.6
0
0.6
0.5
0.6
0.2
0
0.25
0
0.5
0.55
0
0.75
0.7
0.45
0
0.85
0.8
0.65
0.3
0
Tabella 3.1: Distanze di due alberi e la loro media.
Figura 3.10: Calcolo dell’average consensus tree su due alberi senza radice.
CAPITOLO 3. CONSENSUS TREES
72
Si noti però che il risultato di tale metodo può non essere sempre univoco [12].
Esempio 3.9. Si consideri la tabella 3.1. Per ogni albero senza radice T1
e T2 sono state riportate le distanze tra ogni gruppo di foglie identificabili
all’intersezione delle unità nella matrice.
Quindi ad esempio si può trovare che la distanza tra le foglie a e d in T1 è di
0.9, mentre la stessa distanza in T2 è di 0.6.
Viene riportata anche la media (average) che, essendo solo due gli alberi su
cui calcolare il consensus, si riconduce esattamente al risultato della media
di T1 e di T2 .
Una rappresentazione grafica dei due alberi e di quello risultante è riportata in figura 3.10. L’average consensus tree viene ricostruito esattamente
dalla matrice calcolata. Infatti calcolando i cammini tra le foglie dell’albero troviamo esattamente i valori riportati nella matrice average in tabella 3.1.
L’average consensus tree è ancora uno dei pochi metodi che associano informazioni sui valori delle distanze tra i nodi per il calcolo del consensus tree.
Esso presenta comunque ancora dei grossi limiti a livello computazionale, in
quanto non è ancora stato trovato un algoritmo che lo risolva efficientemente
[13].
3.10
Riepilogo dei metodi
Come si è appena visto, i metodi per calcolare il consensus tree di un insieme
di alberi sono diversi, ognuno con un grado di generalizzazione diverso, a seconda delle regole adottate per l’inclusione dei nodi degli alberi fondamentali
nell’albero finale.
In tabella 3.2 sono stati riportati i metodi trattati nel capitolo con un breve
riassunto delle loro principali caratteristiche.
Come già anticipato nella prima sezione del capitolo (figura 3.1), tutti i metodi estendono lo strict consensus, poichè quest’ultimo inserisce solo quei nodi
CAPITOLO 3. CONSENSUS TREES
Metodo
Descrizione
Strict include nel consensus tree solo quei nodi che appaiono
esattamente in tutti gli alberi da elaborare.
Majority-rule
prende in considerazione solo i nodi che appaiono in almeno.
metà degli alberi considerati.
Median
definita una misura tra alberi tale metodo trova quello
che la minimizza rispetto a agli alberi in input.
Greedy
utilizzando la strategia greedy ricostruisce l’albero
finale considerando l’insieme dei cluster contenuti
negli alberi forniti in input.
Loose
estende lo strict consensus method inserendovi un cluster
non presente in tutti gli alberi ma comunque compatibile
con gli altri nodi.
Nelson-Page
l’albero calcolato contiene dei sottoalberi che appaiono
con maggior frequenza negli alberi in input e che risultano
comunque compatibili tra loro.
Adams
basato sulle intersezioni tra cluster calcolate attraverso
il prodotto partizione del sottoinsieme massimale di cluster
Average
applicato ad alberi con associate ai rami le distanze tra i
nodi, ricostruisce il consensus tree calcolando la media
delle distanze tra le singole unità degli alberi forniti.
Tabella 3.2: Breve riepilogo dei metodi trattati.
73
CAPITOLO 3. CONSENSUS TREES
74
che appaiono esattamente in tutti gli alberi.
L’estensione deve venire considerata come un rilassamento di questa regola,
permettendo di inserire nel consensus tree un numero maggiore di nodi. Risulta quindi ovvio che ad esempio un majority-rule method estende lo strict
poichè permette di costruire l’albero del consensus con nodi che non appaiono esattamente in tutti gli alberi (ma almeno in metà).
Si noti inoltre come questa dipendenza sia evidente per alcuni metodi in alcune circostanze, quando essi si riconducono a quello che estendono. Infatti,
ad esempio in presenza di soli due alberi da elaborare, sia il Majority-Rule
che il Nelson-Page consensus tree vengono calcolati riconducendosi allo strict
consensus method.
3.11
Tecniche avanzate: subtrees e supertrees
Esistono altre tecniche per il calcolo del consensus tree per alberi filogenetici
oltre a quelle illustrate in questo capitolo. Esse si basano però su supposizioni
di↵erenti da quelle qui trattate e per questo verranno solo accennate.
Tra le principali categorie ci sono i metodi basati sui subtrees e quelli basati
sui supertrees.
I primi si basano sull’idea che l’albero del consensus viene calcolato su un
insieme di alberi fondamentali aventi tutti uguali foglie ma in cui l’albero
risultante può non contenere esattamente tutte le stesse unità [12].
Questa tecnica può essere utile quando la rimozione anche di una sola foglia
dall’insieme meglio rappresenta le relazioni tra le rimanenti unità condivise
dagli alberi in input.
Si pensi ad esempio ad un insieme di alberi abbastanza simili tra loro in
cui però una singola unità compare in diverse posizioni. In tal caso l’albero
costruito su tutte le foglie non potrebbe non dare un risultato soddisfacente
quando, considerando anche solo il sottoalbero senza quella foglia, si avrebbe un risultato migliore, che corrisponde ad una similarità maggiore di quel
sottoalbero.
CAPITOLO 3. CONSENSUS TREES
75
I metodi basati sui supertrees sono invece metodi che costruiscono un consensus tree da degli alberi in input che possono non contenere tutti le stesse
unità tassonomiche.
Tale approccio può risultare utile per focalizzare l’attenzione su un limitato
numero di foglie contenute in alberi che rappresentano informazioni insieme
di unità tassonomiche maggiore.
Capitolo 4
WebConsensus
4.1
L’applicazione per il calcolo dei consensus
trees
Come conseguenza delle problematiche relative alla scelta del miglior albero
filogenetico tra un insieme equamente affidabile si è visto nel precedente capitolo che il calcolo del consensus tree tra i candidati può essere una soluzione
accettabile.
A questo scopo è stato realizzato WebConsensus, un’applicazione JAVA interfacciata tramite alcune pagine web dinamiche, per essere utilizzabile attraverso browser web da chiunque e gratuitamente.
Nella sua prima versione, WebConsensus permette l’utilizzo dei tre principali
metodi di calcolo dei consensus trees, quali lo Strict consensus, il MajorityRule consensus e l’Adams consensus, senza limitazioni sul numero di alberi
in input da cui calcolare l’albero finale.
Punto di forza dell’applicazione è anche la possibilità di visualizzare la rappresentazione grafica dell’albero costruito, interfacciandosi con Phylodendron,
un’applicazione gratuita che permette la visualizzazione grafica di alberi filogenetici (e non).
In questo capitolo si procederà a descrivere WebConsensus, spiegando det76
CAPITOLO 4. WEBCONSENSUS
77
tagliatamente come funziona il programma, dall’interfacciamento attraverso
alcune pagine web sino agli algoritmi per i metodi di consensus considerati.
4.2
Struttura dell’applicazione
L’applicazione WebConsensus, come già accennato, si compone di un’interfaccia web chiamata PHP Consensus, basata su pagine dinamiche realizzate
con tecnologia PHP e di un insieme di classi JAVA identificate con il nome di JAVA Consensus, che calcolano il consensus tree dell’insieme di alberi
filogenetici inseriti, nonchè dell’applicazione Phylodendron per la stampa dell’albero calcolato.
Per i primi due componenti, l’integrazione dei due blocchi di programmi è
resa possibile attraverso l’esecuzione del comando che richiama l’interprete
JAVA direttamente all’interno degli script web, che può quindi passare come parametri al primo le opzioni selezionate dall’utente (come ad esempio il
metodo di calcolo da utilizzare).
La struttura delle componenti di WebConsensus è riportata in figura 4.1. Si
noti come per richiamare e↵ettivamente le classi JAVA di calcolo del consensus sia stato necessario creare un file (Bridge PHP-JAVA) di elaborazione
delle informazioni per permettere a PHP Consensus di passare i dati a JAVA
Consensus e viceversa.
Infatti la loro comunicazione è di tipo bidirezionale: l’interfaccia web deve
passare alle classi JAVA gli alberi e↵ettivamente inseriti dall’utente e le classi
JAVA devono restituire agli script PHP il risultato che verrà successivamente
inoltrato al tool di visualizzazione grafica.
Tale comunicazione è stata realizzata utilizzando semplici file di testo, uno
per ogni albero filogenetico inserito (creato da PHP Consensus e letto da
JAVA Consensus) più l’ultimo file contenente il consensus tree finale (creato
da JAVA Consensus e letto da PHP Consensus).
La scelta di utilizzare semplici file di testo serve a garantire una maggiore
compatibilità tra diversi sistemi in cui è installato il linguaggio di scripting
CAPITOLO 4. WEBCONSENSUS
78
WebConsensus
Classi JAVA
(JAVA Consensus)
Phylodendron
Main
(Bridge PHP-JAVA)
Interfaccia Web
(PHP Consensus)
Figura 4.1: Struttura Phylodendron
dei componenti di WebConsensus.
Interfaccia Web
(PHP Consensus)
…Main
(Bridge PHP-JAVA)
Prelevamento dei dati
Salvataggio su file degli
alberi inseriti
Calcolo del consensus tree
Classi JAVA
(JAVA Consensus)
Salvataggio su file del
consensus tree
Acquisizione risultato e
stampa risultato testuale
Phylodendron
Inoltro al tool di stampa
per la rappresentazione
grafica del consensus tree
Figura 4.2: Struttura delle comunicazioni tra i componenti di WebConsensus.
Prelevamento dei dati
…
Salvataggio su file degli
alberi inseriti
Calcolo del consensus tree
Salvataggio su file del
consensus tree
Acquisizione risultato e
CAPITOLO 4. WEBCONSENSUS
79
PHP, utilizzando moduli di installazione che vengono quindi usualmente compresi in fase di configurazione iniziale di tale linguaggio.
La sequenza di operazioni che WebConsensus compie per arrivare a visualizzare il consensus tree è rappresentata in figura 4.2.
Si andrà ora a vedere in dettaglio le varie componenti che strutturano l’applicazione, le stesse illustrate in figura 4.1.
4.2.1
L’interfaccia WEB: PHP Consensus
Il primo componente di WebConsensus che si vuole descrivere è l’interfaccia
Web. Essa si compone di un insieme di pagine web dinamiche che accompagnano l’utente dall’inserimento iniziale dei dati fino alla visualizzazione finale
dell’albero calcolato.
Dopo l’inserimento dei dati da parte dell’utente e la successiva conferma verrà
richiamato un nuovo script PHP che, dopo aver passato i parametri eseguirà
le classi JAVA, controllando se la loro esecuzione produce un messaggio d’errore sullo standard error.
In questo caso la pagina web iniziale verrà ricaricata indicando inoltre quale
errore è stato generato, quale ad esempio un albero scritto non correttamente.
Nel caso invece che tale esecuzione non produca errori, lo script redizionerà
la visualizzazione ad una nuova pagina web composta di due frame: uno superiore contenente il risultato del consensus method scritto in forma testuale,
ed uno inferiore contenente la rappresentazione grafica dell’albero calcolato.
La visualizzazione grafica dell’albero compare con un leggero ritardo poichè
necessita di inviare le informazioni a Phylodendron e caricare successivamente
l’immagine in formato GIF.
La pagina di inserimento dati
La pagina principale dell’applicazione è visualizzata in figura 4.3.
Tale pagina si compone di quattro parti:
CAPITOLO 4. WEBCONSENSUS
80
• il form di inserimento degli alberi;
• il riepilogo dei dati inseriti;
• le opzioni di calcolo e visualizzazione;
• alcuni esempi di calcolo.
Il form di inserimento alberi consente di aggiungere un nuovo elemento alla
lista degli alberi su cui calcolare il consensus tree.
L’inserimento è possibile sia digitando la stringa corrispondente all’albero all’interno dell’area di testo oppure caricando un file contenente sempre un’albero dall’apposito form di selezione file.
Per aggiungere un albero è necessario cliccare su Aggiungi Albero dopo aver
riempito uno dei due campi. Nel caso in cui si desideri caricare un file bisogna
accertarsi che l’area di testo sia vuota perchè altrimenti in fase di caricamento dei dati questa avrebbe la precedenza sul file.
Nella sezione sottostante (il riepilogo dei dati inseriti ), viene riportata la lista degli alberi già inseriti dai quali si andrà a calcolare il consensus tree.
Per ogni albero è stata inserita la possibilità di rimozione dalla lista cliccando
sull’apposita icona a destra di ogni albero oppure su Elimina tutto nel caso
in cui si voglia ripulire completamente la pagina.
Da questa sezione è inoltre possibile avviare il calcolo del consensus tree,
cliccando su Calcola il consensus tree. Si noti come tale opzione non sia disponibile se il numero di alberi inseriti è minore di due.
L’opzione di calcolo si riferisce alla scelta del metodo da utilizzare per calcolare il consensus tree finale. Come detto in precedenza, i metodi disponibili
in questa prima versione sono: Strict consensus, Majority-Rule consensus e
Adams consensus.
Di default al caricamento della pagina viene selezionato lo strict consensus
method e, in assenza di cambiamenti, sarà proprio il metodo utilizzato.
Per quanto riguarda l’opzione di visualizzazione è possibile selezionare l’orientamento dell’albero, scegliendo se ottenere un risultato con la radice in
CAPITOLO 4. WEBCONSENSUS
Figura 4.3: Pagina principale di WebConsensus.
81
CAPITOLO 4. WEBCONSENSUS
82
basso e le foglie in alto, oppure se tenere la radice a sinistra e le foglie a
destra.
L’ultima sezione, quella a destra della pagina, contiene semplicemente link
ad esempi di alberi su cui calcolare il consensus tree.
Si noti come dopo la selezione di un esempio è comunque possibile modellare
l’insieme di dati aggiungendo o eliminando gli alberi.
4.2.2
Il tool di visualizzazione grafica Phylondendron
L’applicazione utilizzata per disegnare gli alberi del consensus è Phylodendron ed in particolare la versione 0.8 beta, realizzata D.G. Gilbert (Indiana
University Biology Department). Tale applicazione è disponibile come web
service all’indirizzo internet:
http : //iubio.bio.indiana.edu/treeapp/
ma seguendo i link indicati è anche possibile scaricare i file per installare
l’applicazione sul proprio personal computer.
Tale applicazione consente di disegnare alberi filogenetici rappresentati in
formato New Hampshire (Newick), ovvero la descrizione di un albero tramite parentesi che è lo stesso richiesto da WebConsensus. Per la descrizione di
tale formato si rimanda al paragrafo 4.2.3.
Si noti che Phylodendron è solamente un tool per la visualizzazione grafica
di alberi: non consente nè di calcolare alberi filogenetici, nè tantomeno alberi
del consensus.
La pagina principale di Phylodendron come web service è riportato in figura
4.4.
Come WebConsensus, anche Phylodendron è scritto interamente in linguaggio JAVA per garantire la portabilità dell’applicazione su macchine diverse.
L’applicazione consente un’ampia scelta di personalizzazione degli alberi da
stampare. In particolare sono consentiti i seguenti tipi di albero [19]:
• tree diagrams: diagrammi per la rappresentazione di alberi senza radice.
CAPITOLO 4. WEBCONSENSUS
Figura 4.4: Pagina principale di Phylodendron.
83
CAPITOLO 4. WEBCONSENSUS
84
• cladograms: ogni coppia di nodi padre figlio è connessa da una retta,
creando un albero con una forma simile ad una V;
• phenograms: ogni coppia di nodi padre/figlio viene collegata utilizzando
rette orizzontali e verticali, per rendere l’idea dei livelli dell’albero;
• eurograms: variante del cladogram in cui ogni coppia di nodi padre/figlio
viene collegata utilizzando dapprima una linea diagonale la cui altezza
non può superare un terzo dell’altezza totale fino al figlio in questione e successivamente da una linea verticale che traccia il collegamento
rimanente fino a tale figlio;
• curvograms: ogni coppia di nodi padre/figlio è connessa da una linea
curva che corrisponde ad un quarto d’ellisse e che comincia orizzontalmente per arrivare verticalmente sul figlio;
• swoopograms: ogni coppia di nodi padre/figlio è connessa da una linea
curva formata da due parti; la prima parte comincia verticalmente e
termina orizzontalmente (e la sua altezza non può essere maggiore di
due terzi di quella totale), mentre l’altra parte inizia orizzontalmente e
termina verticalmente;
Un’altra importante personalizzazione consentita da Phylodendron è la possibilità di modificare il formato di output scegliendo tra semplici immagini
di tipo GIF, Apple PICT e Postscript.
Sono inoltre disponibili altri due formati: il formato mappa GIF e il formato PDF. Questi ultimi, a di↵erenza dei precedenti o↵rono la possibilità
di inglobare dei collegamenti all’interno del risultato per cercare facilmente
informazioni sulla specie inserita all’interno di una banca dati.
4.2.3
Collegamento tra i componenti: Bridge PHP-JAVA
La seconda parte di WebConsensus (JAVA Consensus) è composta da un
insieme di classi JAVA il cui scopo è quello di elaborare gli alberi inseriti
CAPITOLO 4. WEBCONSENSUS
85
dall’utente e di ricostruire il corrispondente nuovo albero del consensus.
L’esecuzione di tali classi viene però comandata da una classe principale che
per comodità si è chiamata con il nome di Bridge PHP-JAVA, in quanto è
l’unico modo esistente per far comunicare le due componenti.
Tale collegamento consiste a sua volta di una classe JAVA, la classe Main,
che elabora le informazioni archiviate da PHP Consensus per passarle poi a
JAVA Consensus.
L’esecuzione della classe avviene eseguendo il seguente comando:
java Main {numberOfTrees} {directory} {method}
dove:
• numberOfTrees: corrisponde al numero di alberi fondamentali inseriti
in input dai quali calcolare il consensus tree finale;
• directory: corrisponde al path relativo della directory contenente i file
con gli alberi da elaborare e all’interno della quale verrà creato il file
con il consensus finale;
• method : il numero corrispondente al metodo da utilizzare per calcolare il consensus tree: 1 per lo Strict consensus, 2 per il Majority-rule
consensus e 3 per l’Adams consensus.
La classe Main controllerà quindi che siano stati inseriti tutti i parametri
richiesti ed e↵ettuerà l’acquisizione degli alberi.
Come detto in precedenza, gli alberi vengono salvati su semplici file di testo e
all’interno della cartella directory passata come argomento alla classe Main.
Tale classe cercherà quindi i file all’interno della directory specificata. Il
formato del nome dei file dev’essere:
{directory}/tree {counter}.txt
dove counter sta ad indicare il numero dell’albero cercato. Ovviamente esso
avrà valori compresi tra 1 e numberOfTrees.
L’albero calcolato sarà invece collocato all’interno del file:
CAPITOLO 4. WEBCONSENSUS
86
{directory}/consensus.txt
Si noti che, di default, in caso tale file esista già verrà sovrascritto con il
nuovo valore dell’albero ed il precedente contenuto verrà perso.
Quindi, ad esempio, nel caso si voglia calcolare un albero del consensus da tre
alberi fondamentali inseriti dentro la cartella temp, la classe Main lavorerà
sui seguenti file:
temp/tree 1.txt
temp/tree 2.txt
temp/tree 3.txt
temp/consensus.txt
dove ovviamente in quest’ultimo collocherà il risultato.
Il formato Newick
Il formato di rappresentazione testuale degli alberi (filogenetici e non), richiesto dalle classi JAVA per ricevere gli alberi fondamentali e produrre il
consensus tree finale è il formato Newick.
Tale formato consiste nella rappresentazione tramite parentesi delle relazioni
padre-figlio in un albero, secondo le seguenti regole:
• un figlio di un nodo viene rappresentato all’interno di una coppia di
parentesi tonde che si annida all’interno della coppia di parentesi del
padre;
• due o più fratelli vengono separati ad uno stesso livello da una virgola.
Si consideri un semplice albero con una radice e tre figli: A, B e C. Per
quanto appena detto, la sua rappresentazione testuale utilizzando il formato
Newick sarà:
(A,B,C)
CAPITOLO 4. WEBCONSENSUS
87
dove, secondo il secondo punto elencato in precedenza, i tre figli vengono
separati da una virgola.
Supponendo di voler inserire una nuova foglia D, ponendola come sorella
solamente del nodo C e quindi nipote degli altri due nodi, allora la nuova
stringa corrisponerà a:
(A,B,(C,D))
ovvero inserendo la nuova coppia di figli all’interno di una nuova coppia di
parentesi che si annida all’interno delle parentesi del padre.
La gestione degli errori
Può capitare che l’esecuzione dell’applicazione generi un errore, ad esempio
nel caso in cui uno o più dati inseriti non corrispondano ad un albero.
Qualsiasi errore riscontrato dalle JAVA Consensus viene intercettato e visualizzato da PHP Consensus.
Si noti che, in caso di errore dovuto ad una errata configurazione o a parametri non validi, il calcolo del consensus tree viene bloccato e si riporta la
segnalazione dell’errore riscontrato.
4.2.4
Struttura delle classi: JAVA Consensus
Si vuole ora riportare la struttura generale delle classi e dei package che
compongono il componente di calcolo dei consensus trees: JAVA Consensus.
Si descriverà dapprima il package che sta alla base dell’applicazione JAVA e
successivamente le sue relazioni con tutti gli altri package utilizzati.
Il package Consensus
Il package principale della parte JAVA di WebConsensus è il package Consensus. Esso comprende un’interfaccia che dichiara i metodi principali per il
package e le tre classi di calcolo che la implementano, una per ogni metodo
CAPITOLO 4. WEBCONSENSUS
88
Package Consensus
«interfaccia»
Consensus
Strict
Majority
Adams
Figura 4.5: Struttura del package Consensus.
di consensus creato.
Come si è visto nel capitolo precedente lo strict consensus può essere esteso a
livello teorico per ottenere tutti gli altri metodi di consensus. Tale estensione
era però intesa come un rilassamento della regola di selezione dei cluster.
Infatti lo strict è proprio il metodo con regola di calcolo più rigorosa.
Anche a livello pratico si è adottata una gerarchia simile, ponendo le classi
Majority e Adams come estensione della classe Strict, anche se per estensione
qui si intende l’ereditarietà tra le classi JAVA.
In pratica, a seconda del parametro passato al file Main, questo decide se
istanziare un oggetto di tipo Consensus come uno Strict, un’Adams o un
Majority, e↵ettuando il downcast e richiamando i metodi di calcolo che saranno gli stessi dichiarati nell’interfaccia.
A livello concettuale, proprio a causa dell’implementazione dell’interfaccia
CAPITOLO 4. WEBCONSENSUS
89
comune, le tre classi contengono esattamente gli stessi metodi e le stesse
strutture dati di base per il calcolo del consensus. Esiste un unico metodo
però che di↵erenzia le tre classi ed è l’unico metodo che viene sovrascritto
nelle due estensioni.
La struttura del package appena illustrato è riportata in figura 4.5 dove
la freccia tratteggiata assume il significato di implementa (⌧implements ),
ovvero ad esempio che la classe Strict implementa l’interfaccia Consensus. Le
due freccie continue assumono invece il significato di estende (⌧extends ),
per dire che ad esempio la classe Adams eredita metodi e strutture dati dalla
classe Strict.
Gli altri package
L’applicazione si basa, come si è appena visto, sul package Consensus che
permette di calcolare il consensus tree dagli alberi inseriti nei file di testo.
Le classi in esso contenute però, per eseguire il proprio lavoro, necessitano di
appoggiarsi su strutture dati diverse, come si vedrà meglio nei dettagli degli
algoritmi riportati nel successivo paragrafo di questo capitolo.
Si vuole però intanto descrivere la struttura generale, indicando le relazioni
tra i vari package che compongono l’applicazione.
La struttura completa dell’applicazione è rappresentata in figura 4.6. Le frecce tratteggiate da un package (classe) ad un altro significano che il primo
dipende dal secondo, ovvero che una modifica apportata al primo influisce
anche sul secondo, ma non viceversa.
La classe Main, come già detto in precedenza, è la classe che comanda l’esecuzione dell’applicazione ed è l’unica classe che dipende dal package principale
Consensus già descritto sopra.
Si riporta ora l’elenco dei package utilizzati riportando una breve descrizione.
Per maggiori dettagli riguardo alle dipendenze tra i package si rimanda alla
sezione successiva del capitolo.
• Consensus: come visto in precedenza contiene le classi per il calcolo
dei consensus trees. Tali classi dipendono dai package PriorityQueues,
CAPITOLO 4. WEBCONSENSUS
90
Stacks
Trees
Queues
Main
Lists
Consensus
Heap
MultiBST
PriorityQueues
Utility
Figura 4.6: Struttura completa dei package.
CAPITOLO 4. WEBCONSENSUS
91
Trees, MultiBST, Lists (ovvero le strutture dati di supporto utilizzate
dagli algoritmi del consensus) e Utility;
• Utility: package che contiene alcune classi di utilità tra cui la classe
contenente i metodi per l’ordinamento tramite inclusione per i package
Heap e MultiBST e alcune importanti funzioni sulle stringhe;
• Trees: tale package contiene la struttura dati per la rappresentazione
di alberi generali, ovvero i consensus trees. Per questo motivo dipende
dal package Consensus;
• Queues: package per la gestione di una semplice coda FIFO (first in
first out) da cui dipende il package Trees che l’utilizza per la visita in
ampiezza dell’albero generale;
• Stacks: package di gestione di semplici pile da cui dipende ancora un
volta il package Trees in questo caso per la visita in profondità degli
alberi generali;
• PriorityQueues: package per la rappresentazione di code di priorità da
cui dipende il package consensus. In particolare la struttura d’appoggio
per il calcolo del consensus già menzionata in precedenza è collegata
direttamente a questo package;
• Heap: fondamentale package da cui dipende il precedente PriorityQueues. O↵re le funzionalità standard della struttura dati heap binario;
• Lists: semplice package per la gestione di liste dinamiche utilizzate
all’interno del package consensus, da cui la dipendenza rappresentata
in figura 4.6;
• MultiBST : package per la gestione di alberi binari multivalore, ovvero
alberi binari con associato per ogni nodo un valore intero (un numero)
ad ogni chiave. Viene utilizzato anch’esso come struttura dati di appoggio all’interno del package Consensus, che crea quindi la dipendenza
segnata in figura 4.6.
CAPITOLO 4. WEBCONSENSUS
4.2.5
92
Diagramma delle attività di JAVA Consensus
Ora che è chiaro il sincronizzamento tra interfaccia web e le classi JAVA e la
struttura generale dei package di JAVA Consensus, si vuole procedere all’analisi della sequenza di operazioni svolte da queste ultime per il calcolo del
consensus tree finale.
A tale scopo risultano utili i diagrammi di attività UML (Unified Modelling
Language) [21] che mostrano la sequenza di operazioni per raggiungere uno
scopo prefissato, individuando sequenzialità e parallelizzazioni delle attività
stesse.
Il diagramma delle attività di JAVA Consensus è riportato in figura 4.7. Esso
indica quindi le operazioni che avvengono da quando viene invocata la classe Main attraverso il comando visto in precedenza fino al salvataggio finale
dell’albero calcolato.
Il diagramma non mostra nè le strutture dati ausiliarie utilizzate per ottenere il risultato finale, nè le relazioni tra le diverse classi viste nel precedente
paragrafo, nè tantomeno i dettagli degli algoritmi di calcolo dei metodi (descritti più avanti).
Si vuole infatti focalizzare l’attenzione sulla sola sequenza di operazioni e↵ettuate, rimandando per gli altri argomenti alle rispettive sezioni del capitolo.
Il primo controllo che viene e↵ettuato dalla parte JAVA dell’applicazione
consiste nel verificare che i parametri passati siano corretti.
Nel caso in cui i parametri non siano corretti, l’esecuzione si ferma producendo una segnalazione di errore sullo standard error.
Successivamente, l’applicazione legge gli alberi da cui calcolare il consensus
da semplici file di testo e contemporaneamente li aggiungi alla lista degli alberi fondamentali.
Nel caso in cui i file non esistano o comunque in presenza di errori in lettura
da essi, viene interrotta l’esecuzione e segnalato l’errore.
Un’altra tipologia di errore è relativa alla sintassi dell’albero; nel caso in cui
vengano rilevati errori (ad esempio l’uso di caratteri riservati per indicare il
nome di una specie) si procede ad avvisare l’utente.
CAPITOLO 4. WEBCONSENSUS
93
Calcola il consensus tree
Parametri passati corretti?
NO
SI
Leggi alberi da file
Aggiungi alberi fondamentali
Errore nei parametri in input
Lettura riuscita?
NO
SI
Sintassi degli alberi corretta?
NO
SI
Elabora gli alberi
Costruisci l'insieme di appoggio
Ricostruisci l'albero del consensus dall'insieme di appoggio
Errore di sintassi degli alberi
Scrittura su file possibile?
Errore in lettura file
SI
Scrivi il consensus tree sul file
NO
Errore in scrittura su file
Figura 4.7: Diagramma delle attività delle classi JAVA.
CAPITOLO 4. WEBCONSENSUS
94
L’applicazione quindi prosegue calcolando e↵ettivamente il consensus tree,
ovvero riempiendo una struttura dati ausiliaria con i nodi del consensus tree
elaborando gli alberi fondamentali passati. Tale attività viene descritta in
dettaglio nei prossimi paragrafi.
Il passo successivo consiste nel ricostruire l’albero del consensus utilizzando
i nodi contenuti all’interno della struttura ausiliaria in precedenza riempita.
Infine occorre inserire la stringa rappresentante l’albero appena calcolato all’interno del file di uscita consensus.txt. In caso di errore di scrittura del file
(ad esempio per mancanza dei permessi di scrittura) si esegue la segnalazione
all’utente.
In caso contrario si riempie il file con la stringa calcolata e l’esecuzione
dell’applicazione termina correttamente senza alcun output.
4.3
Dettagli degli algoritmi
In questa sezione si vogliono descrivere gli algoritmi utilizzati dalle classi
di calcolo del consensus, sia a livello teorico che a livello pratico, con uno
sguardo alle strutture dati a loro necessarie per il conseguimento del risultato finale.
Si vuole però prima, descrivere l’idea generale, comune a tutti i metodi del
calcolo del consensus.
4.3.1
L’idea generale
Ogni classe per il calcolo dei consensus tree funziona nel seguente modo:
1. acquisisce gli alberi fondamentali in input;
2. calcola da essi una struttura di supporto contenente i nodi del consensus
tree finale;
CAPITOLO 4. WEBCONSENSUS
95
3. ricostruisce l’albero del consensus dalla struttura dati di supporto appena creata;
4. stampa l’albero del consensus sotto forma di stringa.
Come visto in precedenza l’acquisizione degli alberi in input avviene tramite
il passaggio delle stringhe inserite dagli utenti una per volta dalla classe Main
alle classi del consensus.
Supponendo di avere k alberi in input da elaborare, ognuno con n nodi interni, l’inserimento di tutti gli alberi fondamentali avviene con complessità
lineare rispetto ad n per ogni albero, ovvero con complessità asintotica pari
a ⇥(nk).
Il calcolo della struttura dati ausiliaria (unica per ogni metodo) avviene in
modo diverso a seconda del metodo utilizzato. I dettagli della costruzione
seguono quindi in modo diversificato per ogni metodo implementato.
La struttura dati per l’archiviazione dei risultati dei diversi metodi di consensus utilizzata è una coda di priorità, in cui gli elementi sono ordinati rispetto
all’ordine di inclusione.
Ciò è possibile in quanto ogni nodo dell’albero, come già descritto in precedenza, contiene come valore la rappresentazione dell’insieme di foglie contenute sul sottoalbero in esso radicato.
In particolare, tale ordinamento si basa sull’idea che dati due nodi con etichette A e B entrambe rappresentazioni di sottoinsiemi di c(T ) (l’insieme
delle foglie dell’albero T ), allora:
(
B
se A ⇢ B
max/ (A, B) =
min(A, B) altrimenti
ovvero il sottoinsieme B è maggiore del sottoinsieme A se i valori contenuti
in ques’ultimo sono contenuti anche nel primo. Tale idea può essere espressa
in termini di annidamento (si veda paragrafo 3.8) indicando che il nodo contenente come valore il sottoinsieme A si annida nel nodo che contiene B.
Se invece ciò non accade, allora bisogna considerare l’ordine lessicografico dei
CAPITOLO 4. WEBCONSENSUS
96
due insiemi e prendere quello con valore minimo, ovvero min(A, B). La dicitura valore o rappresentazione di un insieme o di un sottoinsieme viene qui
utilizzata intendendo che, dato un particolare insieme contenente stringhe (i
nomi delle specie rappresentate nell’albero fondamentale), il valore di tale
insieme corrisponde alla concatenazione di tutti gli elementi (le stringhe) di
tale insieme ordinate secondo la regola lessicografica.
Si consideri questo esempio per capire meglio il funzionamento dell’ordinamento. Siano ad esempio i valori HU M AN , GORILLA e M OU SE i nomi
delle specie rappresentate dal seguente albero:
((HU M AN, GORILLA), M OU SE))
Le etichette di tutti i nodi sono quindi:
1. {HU M AN }
2. {GORILLA}
3. {M OU SE}
4. {HU M AN, GORILLA}
5. {HU M AN, GORILLA, M OU SE}
L’ordinamento appena descritto sistema i nodi nel modo seguente (si utilizzano i numeri associati ad ogni valore):
5 99K 4 99K 2 99K 1 99K 3
dal maggiore al minore. Questo perchè ovviamente il sottoinsieme 5 contiene al suo interno tutte le foglie. Il sottoinsieme 4 risulta invece maggiore di
{HU M AN } e di {GORILLA} perchè essi sono contenuti al suo interno,
mentre lo è rispetto a {M OU SE} per l’ordinamento lessicografico crescente.
Similmente a quest’ultimo caso avviene per gli altri tre valori.
Dal punto di vista pratico, in WebConsensus il valore di ogni nodo degli alberi viene memorizzato all’interno di una stringa. Come appena descritto si
CAPITOLO 4. WEBCONSENSUS
97
tratta di rappresentare testualmente i valori contenuti all’interno del sottoinsieme delle foglie contenuti nel sottoalbero in questione.
A tale scopo, per mantenere separate le foglie (le parole) contenute nel sottoinsieme, si è adottata come scelta quella di separare tali elementi con un
spazio vuoto (whitespace) che comunque rappresenta un carattere riservato e
non utilizzabile dall’utente per rappresentare una specie dell’albero. Si noti
che tale limite è stato imposto indirettamente da Phylodendron.
Quindi, riprendendo le etichette dei nodi riportati nel precedente esempio, la
reale memorizzazione dei valori in WebConsensus sarà:
{GORILLA HU M AN M OU SE}, {GORILLA HU M AN },
{GORILLA}, {HU M AN }, {M OU SE}
già ordinati secondo l’ordine lessicografico dal minore al maggiore all’interno
di ogni stringa.
La ricostruzione dell’albero finale avverrà pertanto rimuovendo dalla struttura dati sempre l’elemento maggiore, permettendo la ricostruzione di un
albero generale con una complessità lineare rispetto al numero di nodi. Si
noti come ciò risulti possibile grazie all’ordinamento impartito che suggerisce
una ricostruzione in profondità, scendendo dapprima nelle foglie e continuando poi sui fratelli.
Considerando però che ogni rimozione da una coda di priorità avviene con
complessità O(log(n)), dove n corrisponde sempre al numero di nodi dell’albero, la ricostruzione totale dell’albero avverrà con complessità totale pari a
O(n log(n)).
La rappresentazione su stringa finale dell’albero generale viene generata effettuando una semplice visita in profondità considerando solo le foglie ma
percorrendo comunque anche tutti i suoi nodi interni. La complessità asintotica è quindi pari ⇥(n).
La complessità totale degli algoritmi è quindi pari a O(nk+f (kn)+n log(n)+
n) dove, come detto prima, n corrisponde al numero interno di nodi degli alberi, k al numero di alberi fondamentali da cui calcolare l’albero finale del
CAPITOLO 4. WEBCONSENSUS
98
consensus e f (kn) alla complessità totale di calcolo del consensus method.
Per semplicità si assume che alcune operazioni implementate sulle Stringhe
e↵ettuate da WebConsensus, come l’ordinamento tramite inclusione tra due
valori o il calcolo dell’intersezione tra due elementi trattato nelle prossime
pagine avvenga con complessità costante.
4.3.2
Algoritmo per lo Strict Consensus
Come si è visto nel capitolo precedente (si veda 3.2) lo strict consensus prevede di inserire nell’albero finale solo quei nodi che mantengono le stesse
relazioni in tutti gli alberi inseriti.
Da un punto di vista pratico questo corrisponde a dire che un nodo verrà
inserito nello strict consensus tree se e solo se il suo valore apparirà in esattamente tutti gli alberi fondamentali considerati [15].
Quindi, dato un insieme di alberi T1 , T2 , ..., Tk lo strict consensus tree SC è
definito come:
k
\
c(SC) =
c(Ti )
i
dove la notazione c(X) indica l’insieme dei valori dei nodi dell’albero X.
Una possibile implementazione dell’algoritmo viene descritta in [15], dove si
suggerisce un metodo di calcolo del consensus tree considerando un albero
per volta, anzichè considerarli tutti contemporaneamente. Il metodo in questione si chiama infatti Online Consensus Tree.
L’idea è quindi quella di mantenere una struttura dati temporanea da aggiornare dopo l’elaborazione di se con un nuovo albero.
L’algoritmo dell’Online Consensus Tree può essere riassunto nel modo seguente:
Algoritmo dell’Online Strict Consensus
INPUT
Considera un insieme di alberi fondamentali T1 , T2 , ..., Tk
CAPITOLO 4. WEBCONSENSUS
99
costruiti tutti su uno stesso insieme di foglie S = {s1 , s2 , ..., sk }.
OUTPUT
Al passo i dell’iterazione, si mantiene lo strict consensus
SCi degli alberi T1 , ..., Ti (quelli considerati fino all’istante i).
SOLUZIONE
Al termine dell’algoritmo in SC ci saranno tutti i valori
dei nodi contenuti in esattamente tutti gli alberi considerati.
L’implementazione adottata da WebConsensus riprende molto tale algoritmo,
considerando gli alberi uno alla volta e tenendo traccia del consensus tree
parziale. Qui di seguito è riportato lo pseudo-codice dell’algoritmo utilizzato
dall’applicazione:
Algoritmo dello Strict Consensus
INIZIALIZZAZIONE
Costruisci tanti insiemi ausiliari quanti sono gli alberi
inseriti, ognuno contenente i valori dei nodi di ogni albero
fondamentale. Crea un insieme di supporto inserendo i valori
del primo albero inserito.
ITERAZIONE
Per ogni albero fondamentale successivo al primo e per ogni
valore contenuto negli insiemi:
confronta il valore massimo di ogni insieme e, se è uguale
in entrambi gli alberi rimuovilo da essi e inseriscilo
nell’insieme temporaneo, altrimenti rimuovi solamente il
valore massimo dall’insieme in cui esso è maggiore e non
e↵ettuare inserimenti.
SOLUZIONE
Al termine dell’algoritmo nell’insieme temporaneo saranno
presenti esattamente i valori contenuti in tutti gli
alberi fondamentali iniziali.
CAPITOLO 4. WEBCONSENSUS
100
Si propone ora un esempio che illustra il funzionamento dell’algoritmo appena riportato.
Esempio 4.1. Si consideri la figura 4.8 contenente i tre alberi dai quali
calcolare il consensus, e la figura 4.9 contenente gli insiemi ordinati dei valori
dei primi alberi, dove con set1, set2 e set3 ci si riferisce rispettivamente agli
alberi (1), (2) e (3).
L’algoritmo inizia ponendo il primo insieme nella struttura temporanea e
confrontando ogni suo elemento con l’insieme del secondo albero.
Come suggerito dall’algoritmo si prende il valore massimo di ogni coda. In
questo caso i due valori sono entrambi {ABCDEF } che, essendo uguali,
andranno inseriti nel nuovo insieme di appoggio e rimossi da entrambi gli
insiemi.
I nuovi valori massimi sono ora entrambi {ABCD}, anche questa volta rimossi dagli insiemi inserendo il loro valore nel nuovo insieme.
I successivi valori sono {A} e {AB}. Non essendo uguali, non è possibile inserire il loro valore nel nuovo insieme. L’algoritmo indica pertanto di rimuovere
e scartare l’elemento dalla propria coda che risulta essere maggiore tra i due
che, in questo caso risulta essere {AB}.
Proseguendo si inserisce nel nuovo insieme il valore {A}, poichè il massimo
dei due insiemi mentre si deve scartare il valore {BCD} poichè massimo elemento solo nel primo.
Iterando nuovamente si inseriscono nel nuovo insieme i valori {B}, {CD},
{C}, {CD}, {E} e {F } nel rispettivo ordine poichè a loro volta massimi dei
due insiemi.
L’insieme temporaneo è riportato in figura 4.9 dove viene indicato con il
nome set12. Tale insieme deve ora essere confrontato con quello del terzo
albero, ovvero set3.
Considerando ogni volta il valore massimo degli insiemi, vengono inseriti
nel nuovo insieme temporaneo i valori {ABCDEF }, {ABCD}, {A}, {B},
{CD}, {C} e {D} esattamente nell’ordine riportato.
CAPITOLO 4. WEBCONSENSUS
101
Figura 4.8: Gli alberi fondamentali dai quali calcolare lo strict consensus tree.
CAPITOLO 4. WEBCONSENSUS
ABCDEF
ABCD
102
A
BCD
B
set1:
CD
set2:
ABCDEF
ABCD
C
AB
CD
set12:
ABCDEF
ABCD
A
C
ABCDEF
ABCD
B
C
ABCDEF
B
F
F
CD
EF
A
E
E
D
ABCD
F
CD
D
A
E
B
D
A
C
set3:
D
E
B
F
CD
set123:
C
D
E
F
Figura 4.9: Gli insiemi dei valori degli alberi prima e dopo i confronti.
CAPITOLO 4. WEBCONSENSUS
103
Viene poi però scartato il valore {EF } poichè presente solo nell’insieme set12
ed infine vengono inseriti i nuovi massimi, nonchè ultimi elementi dei due insiemi, ovvero E e F .
L’insieme appena calcolato, indicato in figura con set123 contiene esattamente i cluster che formano lo strict consensus finale.
L’implementazione dell’algoritmo di WebConsensus utilizza come insiemi di
supporto per gli alberi delle code a priorità sfruttando il fatto che l’operazione utilizzata dall’algoritmo su tale insieme è quella di estrazione del massimo
valore. Tali strutture dati sono state realizzate utilizzando degli Heap Binari.
Per quanto riguarda la complessità asintotica dell’algoritmo, bisogna controllare la complessità delle singole operazioni all’interno della struttura dati
Heap Binario.
L’inserimento di un valore in esso richiede un tempo pari a log(n), per il
posizionamento del figlio come prima foglia utile a mantenere la proprietà
di quasi-completezza dell’albero e, successivamente, per la sistemazione dello
heap.
Il massimo valore viene trovato con complessità costante, poichè sarà sempre
nella radice. La sua rimozione avviene invece con tempo pari a log(n) per la
nuova sistemazione dello Heap.
Inserimenti e rimozioni da queste strutture dati vanno e↵ettuati tante volte
quanti sono i confronti tra i vari valori. La soluzione di mantenere un ordinamento ha permesso a questo scopo di mantenere una complessità lineare
rispetto al numero di elementi di tutti gli alberi che è pari a nk, dove come
a solito, n corrisponde al numero totale di nodi di un’albero e k al numero
di alberi fondamentali da cui calcolare il consensus tree.
Per quanto appena visto, si può riassumere che la complessità asintotica
totale dell’algoritmo è pari a O(n log(n)).
CAPITOLO 4. WEBCONSENSUS
4.3.3
104
Algoritmo per il Majority-Rule Consensus
Si vuole ora invece descrivere il funzionamento dell’algoritmo utilizzato da
WebConsensus per il calcolo del Majority-Rule Consensus.
Come visto nel capitolo precedente (si veda 3.3) l’algoritmo estende lo strict
consensus in quanto la regola di selezione dei valori da inserire nell’albero
finale viene leggermente rilassata nel Majority-Rule consensus.
Si ricorda che il majority rule inserisce nel consensus tree finale esattamente
quei valori che compaiono in più di metà degli alberi fondamentali presi
in considerazione. Questo sta a significare che possono essere inseriti anche
valori che non compaiono in tutti gli alberi (come accade invece nello strict
consensus).
Formalmente, dato in input un insieme di alberi fondamentali T1 , T2 , ..., Tk ,
ognuno costruito sempre su uno stesso insieme di foglie S = {s1 , s2 , ..., sk } il
majority-rule consensus tree è composto da quei valori per cui:
A 2 c(M ) sse |{c(Ti )|A 2 c(Ti )}| >
k
2
dove con A si indica il valore di un nodo preso tra quelli degli alberi in input
[15].
Anche in questo caso, l’algoritmo utilizzato da WebConsensus riprende l’Online Majority Consensus dove il calcolo dell’albero finale viene e↵ettuato elaborando gli alberi in input uno alla volta.
L’algoritmo per l’Online Majority Consensus esegue il calcolo mantenendo
una struttura dati che associa al valore di un nodo la corrispettiva frequenza,
ovvero indica quante volte è stato trovato negli alberi esaminati.
La successiva ricostruzione dell’albero (parziale) avverrà quindi prelevando
dalla struttura solo quei nodi la cui frequenza sarà maggiore della metà degli
alberi considerati.
Si riporta qui di seguito lo pseudocodice dell’algoritmo appena descritto per
il calcolo dell’Online Majority Consensus [15].
CAPITOLO 4. WEBCONSENSUS
105
Algoritmo dell’Online Majority Consensus
1 C=?
2 Per ogni nuovo albero Ti
3
Per ogni valore c 2 c(Ti )
4
se c 62 C
5
C = C [ {c}
6
count(c) = 0
7
count(c) + +
8
se count(c) > 2i
9
c(Mi ) = c(Mi 1 ) [ {c}
10
Per ogni valore c 2 c(Mi 1 )
11
se count(c) <= 2i
12
c(Mi ) = c(Mi 1 ) {c}
13
Costruisci l’albero parziale Mi dall’insieme c(Mi )
14
Ritorna Mi
Nell’algoritmo appena descritto, si è indicato con C l’insieme contenente tutti
i valori individuati negli alberi, con C(Ti ) l’insieme dei valori dei nodi contenuti all’interno dell’albero Ti e con count(c) il numero di ripetizioni del
valore c riscontrate.
L’algoritmo utilizzato da WebConsensus è molto simile a quello appena descritto, in quanto mantiene anch’esso una struttura dati con tutti i valori
riscontrati negli alberi in input e tiene traccia della loro frequenza.
Nel caso di WebConsensus, tuttavia, si considerano subito tutti gli alberi
fondamentali ricostruendo l’albero finale del consensus solo alla fine.
Il precedente algoritmo modificato per illustrare l’utilizzo di WebConsensus
è riportato qui di seguito.
Algoritmo del Majority Consensus
1 C=?
CAPITOLO 4. WEBCONSENSUS
106
2 Per ogni albero fondamentale Ti
3
Per ogni valore c 2 c(Ti )
4
se c 62 C
5
C = C [ {c}
6
count(c) = 0
7
count(c) + +
8 Per ogni valore c 2 C
9
se count(c) <= k2
10
C = C {c}
11 C contiene i valori dei nodi del Majority consensus tree
Nell’algoritmo sopra descritto, rispetto al precedente, è stata introdotta la
variabile k che rappresenta il numero totale di alberi fondamentali elaborati.
L’implementazione dell’algoritmo appena descritto è stata e↵ettuata utilizzando un albero binario di ricerca per rendere efficace la ricerca di un valore
nell’insieme C utilizzato come contenitore di tutti i valori incontrati.
In particolare, ogni nodo del BST (Binary Search Tree) è stato implementato
in modo che possa contenere sia una chiave rappresentante il valore del nodo
all’interno dell’albero fondamentale, sia un valore intero che corrisponde alla
frequenza di ripetizione di tale valore.
Quindi, al momento dell’inserimento del valore, si percorre l’albero in altezza
e se risulta essere già presente si incrementa il suo valore, altrimenti si aggiunge un nuovo nodo.
Tale operazione avviene con complessità O(log(h)) per ogni nodo, dove con
h viene indicata l’altezza dell’albero. È però vero che vengono considerati i
nodi di tutti gli alberi fondamentali, per cui la complessità totale di tutti
gli inserimenti diventa O(nk log(nk)), dove come in precedenza, k indica il
numero di alberi e n il numero di nodi all’interno di essi.
Come detto nelle pagine precedenti l’algoritmo deve terminare riempiendo
una coda di priorità dalla quale poi verrà ricostruito l’albero finale. Per fare
ciò bisogna prima filtrare tutti gli nk nodi del BST inserendo in essa solo
CAPITOLO 4. WEBCONSENSUS
107
quelli con frequenza maggiore di k2 .
Considerando che l’inserimento in uno Heap (attraverso cui è implementata
la coda di priorità) avviene in tempo O log(n), la complessità asintotica totale
della ricostruzione da BST a Heap risulta essere pari a O(nk + n log(n)) dove
la prima indica la visita dei nodi del BST mentre la seconda indica l’e↵ettivo
inserimento nello Heap degli n nodi che comporranno l’albero finale. Infatti
risulterà sicuramente che al più n nodi avranno frequenza maggiore di k2 .
Quindi la complessità asintotica totale sarà data da O(nk log(nk) + nk +
n log(n)) e quindi O(nk log(nk)).
4.3.4
Algoritmo per l’Adams Consensus
Come si è visto nel capitolo precedente (si veda 3.8), l’Adams consensus method costruisce un albero del consensus da un insieme di alberi fondamentali
utilizzando le definizioni di partizioni massimali di cluster e di prodotti partizione.
Riprendendo tali definizioni, si andrà ora a vedere come WebConsensus implementa tale algoritmo.
Si ricordano le due definizioni di partizioni massimali di cluster e di prodotti
partizione.
Siano ⇡1 , ⇡2 , ..., ⇡k partizioni di un insieme di unità tassonomiche. Il prodotto
di queste partizioni è la partizione ⇡ tale che, se due elementi a e b sono in
uno stesso blocco in ⇡, allora devono essere in uno stesso blocco anche in
ogni ⇡1 , ⇡2 , ..., ⇡k .
I cluster massimali di un albero con radice Ti corrispondono ai cluster che
rappresentano informazioni sul maggior numero di unità. La partizione massimale dei cluster di Ti è dunque la partizione ⇡(Ti ) dell’insieme di unità
tassonomiche che hanno blocchi uguali ai cluster massimali di Ti .
L’algoritmo utilizzato da WebConsensus segue l’algoritmo originale di Adams.
Il suo pseudocodice è riportato qui di seguito.
CAPITOLO 4. WEBCONSENSUS
108
Algoritmo dell’Adams Consensus
1 C=?
2 Per ogni livello i dei k alberi in input
3
calcola i prodotti partizione tra tutti gli elementi di livello i
4
per ogni risultato c trovato
5
se c non è ?
6
se c 62 C
7
C = C [ {c}
8 C contiene i valori dei nodi dell’Adams consensus tree
Nell’implementazione di tale algoritmo si è dovuto innanzitutto curare l’inserimento di tutti i nodi degli alberi in input in un’unica struttura dati inserendo assieme al valore del nodo anche il livello in cui si trovava nell’albero
fondamentale.
Per fare questo basta per ogni albero una semplice visita dell’albero generale
tenendo traccia del livello in cui ci si trova ad ogni istante. Quindi le informazioni sul livello di ogni nodo vengono reperite con complessità costante.
Come struttura dati su cui appoggiarsi e quindi inserire i valori degli alberi
si è scelto di utilizzare un minHeap Binario con un ordinamento impartito
rispetto al numero associato ad ogni nodo, ovvero sul livello iniziale del suo
valore. Tale scelta permette di mantenere un albero bilanciato e o↵re la possibilità di rimozione del livello minimo con un tempo pari a O(log(n)).
Quindi ad ogni albero sarà associato un minHeap che conterrà esattamente
i nodi ordinati per livello in esso contenuti.
Per ogni inserimento, come visto in precedenza per le code di priorità costruite con gli heap, la complessità è pari a O(log(n)), dove come al solito n
è il numero di nodi contenuti in ognuno dei k alberi. Visto che l’inserimento
andrà e↵ettuato per ogni nodo di ogni albero, la complessità totale di questa fase di inserimento corrisponderà a O(nk log(n)), poichè nei k minHeap
saranno presenti al più n diversi nodi.
Il calcolo dei prodotti partizione viene e↵ettuato, come visto nel precedente
CAPITOLO 4. WEBCONSENSUS
109
capitolo (3.8)), calcolando le intersezioni per ogni valore con i nodi dello stesso livello presenti negli altri alberi fondamentali. Questo comporta che per
un dato livello tra due alberi vengono calcolate mp partizioni supponendo
di avere m nodi di un livello in un albero e p nell’altro. Aggiungendo però
un altro albero con q nodi a quel livello, il numero di intersezioni calcolate
diventa mpq.
Nel caso peggiore quindi, la fase di calcolo dei prodotti partizione avviene
con una complessità di ⇥(nk ). Questo avviene però solamente nel caso di
alberi in input di altezza 1.
Tutte le partizioni calcolate per ogni livello vengono poi inserite in una lista
ma ogni singola operazione di questo tipo di inserimento avviene con complessità costante, poichè i valori vengono continuamente aggiunti in coda e
non si necessita di ordinamenti. Tutti gli inserimenti avverranno pertanto in
un tempo totale pari a O(nk ).
La successiva operazione consiste nell’eliminare le ripetizioni all’interno della
lista calcolata. A questo scopo si è deciso di inserire tutti i nodi all’interno di
un BST, come quello utilizzato in precedenza per l’algoritmo del MajorityRule Consensus, in cui si teneva traccia del numero di ripetizioni.
In questo caso è possibile, con un tempo massimo di log(h) per ogni nodo eliminare qualsiasi ripetizione che viene infatti in esso trattata come
un incremento della frequenza, dove con h viene intesa l’altezza del Binary Search Tree. Tale processo avviene quindi con una complessità totale pari
a O(nk log(h)).
L’ultima operazione consiste nel preparare la coda di priorità dalla quale
verrà poi ricostruito l’albero finale. Tale operazione avviene con una semplice
visita del BST ed il successivo inserimento in uno Heap Binario. Considerando che la prima viene risolta con complessità lineare e che in quest’ultimo
il singolo l’inserimento avviene con in tempo O log(n), la complessità totale
risulta essere pari a O(n log(n)).
Riassumendo le complessità incontrate sono:
1. l’inserimento di tutti i nodi nei k minHeap diversi avviene in tempo
CAPITOLO 4. WEBCONSENSUS
110
pari a O(nk log(n));
2. la rimozione di tutti gli elementi dai k minHeap nell’ordine imposto
equivale a O(nk log(n));
3. il calcolo delle partizioni prodotto per i cluster degli alberi corrisponde
a O(nk );
4. l’eliminazione delle ripetizioni dei valori avviene con complessità uguale
a O(nk log(n));
5. la definitiva costruzione della coda di priorità con i valori preso dal
BST avviene in tempo O(n log(n)).
Come si può vedere la complessità asintotica totale dell’algoritmo per il calcolo dell’Adams consensus tree viene dettata dal punto 4, anche se esso è un
valore pessimistico anche per essere imposto come limite superiore. Infatti
ciò implicherebbe che tutte le intersezioni calcolate risultino non nulle, cosa
che difficilmente avviene. Si noti infatti come l’intersezione tra tutte le foglie
dia come risultato sempre un’intersezione nulla.
Capitolo 5
Conclusioni
Argomenti principali di questa tesi sono i metodi di inferenza di alberi filogenetici e i metodi di confronto tra alberi filogenetici basati su alberi del
consenso (consensus trees). Gli obiettivi che la tesi ha realizzato sono la trattazione teorica dei principali metodi di inferenza di alberi filogenetici e di
costruzione di consensus tree, e l’implementazione di questi ultimi nell’applicazione WebConsensus.
Nella prima parte della tesi, si è fornita una descrizione dettagliata dei principali metodi utilizzati per inferire alberi filogenetici. In particolare, si è descritto come tali metodi, tutt’oggi in continuo sviluppo, partano tutti da
alcuni presupposti comuni, come ad esempio l’inizio dell’elaborazione da uno
stesso formato dell’insieme di dati, l’elaborazione delle sequenze in base alle
matrici delle distanze, o la ricostruzione di un risultato seguendo una regola
comune, utilizzando le tecniche di clustering o di ottimizzazione.
Si è quindi fornita la naturale e spontanea classificazione dei metodi per inferire alberi filogenetici.
Un’estensione interessante di questi argomenti, che però non rientra negli
scopi della tesi, potrebbe essere lo studio di tecniche avanzate di inferenza di
alberi filogenetici, con l’obiettivo di estendere o adattare di conseguenza la
classificazione utilizzata.
I diversi metodi di inferenza di alberi filogenetici, a fronte di uno stesso insie111
CAPITOLO 5. CONCLUSIONI
112
me di sequenze di ingresso, forniscono in generale alberi filogenetici distinti.
Anche uno stesso metodo può generare più di un albero candidato. Diventa quindi importante cercare di confrontare gli alberi ottenuti e di costruire
una loro generalizzazione che riassuma le informazioni presenti negli alberi
di partenza.
A questo scopo vengono utilizzati i Consensus Trees ovvero alberi che indicano quanto bene si combinano tra loro le informazioni tratte da una collezione
di alberi che rappresenta le stesse unità tassonomiche.
I principali metodi di costruzione di un consensus tree derivano tutti dal metodo dello Strict Consensus, che impone che tutte le informazioni risultino
replicate in tutti gli alberi di partenza per essere inserite nell’albero di consenso finale. Rilassando in vari modi questa condizione, si crea una famiglia
di metodi tra i quali si può scegliere il più adatto a rappresentare le informazioni contenute negli alberi di partenza.
La tesi presenta solamente i metodi principali di costruzione di alberi del consenso. Tecniche di consensus avanzate vengono solamente accennate, anche
se potrebbero costituire un interessante approfondimento di questo lavoro di
tesi.
Accanto alla trattazione teorica dei metodi di costruzione di consensus tree, la
tesi presenta anche l’applicazione WebConsensus, ovvero l’implementazione
dei principali metodi di costruzione di consensus tree fornita come web service all’utenza internet. In particolare, WebConsensus implementa i metodi
dello Strict Consensus, del Majority Rule Consensus e dell’Adams Consensus.
Per ciascun algoritmo implementato viene calcolata la complessità asintotica. L’applicazione è composta da un insieme di classi Java collegate a pagine
web dinamiche scritte in PHP.
Questa prima versione di WebConsensus potrebbe essere estesa includendo
maggiori funzionalità, quali ad esempio:
• la possibilità di un maggiore numero di tecniche del consensus tra quelle
trattate in questo capitolo, da aggiungere a quelle già implementate;
• modellare la struttura di WebConsensus per estendere il discorso al
CAPITOLO 5. CONCLUSIONI
113
calcolo del consensus attraverso le tecniche di subtrees e supertrees;
• la possibilità di scelta di un numero maggiore di opzioni o↵erte dal
tool di visualizzazione grafica Phylodendron, integrate nell’interfaccia di WebConsensus, quale ad esempio la stampa degli alberi su più
formati di file;
• la possibilità di visualizzazione multipla non solo del risultato, bensı̀
anche degli alberi fondamentali inseriti, per poter avere un immediato
riscontro grafico tra questi ultimi ed il risultato ottenuto;
• la possibilità di inserimento di alberi in altri formati oltre a quello
Newick utilizzato da WebConsensus, come ad esempio un formato xml
per la descrizione degli alberi;
• dotare l’applicazione di un pacchetto autoinstallante comprendente anche l’installazione parallela di Phylodendron;
• l’affiancamento di un applicativo per inferire alberi filogenetici da un
insieme di sequenze/matrici delle distanze per calcolare ad un eventuale
risultato ambiguo l’elaborazione di WebConsensus.
Ringraziamenti
Non poteva mancare nella presente tesi un caloroso ringraziamento a tutte le
persone che hanno contribuito al suo sviluppo aiutandomi non solo dal punto
di vista tecnico ma anche dal punto di vista umano.
Un doveroso ringraziamento va alla dottoressa Marta Simeoni, che sin dall’inizio mi ha aiutato a sviluppare questa tesi. La disponibilità nell’o↵rirmi
consigli e direzioni da seguire nonchè la tempestività nel chiarire i miei dubbi
e le mie incertezze sono solo alcuni dei motivi di questo spontaneo ringraziamento.
Non da meno, un caloroso ringraziamento va a Federica, che da sempre mi
ha sostenuto e incoraggiato nei momenti di maggior sconforto e soprattutto
mi ha sopportato in questi mesi di preparazione. Un grazie di tutto cuore
alla persona che più di chiunque altro ha sempre creduto alla realizzazione
di questa tesi.
Un dovuto ringraziamento va anche alla mia famiglia poichè in qualche modo
è anche grazie a loro se questa tesi è stata sviluppata. In particolare ringrazio
i miei genitori, mia sorella e Paolo.
Non poteva infine mancare un ringraziamento agli amici ritrovati in questi
tre anni, compagni di progetti e di lavoro, che da sempre hanno creduto nelle
mie possibilità.
114
Bibliografia
[1] G. Valle, M. Helmer Citterich, M. Attimonelli, G. Pesole
Introduzione alla Bioinformatica
Zanichelli, 2003
[2] D. W. Mount,
Bioinformatics, Sequence and Genome Analysis
Cold Spring Harbor Laboratory Press
[3] A. D. Baxevanis, B. F. Francis Ouellette
Bioinformatics, A practical guide to the analysis of genes and proteins
Second Edition, Wiley Interscience
[4] R. Durbin, S. Eddy, A. Krogh, G. Mithison
Biological Sequence Analysis. Probabilistic models of proteins and nucleic acids
Cambridge University Press, 1999
[5] Other Methods
http://helix.biology.mcmaster.ca/721/outline2/node51.html
[6] M. Thollesson
Tree Selection Criteria
http://artedi.ebc.uu.se/course/BioInfo-10p-2001/Phylogeny/
Phylogeny-Criteria/Phylogeny-Criteria.html
115
BIBLIOGRAFIA
116
[7] Models of character evolution under parsimony
Utah State University
http://www.biology.usu.edu/biol6750/Lecture%205.htm
[8] Anatomy of Parsimony
http://www.science.siu.edu/Plant-Biology/
PLB449/DLN.449lectures/AnatomyParsimony.htm
[9] F. Opperdoes
The Neighbor-Joining Method
http://www.icp.ucl.ac.be/~opperd/private/neighbor.html
[10] Fitch & Margoliash
http://ftp.cse.sc.edu/bioinformatics/notes/020307patel.doc
[11] R. Page
Introduction to Tree Building
http://http://taxonomy.zoology.gla.ac.uk/~rdmp1c/teaching/
L4/Evolution/Session2/treebuilding.pdf
[12] D. Bryant
Building trees, hunting for trees and comparing trees: Theory and methods in phylogenetic analysis
PhD thesis, University of Canterbury, 1997
[13] D. Bryant
A Classification of Consensus Methods for Phylogenetics
DMACS Series in Discrete Mathematics and Teorical Computer Sciences - School of computer science and Department of Mathematics and
Statistics, McGill University, Montréal, Québec.
[14] M. J. Fouquette
Lecture Outlines: Calculating consensus trees
Course Material
BIBLIOGRAFIA
117
http://lsvl.la.asu.edu/bio470/jfouquette/Outlines/
016.consensus.html
[15] T. Y. Berger-Wolf
Online Consensus and Agreement of Phylogenetic Trees
350-361 Electronic Edition
[16] M. Steel, A.W. Dress, S. Bocker
Simple but fundamental limitations on supertree and consensus tree
methods
Syst Biol. 2000 Jun;49(2):363-8
[17] E. N. Adams III
Consensus techniques and the comparison of taxonomic trees
1972, Systematic Zoology 21:390-397
[18] V. Berry, O. Gascuel
Inferring evolutionary trees with strong combinatorial evidence
Theoretical Computer Science , 2000, Vol.240, n 2, pp. 271-288
[19] J. Felsenstein
PHYLIP
Department of Genome Sciences and Department of Biology at the
University of Washington
http://evolution.genetics.washington.edu/phylip.html
[20] D.G. Gilbert
Phylodendron - an application for phylogenetic tree drawing
version 0.8, beta January 1999, Indiana University Biology Department
http://iubio.bio.indiana.edu/soft/molbio/
java/apps/trees/phylodendron-doc.html
[21] M. Fowler
UML Distilled - A Brief Guide to the Standard Object Modeling
BIBLIOGRAFIA
Language
Third Edition, Addison Wesley
118