Chapter 9 Analyse d’expression différentielle : MA-plot

9.1 C’est quoi un MA plot

9.1.1 Nos data

head(exprs, 10)
##                 id    WT1   WT2    KO1   KO2
## 1  ENSG00000034510 235960 94264 202381 91336
## 2  ENSG00000064201    116    71     64    56
## 3  ENSG00000065717    118   174    124   182
## 4  ENSG00000099958    450   655    301   472
## 5  ENSG00000104164   4736  5019   4845  4934
## 6  ENSG00000104783   9002  8623   7720  7142
## 7  ENSG00000105229   1295  2744   1113  2887
## 8  ENSG00000105723   3353  7449   3589  7202
## 9  ENSG00000116199   2044  4525   2604  4902
## 10 ENSG00000118939   7022  2526   6269  3068

9.1.2 La théorie

Le MA plot représente le lien entre différence d’expression et intensité moyenne. - M (magnitude) est le logarithme en base 2 du rapport d’expression (“log2 fold-change”) - A (average intensity) est la moyenne des logarithmes des valeurs d’expression.

log2 fold change, “magnitude”

M = log2(KO/WT) =  log2(KO) - log2(WT)

average log2 value

A = ½ log2(KO x WT) = ½ (log2(KO) + log2(WT))

9.2 Calculs sur les colonnes

  1. Calcul de moyennes par ligne (rowMeans) pour un sous-ensemble donné des colonnes (WT1 et WT2).
rowMeans(exprs[   , c("WT1","WT2")])
##  [1] 165112.0     93.5    146.0    552.5   4877.5   8812.5   2019.5   5401.0
##  [9]   3284.5   4774.0  16571.0   2954.0   2229.5  10023.5   1995.5     94.0
## [17]    531.0    164.5  16827.5    807.0  48148.5   1350.0   1117.5    409.5
## [25]   1260.0  24988.5    192.5    191.5   2748.0   3388.0   1606.0   1699.5
## [33]   2559.0    199.0  25525.0   2880.5   3309.5   4770.0    126.0     66.5
## [41]    618.0    212.0    104.0     77.5   3366.0  13460.0   3133.0   1287.0
## [49]    293.0     65.5
  1. Ajout de colonnes avec les expressions moyennes des WT et des KO
exprs$meanWT <- rowMeans(exprs[   , c("WT1","WT2")])
exprs$meanKO <- rowMeans(exprs[   , c("KO1","KO2")])
  1. Vérification des résultats
head(exprs) 
##                id    WT1   WT2    KO1   KO2   meanWT   meanKO
## 1 ENSG00000034510 235960 94264 202381 91336 165112.0 146858.5
## 2 ENSG00000064201    116    71     64    56     93.5     60.0
## 3 ENSG00000065717    118   174    124   182    146.0    153.0
## 4 ENSG00000099958    450   655    301   472    552.5    386.5
## 5 ENSG00000104164   4736  5019   4845  4934   4877.5   4889.5
## 6 ENSG00000104783   9002  8623   7720  7142   8812.5   7431.0
  1. Fold-change KO vs WT
exprs$FC <- exprs$meanKO / exprs$meanWT
  1. Vérification des résultats
head(exprs) 
##                id    WT1   WT2    KO1   KO2   meanWT   meanKO        FC
## 1 ENSG00000034510 235960 94264 202381 91336 165112.0 146858.5 0.8894478
## 2 ENSG00000064201    116    71     64    56     93.5     60.0 0.6417112
## 3 ENSG00000065717    118   174    124   182    146.0    153.0 1.0479452
## 4 ENSG00000099958    450   655    301   472    552.5    386.5 0.6995475
## 5 ENSG00000104164   4736  5019   4845  4934   4877.5   4889.5 1.0024603
## 6 ENSG00000104783   9002  8623   7720  7142   8812.5   7431.0 0.8432340
  1. Moyenne de tous les échantillons
exprs$mean <- rowMeans(exprs[   , c("WT1", "WT2", "KO1", "KO2")])
  1. Vérification des résultats
head(exprs) 
##                id    WT1   WT2    KO1   KO2   meanWT   meanKO        FC
## 1 ENSG00000034510 235960 94264 202381 91336 165112.0 146858.5 0.8894478
## 2 ENSG00000064201    116    71     64    56     93.5     60.0 0.6417112
## 3 ENSG00000065717    118   174    124   182    146.0    153.0 1.0479452
## 4 ENSG00000099958    450   655    301   472    552.5    386.5 0.6995475
## 5 ENSG00000104164   4736  5019   4845  4934   4877.5   4889.5 1.0024603
## 6 ENSG00000104783   9002  8623   7720  7142   8812.5   7431.0 0.8432340
##        mean
## 1 155985.25
## 2     76.75
## 3    149.50
## 4    469.50
## 5   4883.50
## 6   8121.75

9.3 MA-plot : log2FC vs intensité

9.3.1 Calcul de M et A

exprs$M <- log2(exprs$FC)
exprs$A <- (log2(exprs$meanKO) + log2(exprs$meanWT)) /2

9.3.2 Visualisation

On peut ensuite dessiner un nuage de points (en l’agrémentant un peu)

plot(x = exprs$A, y = exprs$M, main = "MA plot",
       col = "blue", pch = 16, xlab = "A = intensity", ylab = "M = log2FC")
grid(lty = "solid", col = "lightgray")
abline(h = 0)

9.4 Appliquer une fonction sur les lignes/colonnes

9.4.1 Appliquer une fonction (moyenne, variance, …) sur chaque ligne d’un tableau

mean_per_row <- apply(exprs[ , c("WT1", "WT2", "KO1", "KO2")], 1, mean)

mean_per_row <- apply(exprs[ , c(2, 3, 4, 5)], 1, mean)
  
mean_per_row <- apply(exprs[ , -1 ], 1, mean)

mean_per_row <- apply(exprs[ , which(sapply(exprs, class) != "factor")], 1, mean)

var_per_row <- apply(exprs[ , c("WT1", "WT2", "KO1", "KO2")], 1, var)

9.4.2 Appliquer une fonction (moyenne, variance, …) sur chaque colonne d’un tableau

mean_per_col <- apply(exprs[ , c("WT1", "WT2", "KO1", "KO2")], 2, mean)

var_per_col <- apply(exprs[ , c("WT1", "WT2", "KO1", "KO2")], 2, var)