Algorithmique et bioinformatique : Cours

Telechargé par BOUAZZA LYAS
Algorithmique et bioinformatique
Introduction
Alignement de deux séquences
Alignement d'une séquence sur une
base de données
Alignement multiple
Phylogénie
Phylogénie : méthode de
Parsimonie
Calculs de la distance entre deux
séquences
Méthodes de distances
Notes sur l'implémentation des
algorithmes de reconstruction
phylogénétique
Maximum de vraissembalnce et
phylogénie
Simulation de Monte-Carlo à l'aide
de chaines de Markov (MCMC)
Recherche de mot dans un texte
Recherche de mot dans un texte :
indexation d'un texte
Chaines de Markov cachées
Strucure secondaire de l'ARN et
grammaires stochastiques (SCFG)
Bibliographie (livres)
Introduction
Dans ce document, nous présentons les principaux algorithmes utilisés en
bioinformatique : il s'agit surtout des manipulations de séquences (comparaison (ou
alignement) de deux séquences, comparaison d'une famille de séquences), de
reconstruction phylogénétique (construction d'un arbre qui décrive le mieux les
données dont on dispose), de manipulation de chaines de caractères (recherche dans
un texte) ou de texte (indexation d'un texte ou d'un génome). Au cours de notre
voyage dans le domaine de la bioinformatique, nous constaterons que la notion de
graphe est omniprésente (arbres phylogénétiques, chaines de Markov, automates
probabilistes, chaines de Markov cachées, SCFG, etc.) ; nous découvrirons aussi un
peu de statistiques (tests statistiques, p-valeur, estimateur du maximum de
vraissemblance, méthodes bayesiennes, simulation de Monte-Carlo à l'aide de chaines
de Markov, etc.)
(Il manque quelques illustrations -- je ne suis pas vraiment doué en dessin --, mais
j'espère que c'est quand-même compréhensible.)
(Il y a aussi quelques passages qui mériteraient d'être (ré)écrits (en particulier celui
sur les E-valeurs) -- mais comme les journées n'ont que 24 heures, ils resteront
comme ça.)
Plan prévisionnel
Alignement simple
Dotplot
Programmation dynamique : alignement global
Variantes : Alignement local, semi-global
Matrices BLOSUM et PAM
Heuristiques : fasta, blast
Interprétation statistique du résultat
Alignement multiple
Scores : SP, entropie minimale, arbre
Programmation dynamique, MSA
Étoile
UPGMA (phylogénétique rudimentaire)
Multalign
Consensus, PSSM
Chaines de Markov
Introduction
HMM (Modèles de Markov cachés)
Algorithme forward
Algorithme de Viterbi
Algorithme Forward-Backward, aka Baum-Welch, aka EM
HMM pour décrire un profil
HMM pour repérer introns et exons
Phylogénétique
Méthodes de distance : UPGMA, NJ
Parcimonie
Maximum de vraissemblance
Recherche de motif dans un texte
Automate fini, expressions régulières
Recherche de mot dans un texte
Algorithme Naïf
Algorithme de KMP
Algorithme de Boyer-Moore
Trie
Arbre de suffixes
Liens préfixes
Algorithme de McCreight
Algorithme d'Ukkonen
Structure secondaire des ARN
Algorithme de Nussinov-Jacobson
SCFG (HMM=Stochastic Regular Grammar)
Graphes
Dans un autre document...
Application : contigs, cartes de restriction
Optimisation
Bientôt -- peut-être
Exercices simples
(Pour les lecteurs qui auraient à enseigner l'algorithmique pour la bioinformatique.)
Vérifier qu'on a bien compris chacun de ces algorithmes, qu'on est capable de les
dérouler sur des exemple, qu'on est capable de les implémenter -- on a choisi de les
implémenter en C (ou parfois, selon mon humeur, en R ou en Python -- pour les
algorithmes gourmants en calcul, ça n'est pas une très bonne idée), mais n'importe
quel langage propre ferait l'affaire.
TP
Voici quelques exemples de sujets de TP -- pour ceux qui auraient à enseigner la
bioinformatique.
1. Implémenter l'algorithme d'alignement de Needleman-Wunsch.
S'il reste du temps : le modifier pour qu'il utilise une valeur différente pour la création
et l'extension d'une brèche. Le modifier pour qu'il calcule un alignement local ou
semi-local. Le modifier pour qu'il affiche tous les alignements optimaux, même s'il y
en a plusieurs. Le modifier pour qu'il calcule la p-valeur du test "l'alignement est dû
au hasard" (pour cela, mélanger les caractères d'une séquence, calculer le score de
l'alignement, recommencer, après quelques centaines d'itérations, comparer le score
initialement obtenu avec la distribution des scores après permutation).
2. Implémenter l'algorithme UPGMA
S'il reste du temps : modifier le programme pour qu'il calcule un alignement multiple
à l'aide de l'arbre obtenu. Bootstrapper l'arbre.
3. Chaines de Markov
Prendre quelques gènes humains pour lesquels on connait la décomposition en introns
et exons. En déduire une chaine de Markov cachée, à deux états (intron et exon).
Implémenter l'algorithme de Viterbi qui utilise cette chaine pour prédire les introns et
les exons. Quelle est la qualité du résultat ? (Penser à la valisation croisée.)
Variante : Prendre quelques protéines appartenant à une famille. Calculer une chaine
de Markov (non cachée : les états sont les 20 acides aminés) qui reconnait cette
famille. Ecrire un programme qui dit si une nouvelle protéine appartient à la famille
ou pas (on donnera une p-valeur). Quelle est la qualité de cette prédiction (penser à la
valisation croisée) ? Peut-on l'améliorer avec des chaines de Markov d'ordre supérieur
?
4. Implémenter l'algorithme de Knuth-Moris-Pratt.
S'il reste du temps : implémenter l'algorithme de Boyer-Moore. Implémenter
l'algorithme d'Aho-Corasick.
5. Calculer naïvement l'arbre des suffixes d'un texte.
S'il reste du temps : implémenter l'algorithme de McCreight. A l'aide de simulations,
vérifier qu'il est linéaire (en temps) en la taille du texte. Y a-t-il une différence entre la
taille de l'arbre des suffixes des parties codantes et non-codantes du gènome ?
Comment peut-on l'expliquer ?
Examen
Voici un exemple de sujet d'examen.
1. Donner un algorithme naïf permettant de trouver les répétitions dans le mot
CGCTTACGCT (Indication : penser au dotplot). Quelle est sa complexité ?
2. Donner l'arbre des suffixes du mot CGCTTACGCT$. Pourquoi a-t-on ajouté un $ à
la fin du mot ?
3. Ajouter les liens suffixes de McCreight.
4. Comment utiliser cet arbre des suffixes pour trouver les répétitions dans ce mot ?
(Indication : comment peut-on interpréter les noeuds internes de l'arbre des suffixes ?)
Donner tous les facteurs répétés. Quelle est la complexité cet l'algorithme de
recherche de répétitions ?
5. Donner un algorithme de recherche de répétitions approchées dans un mot.
(Indication : penser à la programmation dynamique) (Autre indication : il y a aussi un
algorithme, sans programmation dynamique, qui repose sur un simple parcours en
profondeur.)
Solution :
1. Faire un dotplot de la chaine contre elle-même et chercher la diagonale la plus
longue (en dehors de la diagonale principale).
Remplissage du tableau : O(n^2)
Recherche de la diagonale la plus longue : O(n^2)
2.
--ACGCT$
--C
|--T
| |--$
| |--TACGCT$
|--GCT
| |--$
| |--TACGCT$
--$
--T
|--ACGCT$
|--$
|--TACGCT$
--GCT
|--$
|--TACGCT$
On ajoute un $ (n'importe quel caractère qui n'apparait pas dans la chaine convient)
afin qu'aucun suffixe ne soit préfixe d'un autre suffixe, i.e., pour que les feuilles de
l'arbre soient en bijection avec les suffixes. Si on ne fait pas ça, on obtient ce qu'on
appelle un "arbre des suffixes implicites".
3.
4. sous-chaines répétées = préfixes des noeuds internes.
C
CT
CGCT, CGC, CG
T
GCT, GC, G
Construction de l'arbre : O(n) (Ukkonen ou McCreight)
Recherche dans l'arbre (parcours en profondeur) : O(n) (Je rappelle que l'arbre est de
taille O(n).)
5a. Procéder comme pour l'alignement local, mais en initialisant le tableau de
programmation dynamique avec des zéros sur le première ligne, la première colonne
et la diagonale.
5b. Pour des répétitions de taille m avec 1 erreur, chercher les chaines répétées de
longueur au moins m/2 et essayer de les prolonger.
Alignement de deux séquences
1 / 116 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans l'interface ou les textes ? Ou savez-vous comment améliorer l'interface utilisateur de StudyLib ? N'hésitez pas à envoyer vos suggestions. C'est très important pour nous!