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