• Aucun résultat trouvé

Am´ elioration de l’algorithme pr´ ec´ edent

Le programme correspondant `a l’algorithme pr´ec´edent n´ecessite beaucoup de temps de calcul, surtout pour des exemples r´eels. On parle ici de plusieurs se- maines de calcul. Il est donc primordial d’am´eliorer la performance de l’algorithme. Nous pr´esentons ici une version plus performante la plupart du temps. Com- men¸cons par faire une ´evaluation sommaire des calculs que nous faisons pr´esentement, afin de voir comment on peut gagner du temps de calcul.

Les calculs pour ´evaluer si une coalescence de s´equences identiques est pos- sible sont simples, puisque seule la multiplicit´e des s´equences est un crit`ere: il suffit de consulter le vecteur contenant la multiplicit´e des s´equences. Pour ´evaluer si des coalescences de s´equences de diff´erents types (Cijk) sont possibles, il faut v´erifier si une coalescence est possible entre les dτ s´equences (o`u dτ est le nombre

de s´equences diff´erentes `a l’´etape τ ), donc effectuer dτ(dτ − 1)/2 v´erifications.

Afin de savoir si une coalescence est possible pour une paire de s´equences, il n’y a pas d’autres solutions que de comparer un `a un tous les marqueurs, c’est-`a-dire faire L comparaisons au maximum. En effet, quand on compare si deux s´equences sont identiques, le nombre d’op´erations est au maximum L, car si l’on constate que le second marqueur, par exemple, est diff´erent, on sait que les s´equences sont diff´erentes, quelle que soit la suite des s´equences. Le nombre d’op´erations associ´e `

a la v´erification des ´ev´enements de coalescence de s´equences de types diff´erents est donc L× dτ(dτ − 1)/2. Par exemple, pour la premi`ere ´etape dans le cas de

l’exemple D, on a 105 coalescences `a v´erifier (d0=15), et puisque L = 6, le nombre d’op´erations n´ecessaires est donc de 630. Le mˆeme calcul dans le cas de l’exemple E nous donne 42 090 (dτ = 61 et L = 23). Si c coalescences sont possibles, il

faut alors d´eduire la nouvelle s´equence pour chacun des c ´ev´enements, et voir si elle existe d´ej`a ou non: nous ajoutons ainsi c× dτ× L op´erations (au maximum).

´

Evidemment, les ordinateurs modernes calculent rapidement, mais il faut pren- dre en consid´eration qu’un seul graphe peut n´ecessiter de quelques dizaines `a quelques milliers d’´etapes pour sa construction, et que des centaines de milliers, voir des millions de graphes sont n´ecessaires afin d’´evaluer la vraisemblance.

Les calculs n´ecessaires pour ´evaluer les ´ev´enements de mutation possibles demandent moins de temps. En effet, une mutation n’est possible que si le site mutant est unique. Un vecteur d´enot´e par V , de dimension L, contenant la somme (pond´er´ee par les multiplicit´es des s´equences) en colonne de Y nous informe si une mutation est possible:

Vl =

d



i=1

Si un ´el´ement du vecteur V est 1, alors une mutation est possible; il suffit de chercher quelle s´equence poss`ede la mutation, ce qui repr´esente dτ×L op´erations

au maximum. `

A moins que l’on n’utilise la m´ethode approximative pour les recombinaisons (comme le pr´esente la section 3.11), chaque s´equence peut recombiner `a chaque intervalle si celui-ci est ancestral. Pour chaque recombinaison, il est n´ecessaire de cr´eer temporairement les s´equences parentales, afin de trouver leur multiplicit´e. Une approximation est que, pour chacune des dτequences, L−1 recombinaisons

sont possibles, et `a chacune d’elle, 2L op´erations sont n´ecessaires pour v´erifier si les parents existent. Donc un nombre d’op´erations total de l’ordre de dτ × (L −

1)× 2L qui donne pour la premi`ere ´etape de l’exemple D, 900 op´erations, et 61 732 pour celle de l’exemple E.

