Ants, Bees, Genomes & Evolution

@ Queen Mary University London

TP4: Analyse de donnees d'expression

Merci d'envoyer a demandez l'adresse les reponses aux questions en surlignees avec [TP4 Bioinfo] comme sujet. Vu qu'il necessite que plusieurs logiciels soient installes, il est conseille de le faire en salles Pol204.2 ou Bio1928.

Votre sujet de recherche sont les tissus musculaires. En particulier, vous voulez caracteriser le coeur d'un point de vue moleculaire.

A travers une recherche bibliographique vous trouvez une etude extensive des transcriptomes humains et murins. Peut-etre qu'il y aura des donnees interessantes! En 2004, Su et al., ont quantifie l'expression de genes au sein de 79 tissus humains et 61 tissus de souris a l'aide de puces a ADN. Pour l'Homme, ils se sont servis d'une puce Affymetrix basee sur la puce Affymetrix Human U133A. Dans l'article (tres cite) figure un lien vers les donnees brutes.

Mise en place des donnees

Telechargez le jeu de donnees Human U133A + GNF1H (MAS5-condensed).

Decompressez ce jeu de donnees. Depuis Excel, ouvrez le fichier de donnees GNF1Hdata.txt qui est au format texte, chaque colonne etant separee par une "tabulation". Essayez de comprendre le contenu du fichier.

Que represente chaque ligne? Chaque colonne?

Seuls certains tissus musculaires vous interessent. Dans un nouveau fichier Excel, regroupez les donnees concernant vos 5 tissus fetiches:

  • Heart
  • SmoothMuscle
  • CardiacMyocytes
  • SkeletalMuscle
  • Tongue

N'oubliez pas d'y coller aussi la premiere colonne, comportant les identifiants des sondes/genes (ex: 1007_s_at, 1053_at, 117_at...).

Et afin d'eviter des problemes lies a la transformation des donnees par la suite, toutes les cellules ayant la valeur 0 doivent etre remplacees par 1.

Enregistrez ce jeu de donnees reduit au format texte.

Normalisation des donnees

Vous savez que les donnees de puce a ADN se distinguent par leur variabilite (lies a l'efficacite de l'extraction d'ARNm, de l'incorporation et la degradation de fluorochromes, aux volumes de pipetage, a l'efficacite d'hybridation, du lavage post-hybridation...).

Pour tenter de garder seulement la variabilite biologique entre les puces Affymetrix que nous utilisons, elles ont ete normalisees avec l'algorithme standard d'Affymetrix, MAS5.0.

Visualisation des donnees

Ouvrez R, changez de repertoire de travail pour que le repertoire de travail soit celui ou se trouve votre jeu de donnees reduit. Chargez ce jeu de donnees reduit dans R

> data = read.table("myData.txt", sep="\t", header=T, row.names=1)

Verifiez que ca ait bien marche en regardant les 10 premieres lignes.

> data[1:10,]
          Heart Heart.1 CardiacMyocytes CardiacMyocytes.1 SmoothMuscle
1007_s_at  1872    2320            1867              2184         2081
1053_at     170     318             293               396          303
117_at      137     333             418               497          319
121_at     3957    4458            3674              5075         3925
1255_g_at   303     247             268               338          247
1294_at     570    1404             847              1159         1275
1316_at     675     358             171              1068          273
1320_at      70      75             269                98          133
1405_i_at   659     365              20                26           22
1431_at     242     222             159               683          188
          SmoothMuscle.1 SkeletalMuscle SkeletalMuscle.1 TONGUE TONGUE.1
1007_s_at           1932           1211             1171   2559     2741
1053_at              214             38              127    156       31
117_at               232            450              583    375      366
121_at              3335           2928             2733   3953     3107
1255_g_at            209            251              253    174      347
1294_at             1197            658              893    755      888
1316_at              276            354              245    721      488
1320_at              258            138              122    283      107
1405_i_at             23             80               42     42       29
1431_at              201             94              320    163      106

Le graphe boxplot(data) et les donnees boxplot(log(data), col=rainbow(n=20)) nous indiquent:

  • que le niveau d'expression est bas pour la plupart des genes
  • que les medianes des niveaux d'expression sont homogenes entre puces

Dans un cas reel on ferrait plusieurs autres analyses preliminaires pour valider la qualite des donnees. Plusieurs packages Bioconductor pourront nous aider.

Transformation des donnees

Nous avons des valeurs d'expression absolues pour chaque gene. Deux questions biologiques peuvent se poser:

  • au sein d'un tissus, quels genes sont les plus (ou les moins) exprimes?
  • quels genes sont differemment exprimes entre tissus?

On se penche sur la deuxieme. Il sera plus facile de travailler avec le log2 des donnees d'expression relatives. Avant de travailler sur notre jeu de donnees entier, reprenez l'exemple suivant sous Excel:

	gene	tissu A	tissu B	tissu C
	Gp-9	600	900	300
	actin	200	800	2400

Calculez le niveau d'expression moyen de chaque gene. Divisez chaque valeur d'expression par la moyenne du gene.

Prenez le logarithme en base 2. (vous trouverez la fonction log(,2) avec Inserer fonction dans Excel):

Dans R, effectuons la meme transformation sur le jeu de donnees entier:

> expressionMoyennePourChaqueGene = (data$Heart + data$Heart.1 + data$CardiacMyocytes + data$CardiacMyocytes.1 
  + data$SmoothMuscle + data$SmoothMuscle.1 + data$SkeletalMuscle + data$SkeletalMuscle.1 + data$TONGUE 
  + data$TONGUE.1) / 10
