Après la petite histoire de l’analyse des séquences d’ADN, voici un tutoriel pour apprendre quelques trucs et astuces dans ce domaine.
Biologiste en mal de connaissances de programmation ou pro de R, vous trouverez ici de quoi vous amuser avec un fichier Fasta ou un Bed.
Nous allons voir comment faire un alignement multiple de séquences (voir ici pour un état de l'art des logiciels existants), produire un logo, analyser les motifs enrichis dans des pics de CHiP, et plus encore. Vous aurez la possibilité de travailler soit avec des interfaces web, soit avec des lignes de codes R et différentes librairies Bioconductor (que nous vous avions déjà présenté).
Vous pouvez télécharger l'archive contenant les fichiers nécessaire pour le tutoriel ici.
Vous avez dit Fasta ?
Un Fasta est un fichier texte contenant une ou plusieurs séquences d’ADN, ARN ou acides aminés. Chaque séquence se présente sous la forme suivante :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
> ;sequence_inconnue GCACTGGGATGGGTTTTCCTTCTTGAGGTGTCAAGCTTCGGCTCCTTTGCCAAGATGGCGGCCCTGGCTC CCATGGAGGTAGCGATTGTGCAGCACCTCTGGCCCAGGGGCCGTCTTACAGCCACGGCCTACCCGCGCAA AGCGGAAGACACATTGGGCAGCCTTTACATTTTCCATCCAAGAAAGGGCGCCTCGGTTTTGAAGCTAAAG AGCACCTCTGCCAAAATGGTGACCGTGTGGCGTCACTGCTCTTTACCAAGATGGCGGCGAGAGACTTCCG GCACGCGCTTCCCCAATCAGAGATCTCCAAGAGGTCAGGCAGAGGAGACCGCCCTCGGAGTCCAAGTGCT GCGCGATCGGCTGGGGGAGAGAATGGGGTGGAGCCACGGCAGCCTCAGCTCCGATCAGAAGTGCCAAGCG CTGGCACCTGTGGGGGAGCAAAAGTTACTTCCTCGCACCCCAAAGCAACACCATAACACCTTACTCCCCA ACCCCCAGGCCCCTAAACCGTAGCGTGCGGCGCGAGGTAGGGGGCACGGTCCCAGAGTCGCCCCAGTCTG CCAAAGGGGCGGGCAGCTTAGGGGCAGGTCCGCGCGGCGGCTGCACTGTCACCCCCACGCCCCTCTCCTG TCCTAGGGGGACCGGCCACGTGTTTCTCTTGGAGACCCGGGGCTCGCCCTGGGAACAGCTGGAGGGAGCT AAACGCTGACGTTGTAAAGATGCGTGTTTTGTTTTATTTGGAGGGGCAGAGGGGTCCCTGGAACTCAGAA AGAAGGCAGAGCGAGGCACTGAGCCTGGAGCAGCAAATGTCAAGATTTGGGGGAGGGGCCTCCGCGGGGA GCTTGGATGCTGGCCCCGAAGGGGGTGGAAGGAGAGGTCAGGAGTTTGGGGTAAGAGGAGGGCGGACTTC GCCAGCAACTTACTATTCCGTCTGCAACTTGCTTCTAGGCCTGCACACACCCCCTCCCGGCCCCGCAAGG CTTCCTTAATCACAATTTTTTTCTTTTTTCTTTTTTTTTCTTTTTTTTTTTTAAGTGCAAAGAAACCCAG CTCGCTAAGAGGGTTTTGCATTCGCCGTGCAACTTCCTCCGAATGTGAGCGCGCTGGCAGGCAGGGAGGG AGCGGTGGGGGGGGGGGGGGGAGGTTTGAACTTGGCAGGCGGCGCCTCCTGCTGCCGCCGCCGCCGCTGC TGCCGCCTCCTCTCAGACTCGGGGAAGAGGGTGGGGGACGATCGGGGCGCGGGGGAGGGTGGGTTCTGCT TTGCAACTTCTCCCGGTGGCGAGCGAGCGCGCGCGCAGCGGCGGCGGCGGCAGCGGCGGCGGCTGCAGAC GGGGCCGCCCAGACGATGCGGGGGTGGGGGACCTGGCAGCACGCGAGTCCCCCCCCGGGCTCACAGTATG TATGCGCTGACCCTCTGCTCTGCCCTCCCGTCCCCTCCCCAAGCCTCCCCCCACCCCGAGGGCGTGTCTG CCGTCCTGTCCCGAGAGCGGCCAGGGCTCTGCGGCACCGTTTCCGTGCCATCCCGTAGCCCCTCTGCTAG AGTGACACACTTCGCGCAACTCGGCAGTTGGCGGACGCGGACCACCCCTGCGGCTCTGCCGGCTGGCTGT |
Le signe ‘>’ représente la ligne avec le nom de la séquence. Il contient en général un identifiant ou la localisation génomique de la séquence. Ce format est très utile car il est compatible avec beaucoup d’outils disponibles sur internet (interfaces web) et de nombreuses librairies de fonctions, notamment adaptées à R, Python et Perl. Vous pouvez télécharger des séquences en format Fasta depuis GeneBank et UCSC, entre autres.
Le format Bed est aussi un fichier texte qui contient plusieurs localisations sur le génome. A la base, un Bed contient trois colonnes : le nom du chromosome, la position de départ de la région et la position de fin de la région. Dans certains cas le fichier Bed contient un nom pour chaque région, un score (i.e. une quantification) ainsi que le brin positif ou négatif pour l’orientation génomique de la région.
1 2 |
chr22 1000 5000 cloneA 960 + chr22 2000 6000 cloneB 900 - |
Vous pouvez trouver d’autres informations sur les formats de données génomiques sur le site UCSC.
Donc maintenant que vous avez les bases, passons aux choses sérieuses !
Identification de la séquence suspecte
Allez sur le site de BLAST, et cliquez sur "nucleotide blast". Copiez et collez La séquence Fasta ci-dessus pour identifier la séquence sans la ligne avec le signe ’>’.
Alors ? Vous avez trouvé ?
Effectivement il s’agit d’une partie de la séquence du récepteur aux glucocorticoïdes.
Cette hormone est un outil thérapeutique important dans le cadre des maladies auto-inflammatoires et dans l’inhibition de la croissance cellulaire de nombreux cancers. Les glucocorticoïdes sont synthétisés et sécrétés par le système nerveux central et les glandes cortico-surrénales, suivant un rythme circadien. Ils sont impliqués dans la régulation de nombreux processus biologiques, entre autres la gluconéogenèse, la glycolyse, le métabolisme des acides gras et la réponse immunitaire et inflammatoire.
Les glucocorticoïdes se fixent aux récepteurs des glucocorticoïdes (GR) dans le cytoplasme de la cellule. Le complexe récepteur-ligand formé pénètre ensuite dans le noyau cellulaire où il se fixe à de nombreux éléments de réponse aux glucocorticoïdes dans la région du promoteur des gènes-cibles. Le récepteur, ainsi fixé à la molécule d'ADN, interagit avec les facteurs de transcription basiques, provoquant une augmentation de l'expression de gènes-cibles spécifiques. Ce processus est appelé transactivation. Le mécanisme inverse est appelé transrépression. Le récepteur hormonal activé interagit avec des facteurs de transcription spécifiques et prévient la transcription des gènes-cibles. Les glucocorticoïdes ont une action pléiotropique : ils activent certains gènes (transactivation) et en répriment d’autres (transrépression) en fonction de la structure des promoteurs ciblés et de leur action coordonnée avec des cofacteurs.
Dans un autre contexte, certains biologistes utilisent blastn pour savoir si un insert s’est correctement introduit dans un plasmide lors d’un clonage. L’on effectue cette vérification par électrophorèse sur gel d’agarose, puis amplification PCR et enfin par séquençage. Le Fasta issu du séquençage peut ensuite être analysé avec BLAST pour retrouver la position exacte de l’insert sur le plasmide produit.
Alignement multiple de sites GR et Logo
Rendez-vous maintenant sur le site de Clustal Omega pour tenter un alignement multiple de 17 séquences issues de mRNA de GR de différentes espèces et connaître la distance phylogénétique entre elles. Pour cela, il vous suffit de charger le fichier Fasta "GR_phylo.fasta" , de préciser qu’il s’agit d’ADN et de spécifier le format de sortie en Fasta. Vous verrez rapidement le résultat de l’alignement (ci-dessous, en format Clustal pour un petit intervalle).
En cliquant sur « phylogenetic tree » vous devriez avoir l’image suivante :
L’arbre permet des savoir quelles sont les séquences les plus proches. En utilisant ce type d’analyse, on peut comparer différentes espèces qui partagent certains gènes et ainsi retracer leur « histoire évolutive ». Par ailleurs, si vous désirez vous attarder un peu plus sur la construction de votre arbre et souhaitez une plus forte robustesse, je vous invite alors à consulter notre article sur la construction des arbres phylogénétiques.
On peut aussi utiliser l’alignement pour créer un logo avec webLogo pour savoir quelles sont les bases « conservées ». Voici le résultat pour la région 3500–3700 de l’alignement :
Dans cette analyse, nous pouvons observer 3 groupes de séquences GR d’espèces proches, au sens de la distance génétique. Le logo nous permet de constater la conservation de certaines régions de l’alignement multiple. Le but de cet exemple est de comprendre comment fonctionnent ces différentes interfaces web.
Analyse de motifs enrichis dans les pics de CHiP-seq du récepteur aux glucocorticoïdes (GR)
En général, lors d’analyses sur des données CHiP, nous avons plus de 1000 sites. L’analyse des séquences est alors plus compliquée car les alignements multiples sont trop coûteux en matière de calculs. D’autres algorithmes ont vu le jour pour répondre plus spécifiquement à cette question. Il s’agit d’algorithmes de recherche de motifs de novo (i.e. MEME) ou encore de scans de séquences à partir de PWM (i.e. FIMO).
Nous allons procéder à une analyse de donnés de 1000 pics de CHiP-seq de GR provenant d’un papier de G.Hager. Téléchargez le fichier "GSE46047_GR_1000peaks_mouse_liver_mm9.txt" contenant la localisation des pics (format .bed). (voir archive)
Allez sur UCSC et sélectionnez le génome de souris mm9. Cliquez ensuite sur le bouton « add custom track » et chargez le fichier de localisation des pics. Allez ensuite sur l’onglet « Tables » pour convertir le fichier en Fasta.
Sauvez ensuite le fichier Fasta sous "GR1000.fa", puis allez sur MEME-CHiP pour soumettre le Fasta à la recherche de motifs de novo. Utilisez les paramètres suivants :
L’exécution du programme MEME peut être assez longue, mais vous recevrez par e‑mail le lien qui vous fera accéder à votre résultat. MEME-CHIP vous fournira les motifs enrichis et leur distribution par rapport au centre des pics. La documentation de MEME-CHIP contient beaucoup d’informations permettant de comprendre les résultats de l’analyse. Nous allons voir maintenant comment faire à peu près la même analyse en utilisant R.
Un peu de code R pour l’analyse de séquences ADN
Dans un premier temps il faut installer différents packages R :
Le package BSgenome.Mmusculus.UCSC.mm9 fait 750MB, donc l’installation risque de prendre un peu de temps ! Le café s’impose à ce stade…
1 2 3 |
source("http://bioconductor.org/biocLite.R") biocLite(“rGADEM”,” MotIV”,” seqLogo”,” Biostrings”,” motifStack”,” BSgenome.Mmusculus.UCSC.mm9”,"GenomicRanges") install.packages(“muscle”) |
Puis chargez les bibliothèques :
1 2 3 4 5 6 7 8 |
library(rGADEM) library(MotIV) library(seqLogo) library(Biostrings) library(motifStack) library(muscle) library(GenomicRanges) library(BSgenome.Mmusculus.UCSC.mm9) |
Il faut ensuite charger les données des pics de CHiP-seq de GR :
1 2 |
BED=read.table("GSE46047_GR_peaks_mouse_liver_mm9.txt",header=FALSE,sep="\t") gr=GRanges(seqnames=as.factor(BED[,1]), ranges=IRanges(start=as.numeric(BED[,2]), end=as.numeric(BED[,3]))) |
Les commandes suivantes permettent de créer 2 fichiers Fasta(20 sites et 1000 sites) à partir des pics (fichier BED, si jamais vous n'avez pas de fichier FASTA déjà à disposition).
1 2 3 4 5 6 |
gr_fasta_1000=getSeq(Mmusculus, gr[1 :1000]) names(gr_fasta_1000)=paste(as.character(BED[1 :1000,1]),"_",as.character(BED[1 :1000,2]),"_",as.character(BED[1 :1000,3]),sep="") writeXStringSet(gr_fasta_1000[1 :1000], file="GR1000.fa") gr_fasta_20=getSeq(Mmusculus, gr[1 :20]) names(gr_fasta_20)=paste(as.character(BED[1 :20,1]),"_",as.character(BED[1 :20,2]),"_",as.character(BED[1 :20,3]),sep="") writeXStringSet(gr_fasta_20[1 :20], file="GR20.fa") |
Nous allons faire un alignement multiple sur le fichier Fasta contenant 17 séquences de mRNA d’espèces différentes de GR grâce à “muscle”.
1 |
muscle("GR_phylo.fasta" , out = "aln_GRphylo.fa") |
En utilisant l’alignement, nous pouvons faire une analyse de la distance en terme de similarité entre les séquences.
1 2 3 4 5 6 7 8 9 |
GR = readDNAStringSet("aln_GRphylo.fa", "fasta") get_names_phylo=function(name){ return(paste(unlist(strsplit(name," "))[2 :6],sep=" ",collapse=" ")) } names(GR)=sapply(names(GR),get_names_phylo) masim = sapply(names(GR), function(x) sapply(names(GR), function(y) pid(PairwiseAlignedXStringSet(GR[[x]], GR[[y]]), type="PID2"))) masim madist = 1-(masim/100) madist |
Le résultat de cette analyse peut être représenté sous forme de heatmap.
1 |
heatmap(madist,mar=c(20,20),sym=T) |
Un dendrogramme peut être obtenu comme suit :
1 2 3 |
par(mar=c(10,10,10,10)) disttree = hclust(as.dist(madist)) plot(as.dendrogram(disttree), edgePar=list(col=3, lwd=4), horiz=T,mar=c(10,10)) |
Le dendrogramme ainsi que la heatmap nous montrent que les séquences des 17 mRNA de GR ont une similarité relativement importante. On peut discerner 3 groupes, avec respectivement des séquences provenant d’espèces de poissons, de mammifère et un troisième groupe qui comporte des séquences mRNA de GR provenant de rat, de poule et de grenouille.
Le logo de l’alignement est obtenu comme suit.
1 2 3 4 5 6 7 |
par(mar=c(4,4,4,4),mfrow=c(2,1)) pfm=consensusMatrix(GR)[1 :4,3500 :3600] motif = new("pfm", mat=sweep(pfm,2,colSums(pfm),FUN="/"), name="GR mRNA alignment logo 3500:3600") plot(motif) pfm=consensusMatrix(GR)[1 :4,3600 :3700] motif = new("pfm", mat=sweep(pfm,2,colSums(pfm),FUN="/"), name="GR mRNA alignment logo 3600:3700") plot(motif) |
Le but de cet exemple est simplement de comprendre comment représenter un logo avec le package motifStack à partir d’un objet DNAStringSet provenant du package Biostrings.
Une analyse plus réaliste des données CHiP-seq de GR
L’analyse de séquences de CHiP GR implique, la recherche de motifs de novo. Cette analyse peut se faire sur un nombre plus important de sites. De plus elle permet de trouver des motifs de cofacteurs potentiels proches du site de liaison de la protéine GR. Cette analyse est possible grâce au packages rGADEM et MotIV. L’analyse est assez longue, donc vous pouvez lancer les commandes suivantes et sortir boire une bière avec des amis !
1 2 3 4 5 6 7 8 9 10 11 12 13 |
###rGADEM### BED=read.table("GSE46047_GR_peaks_mouse_liver_mm9.txt",header=FALSE,sep="\t") BED=data.frame(chr=as.factor(BED[,1]),start=as.numeric(BED[,2]),end=as.numeric(BED[,3])) rgBED=IRanges(start=BED[1 :500,2],end=BED[1 :500,3]) Sequences=RangedData(rgBED,space=BED[1 :500,1]) gadem=GADEM(Sequences,verbose=1,genome=Mmusculus) motifs = getPWM(gadem) print(motifs) ###MotIV### analysis.jaspar = motifMatch(motifs) summary(analysis.jaspar) plot(analysis.jaspar, ncol = 2, top = 10, rev = FALSE, main = "Logo GR CHiP 500 sites", bysim = TRUE) |
Vous devriez obtenir l’image ci-dessous. Le motif le plus enrichi est NR3C1, qui correspond aux sites de liaisons de la protéine GR. Nous trouvons d’autres motifs comme ESR2, motif de liaison des récepteurs à œstrogènes, et STAT3 et PPARG:RXR qui correspondent aux sites de liaison de cofacteurs connus de GR.
L’analyse de sites GR de CHiP montre un lien avec Stat3. De ce fait, nous pouvons analyser la distribution de sites de Stat3 et de GR autour du centre des pics de CHiP-seq grâce aux commandes suivantes :
1 2 3 4 5 6 |
f.NR3C1= setFilter( tfname="NR3C1", top=5, evalueMax=10^-5) f.Stat3 = setFilter (tfname="Stat3", top=5) f.NR3C1.Stat3 = f.NR3C1 | f.Stat3 NR3C1.filter = filter(analysis.jaspar, f.NR3C1.Stat3 , exact=FALSE, verbose=TRUE) NR3C1.filter.combine = combineMotifs(NR3C1.filter, c(f.NR3C1, f.Stat3), exact=FALSE, name=c("NR3C1", "Stat3"), verbose=TRUE) plot(NR3C1.filter.combine ,gadem,ncol=2, type="distribution", correction=TRUE, group=FALSE, bysim=TRUE, strand=FALSE, sort=TRUE, main="Distribution of NR3C1") |
Enfin nous pouvons voir combien de sites de liaison de GR chevauchent des sites de liaison de Stat3, et analyser ainsi la distance relative entre GR et Stat3.
1 |
plot(NR3C1.filter.combine ,gadem,type="distance", correction=TRUE, group=TRUE, bysim=TRUE, main="Distance between NR3C1 and CEBPA", strand=FALSE, xlim=c(-100,100), bw=8) |
C’est tout pour aujourd’hui ! Grâce à ces quelques lignes de codes et ces outils disponibles sur le web, vous pourrez analyser de manière spécifique et systématique vos données CHiP-seq et vos séquences.
Encore une petite remarque :
L’algorithme de BLAST est en général appelé en ligne de commande depuis R, à condition d’avoir l’outil installé et accessible depuis le terminal. Je n’ai pas trouvé de package pouvant l’exécuter autrement, donc n’hésitez pas à faire des suggestions (BoSSA n’a pas fonctionné). Vous pouvez invoquer BLAST depuis R avec les commandes ci-dessous (non-testées).
1 2 3 |
myPipe = pipe( "blastall ‑p blastp ‑i text.fasta ‑d data.fasta" ) results = read.table( myPipe ) colnames( blastResults ) = c( "QueryID",  ; "SubjectID", "Perc.Ident","Alignment.Length", "Mismatches", "Gap.Openings", "Q.start", "Q.end","S.start", "S.end", "E", "Bits") |
References :
1) Chromatin accessibility pre-determines glucocorticoid receptor binding patterns, Sam John, Peter J Sabo, Robert E Thurman, Myong-Hee Sung, Simon C Biddie, Thomas A Johnson, Gordon L Hager & John A Stamatoyannopoulos ,NATURE GENETICS, 2010
2) MEME-ChIP : motif analysis of large DNA datasets , Machanick P, Bailey TL.,Bioinformatics. 2011
3) GADEM : a genetic algorithm guided formation of spaced dyads coupled with an EM algorithm for motif discovery, Li L, J Comput Biol. 2009
4) An integrated pipeline for the genome-wide analysis of transcription factor binding sites from ChIP-Seq ,E Mercier, A Droit, L Li, G Robertson, X Zhang, R Gottardo (2011). PLoS ONE. 6(2): e16432. doi:10.1371/journal.pone.0016432
5) STAMP : a web tool for exploring DNA-binding motif similarities, S. Mahony, P.V. Benos, Nucl Acids Res, (2007) 35:W253-258
6) DNA familial binding profiles made easy : comparison of various motif alignment and clustering strategies, S Mahony, PE Auron, PV Benos, PLoS Computational Biology (2007) 3(3):e61
7) seqLogo : Sequence logos for DNA sequence alignments. R package Bioconductor
8) MotIV : Motif Identification and Validation. Eloi Mercier and Raphael Gottardo (2010). R package Bioconductor.
9) motifStack : Plot stacked logos for single or multiple DNA, RNA and amino acid sequence, Jianhong Ou, Michael Brodsky, Scot Wolfe and Lihua Julie Zhu ,R package Bioconductor.
10) Wikipedia, article glucocorticoïde
Un grand merci aux relecteurs : Wocka, Yoann M, nallias, Julien Delafontaine et Aline Jaccottet.
Les images utilisées pour les besoins de l'article sont toutes de l'auteur et sont disponibles en CC-by-SA 3.0.
Laisser un commentaire