Le nombre d’op´erations n´ecessaire pour ´evaluer tous les ´ev´enements possibles et leur probabilit´e ´etant consid´erable, une solution a ´et´e cherch´ee afin de dimin- uer le temps de calcul. Comme nous l’avons vu, `a chaque ´etape de la construction du graphe nous recalculons tous les ´ev´enements possibles. Or, entre deux ´etapes successives de la construction d’un graphe, la liste des ´ev´enements possibles est presque identique. Par exemple, si `a l’´etape τ , l’´ev´enement C2,65 est possible, il est probable qu’il le soit encore `a l’´etape τ + 1, car parmi tous les ´ev´enements possibles, un seul est choisi, et celui-ci ne modifie que trois s´equences au maxi- mum (dans le cas d’une recombinaison ou d’une coalescence). Si nous prenons la liste des ´ev´enements possibles aux ´etapes 4 et 5 de l’exemple de la section 4.3, sept ´ev´enements sont possibles `a chacune de ces deux ´etapes, mais un seul est diff´erent. De fa¸con g´en´erale, parmi tous les ´ev´enements possibles `a l’´etape τ , la plupart sont encore possibles `a l’´etape τ + 1. Notons par contre que leur proba- bilit´e a chang´e. Nous modifions donc l’algorithme pour ne pas avoir `a recalculer syst´ematiquement tous les ´ev´enements possibles `a chaque ´etape. Pour cela, nous modifions la liste des ´ev´enements d’une ´etape `a l’autre. Il suffit de pr´evoir toutes les cons´equences qu’un ´ev´enement a sur la liste des ´ev´enements possibles.

`

A la premi`ere ´etape de la reconstruction du graphe, il faut commencer par ´

etablir une liste des ´ev´enements possibles en utilisant la m´ethode pr´ec´edente. Une fois l’´ev´enement choisi, il faut mettre `a jour les param`etres et donn´ees avec le moins d’op´erations possibles. Dans le cas d’une coalescence de s´equences de type identique Ci, il suffit de mettre `a jour la valeur de ni (qui diminue de 1). Si

ni est 1 (nous noterons ni la nouvelle multiplicit´e de la s´equence i apr`es qu’un ´

ev´enement ait lieu), il faut aussi retirer l’´ev´enement en question de la liste des ´

ev´enements possibles, puisqu’une coalescence identique de cette s´equence devient impossible, et v´erifier si de nouvelles mutations sont possibles. En effet, le fait de changer la multiplicit´e de la s´equence peut cr´eer de nouveaux ´ev´enements de mutation.

Si l’´ev´enement choisi est une coalescence de s´equences diff´erentes Cijk, il faut g´en´erer la s´equence k, `a moins qu’elle n’existe d´ej`a; si ni = 0 (nj = 0), il faut enlever (ou modifier) tous les ´ev´enements impliquant la s´equence i (j); il est en effet possible qu’il existe un autre ´ev´enement de coalescence impliquant une des s´equence i ou j. Si ni = 1 (nj = 1), il faut supprimer les ´ev´enements de coales-

cence Ci et Cj qui ´etaient dans la liste des ´ev´enements possibles. Si une nouvelle

equence k est cr´e´ee, c’est-`a-dire si nk = 1, il faut v´erifier si une coalescence est possible entre la s´equence k et les dτ − 1 autres s´equences. Il faut ´egalement

v´erifier si la nouvelle s´equence k est impliqu´ee dans d’autres ´ev´enements: par ex- emple, s’il existe un ´ev´enement Cikj mais que la s´equence k n’existait pas encore, alors il faut recalculer la probabilit´e de l’´ev´enement. Si nk = 2, il faut ajouter un ´

ev´enement de coalescence Ck. Enfin, il faut v´erifier si l’´ev´enement en question a

des implications sur les ´ev´enements de mutation: de nouvelles mutations peuvent ˆ

etre possibles.

Dans le cas d’une mutation Mij, il faut retirer les ´ev´enements o`u la s´equence i est impliqu´ee et enlever la s´equence i du vecteur des s´equences, puisque sa multiplicit´e est maintenant nulle. Si nj = 1, c’est-`a-dire que la s´equence j est une nouvelle s´equence, il faut v´erifier si de nouvelles coalescences de s´equences

de types diff´erents sont possibles, et si cette nouvelle s´equence est impliqu´ee dans d’autres ´ev´enements. Finalement, si nj = 2, il faut ajouter l’´ev´enement Cj `a la

liste des ´ev´enement possibles.

Pour un ´ev´enement de recombinaison Rjki , il faut effacer la s´equence i et tous les ´ev´enements qui y sont reli´es si ni = 0. Si ni = 1, il faut enlever l’´ev´enement Ci de la liste des ´ev´enements. Si nj = 1 (nk = 1), il faut v´erifier si de nouvelles

coalescences de s´equences diff´erentes impliquant la s´equence j (k) sont possibles, et si parmi les ´ev´enements possibles, certains impliquent les nouvelles s´equences j et k. Enfin, si nj = 2 (nk = 2) il faut ajouter l’´ev´enement Ci (Cj).

Ce nouvel algorithme donne des r´esultats concluants: il est plus rapide, de l’ordre d’une fois et demi `a deux fois, que le pr´ec´edent.

Documents relatifs