> dataRelative = data / expressionMoyennePourChaqueGene

> boxplot(dataRelative)

Ce boxplot des donnees relatives permet de mieux voir la distribution des donnees.

> dataLog2Relative = log2(dataRelative)
> boxplot(dataLog2Relative) 
Quel est l'interet d'utiliser des valeur relatives? L'interet de prendre le log?

Selection de genes permettant de differencier les tissus

5 tissus * 2 microarrays * plus de 33000 transcrits = beaucoup de donnees a analyser!

Pour travailler sur un jeu de donnees reduit, on va choisir les 200 genes qui differencient au mieux les 5 tissus. L'algorithme eBayes nous permet de le faire dans R. eBayes fait partie de BioConductor/limma qui est *la* reference pour le traitement de donnees de microarray. (attention on s'accroche).

> library(limma)

On precise que pour chaque tissus, on a deux microarrays, et on les nomme avec leurs initiales (H = heart, C = CardiacMyocyte...):

> design = model.matrix(~ -1 + factor(c(1,1,2,2,3,3,4,4,5,5))) 
> colnames(design) = c("H", "C", "Sm", "Sk", "T")

on precise que toutes comparaisons de tissus 2 a 2 doivent etre faites:

> contrast.matrix = makeContrasts(H-C, H-Sm, H-Sk, H-T, C-Sm, C-Sk, C-T, Sm-Sk, Sm-T, Sk-T, levels=design)

les parametres du modele sont ajustes en fonction de nos donnees:

> fit = lmFit(dataRelative, design)

les differences significatives sont recherchees. Attention, le B de eBayes() doit etre majuscule!

> eBayesResultat = eBayes(contrasts.fit(fit, contrast.matrix))

on trie les resultats par p-value du test de F:

> eBayesResultatTrie = eBayesResultat[order(eBayesResultat$F.p.value,decreasing=FALSE),]

on exporte les 200 genes qui differencient au mieux les tissus etudies vers un fichier texte:

> meilleursGenes =merge(eBayesResultatTrie[1:200,], dataLog2Relative, by.x=0, by.y=0)
> write.table(meilleursGenes, "top200genes-log2relative.txt",sep="\t", row.names=FALSE)

Clustering

Ouvrez le logiciel MeV. File / New Multiple Array Viewer. Load Data. Dans la barre de menu, sous File Format Descriptions, choissisez Tab-Delimited Multiple Sample Files (TDMS) *.*. Ouvrez votre fichier des 200 genes qui differencient au mieux les tissus. Important: il faut indiquer ou commencent les donnees d'expression. Cette cellule est tres loin a droite (cf la capture d'ecran suivante):

loin a droite ?
Que representent les lignes? les colonnes? le rouge? le vert? le noir?

Effectuez un clustering hierarchique des donnees. Bouton HCL. Le resultat se trouve dans la colonne de gauche. HCL / HCL Tree.

Que pouvez-vous dire par rapport a l'ordre des 10 echantillons?
Quels genes differencient la langue des autres muscles? Y -a-t-il des genes exprimes uniquement dans le coeur?

En cliquant sur une branche de l'arbre, vous pouvez n'en selectionner qu'une partie. Selectionnez le groupe de genes specifiquement exprimes dans le coeur). Click-droit puis Save Cluster vous permet d'enregistrer leurs donnees. Sous Excel, ne gardez que la liste des "genes" (Row.names) qui se terminent en _at. Il s'agit en fait d'identifiants Affymetrix. On ne gardera pas les identifiants qui commencent par gnf1h (ceux qui commencent par gnf1h sont des identifiants "maison" dont on ne se servira pas par la suite).

Votre liste de genes "coeur-specifiques" ressemblera a la suivante:

209111_at
207508_at
214836_x_at
201137_s_at
220734_s_at
215379_x_at
...
Joignez-la au compte-rendu

Test de sur- ou sous-representation de termes d'annotation fonctionnelle

Il est possible de tester si au sein d'une liste de genes, certaines categories Gene Ontology sont sur-representees par rapport a une reference.

Connectez-vous a DAVID. Dans la colonne de gauche, sous Upload / Step 1 collez votre liste de genes. Il s'agit d'identifiants Affymerix. AFFY_ID. C'est une Gene List. Une fois uploadee, rajoutez HG-U133A comme liste Background.

Functional Annotation Clustering.

Quels types de genes sont surrepresentes parmi les genes surexprimes dans le coeur?

Conclusion

Pourquoi ces genes sont-ils surexprimes dans le coeur? Emettez une hypothese biologique.

Regardez dans les donnees supplementaires du papier.

Comment ont ete obtenus les echantillons de tissus? Avez-vous une explication biologique alternative concernant les genes surexprimes dans le coeur? Que dire concernant le plan experimental?

Question bonus pour les rapides

Y a-t-il des genes exprimes significativement plus fortement dans la langue que dans tous des autres echantillons? Astuce 1: il faudra refaire un ajustement de modele lineaire avec:

> contrast.matrix = makeContrasts(T-H, T-C, T-Sm, T-Sk, levels=design)

Astuce 2: les fonctions decideTests(eBayesResultat) et ?apply sont tes amis.... summary() peut servir aussi.

Compte-rendu

Merci d'envoyer a demandez l'adresse les reponses aux questions en surlignees avec [TP4 Bioinfo] comme sujet.