R/Bioconductor: Utilisation des librairies affy() simpleaffy()
Introduction
La librarie affy
(1) 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
(2) 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'objetAffyBatch
:- 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éthoderead.affy
desimpleaffy
:
# 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éthodeReadAffy
deaffy
:
# 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 objetExpressionSet
contenant les données normalisées provenant de notre objetdata
:
R> eset.mas5<-call.exprs(data,"mas5")
- Il faut ensuite créer un objet de type
QCStats
(que nous appèleronsqcs
) 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 moyenmaxbg(qcs)
: valeur maximale du bruit de fondsminbg(qcs)
: valeur minimale du bruit de fondsspikeInProbes(qcs)
: valeur des sondes témoins (spiked-in)qcProbes(qcs)
: valeurs pour les sondes de contrôle de qualité utilisant actine et GADPHpercent.present(qcs)
: pourcentage de probesets appelés présentsfs(qcs)
: facteur d'équivalencetarget(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'objetdata
.
# 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 <Return> pour voir la page suivante. Si on veut un affichage de 2×2, 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 <Enter> 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, 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)