====== R/Bioconductor: Utilisation des librairies affy() simpleaffy() ====== ===== Introduction ===== La librarie ''affy''[(:bioc_affy_qc)] est le point d'entrée de l'analyse des données Affymetrix dans R; c'est à travers elle que la lecture et la normalisation des données se font. Elle procure également certaines métriques de contrôle de la qualité: * Graphes M vs A * Graphes BoxPlot * Mesure de la dégradation des ARNm La librairie ''simpleaffy''[(:bioc_simpleaffy_qc)] quant à elle, est un //wrapper// (si quelqu'un à une traduction intelligente de ce terme (encapsuleur??), s.v.p., nous en aviser :-) ) qui permet une utilisation plus aisée de la librarie ''affy'', en l'accélérant grâce à du code C qui est exécuté en arrière-plan. ''simpleaffy'' utilise les données générées via la normalisation des données brutes par l'algorithme MAS5 implémenté via ''affy'' pour calculer des métriques de contrôle de la qualité, par exemple: * Bruit de fond moyen * Facteur de proportion * Proportion de gènes Présent/Absent * Rapport des sondes 3' sur 5' Dans cette section, nous utiliserons les méthodes de contrôle de la qualité obtenues en utilisant la fonction ''qc'' de ''simpleaffy''. Les fonctions de normalisation seront vu ailleurs. ===== Procédure ===== ==== Préparation et démarrage de R ==== * Créez un répertoire dans votre système de fichier afin d'y mettre tous les fichiers .CEL que vous voulez inclure. Copiez-y/transférez-y les fichiers .CEL * Pour faire une analyse de contrôle de qualité en utilisant ''simpleaffy()'', il faut démarrer avec une session R: # Tres dur a faire... % R * Dans une installation Impilo, vous pouvez utilisez l'interface graphique de la console R avec le menu ''Impilo > Analyse statistique > R GUI''. * Dans un cas comme dans l'autre, il vous faudra désigner un répertoire de travail, spécifiquement l'endroit où se trouve les fichiers .CEL. Cet endroit deviendra votre **workspace** (en language R): * **Méthode R GUI**: Il vous faut sélectionner le nouveau répertoire de travail grâce à la commande //File > Set Working Directory// * **Méthode console**: Utilisez la commande suivante: R> setwd("/path/to/cel/files") ==== Création de l'objet AffyBatch ==== **Note**: Cette méthode est commune à presque toutes les autres techniques d'analyse utilisant R/BioConductor. * Dans votre répertoire de travail, créer un fichier texte appelé ''covar_desc.txt''. Ce fichier doit contenir au minimum 2 colonnes. Comment ces colonnes sont formattées dépendra de la méthode utilisée pour construire l'objet ''AffyBatch'': * Méthode ''read.affy'': * Une première colonne **sans en-tête**, avec le nom des fichier, un par ligne. //Laissez la première ligne vide//! Elle correspond à l'en-tête des colonnes suivantes. * Une deuxième colonne avec en en-tête, le nom du paramètre (par exemple: classe) et pour chaque ligne, la valeur pour ce paramètre (pour continuer sur le même méthode, on aurait contrôle ou traitement_A). * Méthode ''ReadAffy'': * La première colonne **doit** contenir un en-tête. ''Nom_fichier'' fonctionnera très bien. * La deuxième colonne est construite commet pour la méthode ''read.affy''. * **ATTENTION!!** Cette méthode est un peu tata dans sa manière de gérer les associations entre nom de fichier et covariables. Elle lit les fichiers dans l'ordre naturel des noms dans le répertoire, quel que soit l'association avec le paramètre. Par conséquent, votre fichier ''covar_desc.txt'' doit avoir les noms des fichiers dans l'ordre naturel dans la première colonne et la valeur associée du paramètre ensuite. Si vous mettez, par exemple, les contrôles en premier et les traités ensuite, s'ils ne se suivent pas naturellement, vous aurez des résultats très bizarres... * Dans un cas comme dans l'autre, rien ne vous empêche de mettre plus de colonnes pour les co-variables supplémentaires. **Attention**: il vous faudra insérer un retour de chariot à la fin de la dernière ligne si vous ne voulez pas voir un avertissement de R: Warning message: In readLines(filename) : incomplete final line found on 'covar_desc.txt' * Pour créer un object ''AffyBatch'' appelé ''data'' en utilisant la méthode ''read.affy'' de ''simpleaffy'': # Charger la librarie R> library(simpleaffy) # Vous verrez des messages passés # à l'écran, montrant que affy() # est installé R> data<-read.affy(covdesc="covar_desc.txt") # Ca va prendre un certain temps... # La console revient R> * Pour créer un object ''AffyBatch'' appelé ''data'' en utilisant la méthode ''ReadAffy'' de ''affy'': # Charger la librarie R> library(affy) # Vous verrez des messages passés # à l'écran, montrant que affy() # est installé R> data<-ReadAffy(phenoData="covar_desc.txt") # Ca va prendre un certain temps... # La console revient R> ==== Utilisation des méthodes de contrôle de la qualité de simpleaffy ==== La classe ''simpleaffy'' étant un //wrapper// simplifiant/accélérant l'utilisation de ''affy'', seulement certaines des méthodes ont une application dans le contrôle de qualité. La plupart des ces méthodes donnent des valeurs numériques exportables mais la méthode ''plot'' procure un graphique très informatif sur l'état des données pour chaque puce. Comme ''simpleaffy'' appelle ''affy'' dans son exécution, il est aussi possible d'accéder aux méthodes de contrôle de la qualité disponibles dans ''affy''. * Comme ''simpleaffy'' utilise les données obtenues pour ou à la suite d'une normalisation via l'algorithme MAS5, il faut créer un objet ''ExpressionSet'' contenant les données normalisées provenant de notre objet ''data'': R> eset.mas5<-call.exprs(data,"mas5") * Il faut ensuite créer un objet de type ''QCStats'' (que nous appèlerons ''qcs'') qui contiendra toutes les données créées lors de la normalisation: R> qcs<-qc(data,eset.mas5) * Pour accéder aux informations, il faut utiliser une des méthodes d'accès disponible dans ''simpleaffy''. Voici ces méthodes: * ''ratios(qcs)'': rapport des sondes 5'-3' et 5'-M pour les sondes de contrôle de qualité * ''avbg(qcs)'': bruit de fonds moyen * ''maxbg(qcs)'': valeur maximale du bruit de fonds * ''minbg(qcs)'': valeur minimale du bruit de fonds * ''spikeInProbes(qcs)'': valeur des sondes témoins (//spiked-in//) * ''qcProbes(qcs)'': valeurs pour les sondes de contrôle de qualité utilisant actine et GADPH * ''percent.present(qcs)'': pourcentage de probesets appelés présent * ''sfs(qcs)'': facteur d'équivalence * ''target(qcs)'': équivalence des cibles * Toutes ces méthodes retournent un objet qui par défaut est affiché à la console. Si vous voulez sauvegardez les données dans un fichier, il vous faudra utiliser la manière suivante: # par exemple, en utilisant ratios(qcs) R> qc.ratios<-ratios(qcs) R> write.table(qc.ratios,"monFichierRatios.txt") * La plus grande partie des ces données est résumé dans un graphe crée par la méthode ''plot(qcs)''. Ce graphe est très utile car il présente de manière facile à lire les données de contrôle de qualité de l'objet ''data''. # pour affichage a l'ecran R>plot(qcs) R>savePlot("plotQc.jpeg", type="jpeg") # # Alternative: directement envoye en fichier R>jpeg("plotQc.jpeg") R>plot(qcs) R>dev.off() * Plus à venir... ==== Utilisation des méthodes de contrôle de la qualité de affy ==== ''affy'' contient également des méthodes de contrôle de qualité qui ne sont pas accessible via la méthode ''qc'' de ''simpleaffy''. Les méthodes vraiment intéressantes sont : * ''image()'': pour afficher les valeurs d'intensité log-transformées sur les puces et détecter les artéfacts d'hybridation. * ''boxplot()'': pour obtenir un graphe "chandelier" des intensités pour chaque puce. * ''AffyRNAdeg''/''summaryAffydeg''/''plotAffyRNAdeg'': pour vérifier la qualité de l'ARNm utilisé sur chaque puce Il n'est pas plus difficile de les utiliser que dans le cas des méthodes fournies par ''simpleaffy''; il faut simplement faire attention aux détails suivants: === Utilisation de la fonction image() === ''image'' retourne par défaut des images (!!), chacune représentant la valeur log-transformée de l'intensité pour chaque sonde sur la puce. Par conséquent, la densité d'information est très grande et il faut faire attention au format de sortie. Par défaut, cette méthode présente les image à la console en demandant après chaque rendu, de presser sur pour voir la page suivante. Si on veut un affichage de 2x2, on utiliserait le code suivant: # determinons une grille de 2x2 R> par(mfrow=c(2,2)) # Effectuons le rendu R> image(data) Soyez patient: sur les puces au contenu très dense (par ex.: U133 v2), ça va prendre un certain temps à dessiner. Lorsqu'une page est finalement complétée, la fonction demande de presser pour passer à la page suivante. Si vous connaissez un moyen de la sauver, ou, mieux de encore, de créer une boucle pour tout sauvegarder dans un fichier ou plusieurs fichiers, laissez-le nous savoir... === Utilisation de la fonction boxplot() === Cette fonction permet la création d'un graphe en boîte à moustache (c'est le nom en français, [[http://fr.wikipedia.org/wiki/Boîte_à_moustaches|vraiment!]]) où chaque puce est représentée par une boîte dont la limite inférieure représente le 1er quartile, le limite supérieure représentant le 3ème quartile et la barre noire étant la valeur médiane. Les lignes sous et au-delà de cette boîte sont les "moustaches" soient les valeurs extrêmes pour cette puce. Ce graphe est très utile pour déterminer la distribution des signaux dans une puce mais aussi entre les puces et permet de voir l'impact de la normalisation sur cette distribution. Pour le créer, simplement faire ceci: R> boxplot(data) Pour sauvegarder le graphe dans un fichier: R> jpeg("monBoxPlot.jpg") R> boxplot(data) R> dev.off() === Utilisation des fonctions d'évaluation de la dégradation de l'ARNm === Les fonctions d'analyse de la dégradation de l'ARNm utilisent le fait que les différentes sondes d'un ''probeset'' se retrouvent étalées de manière ordonnée du 5' au 3' d'un ARNm. Comme la dégradation progressive de l'ARNm se fait principalement à partir de l'extrémité 5', on s'attend à observer que les intensités des sondes en 5' devraient être moindre que celles en 3'. En utilisant le fichier CDF, qui nous donne la position des sondes sur la puce ainsi que leur séquence d'intérêt, on peut créer un graphe représentant la valeur moyenne pour chaque position d'une sonde dans un ''probeset'' donné. # La methode qui cree les donnees R> degr<-AffyRNAdeg(data) # La methode qui creera le graphe R> plotAffyRNAdeg(degr) Il est très simple d'analyser ce graphe: aucune puce ne devrait avoir un profil distinct des autres. Toutes les lignes devraient être relativement parallèle. Si ce n'est pas le cas, utilisez la méthode suivante pour obtenir un tableau des données et rejeter la puce fautive: R> summaryAffyRNAdeg(degr) ===== Références ===== notes-separator : none