Dans cette séance vous allez effectuer une détection de gènes
différentiellement exprimés. Pour cela vous allez utiliser le package
DESeq2. Voici le lien
vers la notice complete de DESeq2. Nous n’allons utiliser qu’une
partie des fonctionnalités de DESeq2, et je vous recommande de regarder
les autres possibilités offertes par ce package spécialisé dans
l’analyse de données RNAseq.
Préparation de l’environnement
- Dans un premier temps, créez un nouveau R markdown (ou réutilisez celui de la séance précédente) et chargez les librairies dont vous aurez besoin.
Voici la liste des libraries dont vous aurez besoin:
- tidyverse
- DESeq2
Avec DESeq2 nous detectons les gènes
différentiellement exprimés entre 2 conditions. Nous allons donc devoir
faire l’analyse pour chacune des comparaisons suivantes:
- WT vs arp6-1 en faible concentration
(0.5 mM) de nitrate
- WT vs arp6-1 en forte concentration
(10 mM) de nitrate
- Faible concentration (0.5 mM) vs
forte concentration (10 mM) de nitrate chez le
WT
- Faible concentration (0.5 mM) vs
forte concentration (10 mM) de nitrate chez le mutant
arp6-1
Détection de gènes différentiellement exprimés entre WT et le mutant arp6-1 en faible concentration (0.5 mM) de nitrate
Nous allons faire ensemble la détection de gènes différentiellement exprimés entre WT et le mutant arp6-1 en faible concentration (0.5 mM) de nitrate et vous ferez l’analyse pour les autres comparaisons par vous-même.
Préparation des données pour pouvoir faire l’analyse d’expression différentielle
DESeq à besoin d’un object dans un format particulier pour
fonctionner. Celui-ci contient les données d’expression ainsi que les
informations sur les échantillons nécessaires à la comparaison.
Afin de créer cet objet il faut les informations suivantes:
- Le dossier dans lequel il y a les données d’expression (avec un
fichier d’expression par échantillon)
- Le fichier contenant les informations des échantillons (génotype,
condition environnementale)
- Nous créons cet objet avec le code suivant:
# Définition du dossier contenant les données d'expression pour tous
# les échantillons de la comparaison analysée
directory_0.5mM <- "../../../data/0.5mM_WT_vs_arp6/"
sampleFiles_0.5mM <- list.files(directory_0.5mM)
# Chargement du fichier contenant les information sur les échantillons
sampleCondition_0.5mM <- read_tsv("../../../data/Data_info_WT_arp6_0.5mM.txt")
# Création d'un objet combinant le nom des fichiers des échantillons et
# les informations sur ces échantillons
sampleTable_0.5mM <- data.frame(sampleName = sampleFiles_0.5mM,
fileName = sampleFiles_0.5mM,
condition = sampleCondition_0.5mM)
sampleTable_0.5mM$condition <- factor(sampleTable_0.5mM$condition.genotype)
# Vérifiez que tout est bon à cette étape avec la commande:
View(sampleTable_0.5mM)
# Création de l'objet spécifique à DESeq:
ddsHTSeq_0.5mM <- DESeqDataSetFromHTSeqCount(sampleTable = sampleTable_0.5mM,
directory = directory_0.5mM,
design= ~ condition)
ddsHTSeq_0.5mM
- Nous devons ensuite enlever les gènes non exprimés ou très faiblement exprimés:
keep <- rowSums(counts(ddsHTSeq_0.5mM)) >= 6
ddsHTSeq_0.5mM <- ddsHTSeq_0.5mM[keep,]
- DESeq doit savoir quelle est la condition de référence, et quelle est la condition que nous comparons à cette référence. Ceci se fait avec la fonction suivante:
ddsHTSeq_0.5mM$condition <- relevel(ddsHTSeq_0.5mM$condition, ref = "WT")
Analyse d’expression différentielle
Maintenant que tout est préparé, nous pouvons enfin effectuer
l’analyse d’expression différentielle. Cette analyse intègre une
normalisation des données pour corriger pour la taille de la librarie
(raison pour laquelle nous n’avons pas besoin de le faire comme à la
séance précédente).
Ensuite DESeq va effectuer un test statistique afin de définir si chaque
gène est différentiellement exprimé. Ce test est fait en partant du
principe que la majorité des gènes ne changent pas d’expression entre
les deux conditions. Il va attribuer une p-value ajustée (en utilisant
la méthode de benjamini-hochberg) pour tenir compte du fait qu’un nombre
important de tests statistiques sont effectués (un test par gène sachant
qu’il y a environ 20000 gènes).
- L’analyse d’expression différentielle est effectuée avec la fonction suivante:
dds_0.5mM <- DESeq(ddsHTSeq_0.5mM)
- Maintenant nous pouvons ajouter un seuil pour la p-value ajustée à 5%. Les gènes avec une p-value ajustée inférieure à cette valeur sont différentiellement exprimés.
res_0.5mM <- results(dds_0.5mM, alpha=0.05)
res_0.5mM
## log2 fold change (MLE): condition arp6 vs WT
## Wald test p-value: condition arp6 vs WT
## DataFrame with 24942 rows and 6 columns
## baseMean log2FoldChange lfcSE stat pvalue padj
## <numeric> <numeric> <numeric> <numeric> <numeric> <numeric>
## AT1G01010 137.1266 -0.6392509 0.267640 -2.388472 0.0169186 0.121908
## AT1G01020 190.2127 -0.1222662 0.226461 -0.539901 0.5892656 0.845239
## AT1G01030 42.0664 0.2243782 0.436388 0.514171 0.6071322 0.853653
## AT1G01040 630.0558 -0.0141657 0.133220 -0.106334 0.9153177 0.978841
## AT1G01050 801.5885 -0.0430895 0.113406 -0.379957 0.7039774 0.900702
## ... ... ... ... ... ... ...
## ATMG00650 2.83986 0.183766174 1.845123 0.099595633 0.920665 0.979897
## ATMG00700 1.07625 1.407237803 3.276264 0.429525108 0.667541 NA
## ATMG01275 8.32380 0.000787451 1.153750 0.000682515 0.999455 0.999789
## ATMG01380 8.99937 -0.044668361 0.819902 -0.054480143 0.956553 0.989149
## ATMG01390 4380.02306 0.329337764 0.335331 0.982128562 0.326037 0.669278
- Afin de connaitre le nombre de gènes différentiellement exprimés pour cette comparaison nous faisons:
sum(res_0.5mM$padj < 0.05, na.rm=TRUE)
## [1] 2347
- Pour visualiser l’analyse d’expression différentielle nous utilisons un graphique MA:
plotMA(res_0.5mM, ylim=c(-2,2))
Ce graphique représente la différence d’expression entre les deux conditions en fonction de l’expression moyenne pour chaque gène. Les gènes différentiellement exprimés sont en bleu.
Que pensez-vous de ce graphique?
Est-ce que la détection de gènes différentiellement exprimés est la même peut importe le niveau d’expression?
- Nous allons maintenant récupérer le résultat de DESeq dans un objet de format data.frame, qui nous permettra de faire des analyses sur ces gènes:
resOrdered_0.5mM <- res_0.5mM[order(res_0.5mM$padj),]
resOrdered_0.5mM
## log2 fold change (MLE): condition arp6 vs WT
## Wald test p-value: condition arp6 vs WT
## DataFrame with 24942 rows and 6 columns
## baseMean log2FoldChange lfcSE stat pvalue
## <numeric> <numeric> <numeric> <numeric> <numeric>
## AT2G25450 3002.159 -3.53804 0.1464012 -24.1667 4.98057e-129
## AT2G04700 895.935 -2.18926 0.1128378 -19.4019 7.44167e-84
## AT2G33220 621.495 -2.91022 0.1515776 -19.1995 3.73624e-82
## AT1G02500 3495.873 -1.59592 0.0842435 -18.9441 4.93711e-80
## AT2G17420 1592.868 -2.21170 0.1168775 -18.9232 7.34475e-80
## ... ... ... ... ... ...
## ATCG01200 1.42129 1.74277 2.13309 0.817015 0.413920
## ATCG01240 1.17072 2.59761 2.46154 1.055280 0.291297
## ATCG01310 1.06519 -2.29352 2.52609 -0.907933 0.363914
## ATMG00180 1.71439 -1.79036 2.44552 -0.732100 0.464107
## ATMG00700 1.07625 1.40724 3.27626 0.429525 0.667541
## padj
## <numeric>
## AT2G25450 1.19399e-124
## AT2G04700 8.91996e-80
## AT2G33220 2.98563e-78
## AT1G02500 2.95894e-76
## AT2G17420 3.52152e-76
## ... ...
## ATCG01200 NA
## ATCG01240 NA
## ATCG01310 NA
## ATMG00180 NA
## ATMG00700 NA
DESeq_result_0.5mM <- as.data.frame(resOrdered_0.5mM) %>%
rownames_to_column(var="gene")
- Regardez le tableau avec les données d’analyse d’expression différentielle avec la fonction suivante.
View(DESeq_result_0.5mM)
Est-ce que le gène ARP6 est bien différentiellement exprimé?
- Finalement, exportez le résultat afin de le conserver sans avoir à refaire toute l’analyse:
write_tsv(DESeq_result_0.5mM, file="../DEseq_0.5mM_WT_vs_arp6.txt")
Détection de gènes différentiellement exprimés pour les 3 autres comparaisons
Recopiez le code ci-dessus pour détecter les gènes différentiellement exprimés pour les 3 autres comparaisons suivantes:
- WT vs arp6-1 en forte concentration (10 mM) de nitrate
- Faible concentration (0.5 mM) vs forte concentration (10 mM) de nitrate chez le WT
- Faible concentration (0.5 mM) vs forte concentration (10 mM) de nitrate chez le mutant arp6-1
Attention! N’oubliez pas de nommer les objets différemment pour chaque comparaison afin de ne pas écraser les résultats de l’analyse précédente.