簡(jiǎn)單的轉(zhuǎn)錄組差異基因表達(dá)分析 -- edgeR

經(jīng)典的轉(zhuǎn)錄組差異分析通常會(huì)使用到三個(gè)工具limma/voom, edgeRDESeq2, 今天我們同樣使用一個(gè)小規(guī)模的轉(zhuǎn)錄組測(cè)序數(shù)據(jù)來(lái)演示edgeR的簡(jiǎn)單流程。

由于,edgeRDESeq2都是使用基于負(fù)二項(xiàng)分布廣義線性回歸模型(GLM)來(lái)對(duì)RNA-seq數(shù)據(jù)進(jìn)行擬合和差異分析,所以我們都用同一個(gè)數(shù)據(jù)來(lái)分析。

文中使用的數(shù)據(jù)來(lái)自Standford 大學(xué)的一個(gè)擬南芥的small RNA-seq數(shù)據(jù)(https://bios221.stanford.edu/data/mobData.RData

該數(shù)據(jù)包含6個(gè)樣本:SL236,SL260,SL237,SL238,SL239,SL240, 并分成了三組,分別是:

MM="triple mutatnt shoot grafted onto triple mutant root"

WM="wild-type shoot grafted onto triple mutant root"

WW="wild-type shoot grafted onto wild-type root"

簡(jiǎn)而言之,WW組可以認(rèn)為是實(shí)驗(yàn)的對(duì)照組,而MMWM則是兩個(gè)處理組。

P.S. 本文的分析是基于有生物學(xué)重復(fù)的單因子差異分析,關(guān)于無(wú)生物學(xué)重復(fù)或者多因子的情況,以后有機(jī)會(huì)再做展開(kāi)。

對(duì)于edgeR的分析流程而言,我們需要輸入的數(shù)據(jù)包括:

  1. 表達(dá)矩陣(counts
  2. 分組信息(group
  3. 擬合信息(design):指明如何根據(jù)樣本的分組進(jìn)行建模

下面就以mobData 中的數(shù)據(jù)為例簡(jiǎn)單介紹edgeR 的分析流程

載入數(shù)據(jù)及生成DGEList

由于mobData 中的行名沒(méi)有提供基因的ID,我們也不是為了探究生物學(xué)問(wèn)題,就以mobData 的行數(shù)作為其ID

library(edgeR)
load("data/mobData.RData")
head(mobData)
##      SL236 SL260 SL237 SL238 SL239 SL240
## [1,]    21    52     4     4    86    68
## [2,]    18    21     1     5     1     1
## [3,]     1     2     2     3     0     0
## [4,]    68    87   270   184   396   368
## [5,]    68    87   270   183   396   368
## [6,]     1     0     6    10     6    12
row.names(mobData) <- as.character(c(1:dim(mobData)[1]))
# MM="triple mutatnt shoot grafted onto triple mutant root"
# WM="wild-type shoot grafted onto triple mutant root"
# WW="wild-type shoot grafted onto wild-type root"
mobGroups <- c("MM", "MM", "WM", "WM", "WW", "WW")
degs <- DGEList(counts = mobData, group = mobGroups);degs
## An object of class "DGEList"
## $counts
##   SL236 SL260 SL237 SL238 SL239 SL240
## 1    21    52     4     4    86    68
## 2    18    21     1     5     1     1
## 3     1     2     2     3     0     0
## 4    68    87   270   184   396   368
## 5    68    87   270   183   396   368
## 2995 more rows ...
## 
## $samples
##       group lib.size norm.factors
## SL236    MM   152461            1
## SL260    MM   309995            1
## SL237    WM   216924            1
## SL238    WM   208841            1
## SL239    WW   258404            1
## SL240    WW   276434            1

edgeR將數(shù)據(jù)存儲(chǔ)在列表形式的DGEList對(duì)象中,需要指定的參數(shù)包括countsgroup . DGEList 將表達(dá)矩陣存儲(chǔ)在$counts中,將樣本的信息,例如分組情況和文庫(kù)大小等存儲(chǔ)在$samples中。

預(yù)處理

在進(jìn)行差異分析之前,需要對(duì)樣本數(shù)據(jù)的表達(dá)矩陣進(jìn)行預(yù)處理,包括:

  1. 去除低表達(dá)量基因
  2. 探索樣本分組信息 -- 有助于挖掘潛在的差異樣本

這里我們根據(jù)CPM normalization后的基因表達(dá)量作為過(guò)濾低表達(dá)基因的指標(biāo)

# cpm normalization
countsPerMillion <- cpm(degs)
countCheck <- countsPerMillion > 1
keep <- which(rowSums(countCheck) >= 2)
degs.keep <- degs[keep,]
dim(degs.keep)
## [1] 2861    6

edgeR默認(rèn)使用 trimmed mean of M-values (TMM) 計(jì)算文庫(kù)的scale factor進(jìn)行normalization,以最大程度地縮小樣本間基因表達(dá)量的log-fold change。這是因?yàn)門(mén)MM 法認(rèn)為樣本間大部分的基因都沒(méi)有發(fā)生差異表達(dá),而那些真正差異表達(dá)的基因并不會(huì)受到normalization的嚴(yán)重影響。如此一來(lái),便將那些由于測(cè)序引起的差異表達(dá)基因的表達(dá)量給校正了,消除了一部分的假陽(yáng)性。

degs.norm <- calcNormFactors(degs.keep, method = 'TMM')
plotMDS(degs.norm, col=as.numeric(degs.norm$samples$group))
legend("bottomleft",as.character(unique(degs.norm$samples$group)), col=1:3, pch=20)

這里使用plotMDS 查看樣本的分組情況(通過(guò)logFC),各組都分得很開(kāi)。plotMDS在多因子的情況下可以更好地觀察各個(gè)樣本組是否有良好的分組。

  • 關(guān)于Normalization

    在差異分析中,我們常常更關(guān)注的是相對(duì)表達(dá)量的變化,例如處理組的A基因表達(dá)量相對(duì)于對(duì)照組的而言是上調(diào)還是下調(diào)了。而基因表達(dá)量的定量準(zhǔn)確性則在差異分析中不太重要,因此,在進(jìn)行差異分析時(shí),像RPKM/FPKM這種對(duì)轉(zhuǎn)錄本長(zhǎng)度進(jìn)行normalization方法是并不常用,也是沒(méi)有必要的。

    在常規(guī)的RNA-seq中,影響基因表達(dá)量更大的技術(shù)因素往往是測(cè)序深度以及有效文庫(kù)大?。╡ffective libraries size)。這也是一般的差異分析軟件會(huì)進(jìn)行normalize的部分。

差異分析

首先,我們構(gòu)建出design矩陣,指明差異分析所要比較的關(guān)系

designMat <- model.matrix(~0+mobGroups);designMat
##   mobGroupsMM mobGroupsWM mobGroupsWW
## 1           1           0           0
## 2           1           0           0
## 3           0           1           0
## 4           0           1           0
## 5           0           0           1
## 6           0           0           1
## attr(,"assign")
## [1] 1 1 1
## attr(,"contrasts")
## attr(,"contrasts")$mobGroups
## [1] "contr.treatment"

然后,進(jìn)行dispersion的估計(jì)

degs.norm <- estimateGLMCommonDisp(degs.norm,design=designMat)
degs.norm <- estimateGLMTrendedDisp(degs.norm, design=designMat)
degs.norm <- estimateGLMTagwiseDisp(degs.norm, design=designMat)
plotBCV(degs.norm)
good fitting

plotBCV 反映不同表達(dá)量的基因與模型擬合的情況,如果模型擬合得好則"Tagwise"點(diǎn)的分布會(huì)擬合到“Trend”這條曲線上,如上圖所展示的情況。但也可以看到低表達(dá)量的基因有點(diǎn)離散。

  • 關(guān)于dispersion estimation

    一般而言,樣本間的變異系數(shù)(coefficient of variance,CV)是由兩部分組成的,一是技術(shù)差異(Technical CV),另一個(gè)是生物學(xué)差異(Biological coefficient of variance,BCV)。前者是會(huì)隨著測(cè)序通量的提升而消失的,而后者則是樣本間真實(shí)存在的差異。所以,對(duì)于一個(gè)基因g而言,它的BCV在樣本間足夠大的話,就可以認(rèn)為基因g是一個(gè)差異表達(dá)基因。而edgeR正是通過(guò)估計(jì)dispersion來(lái)估計(jì)BCV(其中的數(shù)理不在此展開(kāi)),進(jìn)而擬合出線性回歸模型的參數(shù)。

    estimateGLMCommonDisp(x,design):為所有基因都計(jì)算同樣的dispersion

    estimateGLMTrendedDisp(x,design):根據(jù)不同基因的均值--方差之間的關(guān)系來(lái)計(jì)算dispersion,并擬合一個(gè)trended model

    estimateGLMTagwiseDisp(x,design):計(jì)算每個(gè)基因的dispersion,并利用經(jīng)驗(yàn)性貝葉斯方法(empirical bayes)壓縮至Trend Didspersion。個(gè)人認(rèn)為這一項(xiàng)相當(dāng)于GLM中每個(gè)基因的beta值

最后,根據(jù)design進(jìn)行擬合,并利用likelihood ratio test(LRT)進(jìn)行統(tǒng)計(jì)檢驗(yàn)

fit <- glmFit(degs.norm, designMat)
# LRT=likelihood ratio test
# group1-group2
lrt.1vs2 <- glmLRT(fit, contrast = c(1,-1,0))
# group1-group3
lrt.1vs3 <- glmLRT(fit, contrast = c(1,0,-1))
# group2-group3
lrt.2vs3 <- glmLRT(fit, contrast = c(0,1,-1))

下面以MM組和 WW組的比較為例

topTags 提取出差異分析的數(shù)據(jù);

decideTestsDGE 可以根據(jù)條件篩選差異基因,返回-1,0,1三個(gè)數(shù)值,分別代表下調(diào),不顯著和上調(diào);

plotSmear 畫(huà)一個(gè)簡(jiǎn)單的表達(dá)量與fold change的關(guān)系圖。

degs.res.1vs3 <- topTags(lrt.1vs3, n = Inf, adjust.method = 'BH', sort.by = 'PValue')
degs.res.1vs3[1:5, ]
## Coefficient:  1*mobGroupsMM -1*mobGroupsWW 
##           logFC   logCPM        LR       PValue          FDR
## 74   -10.364020 9.042115 130.95167 2.537092e-30 7.258620e-27
## 490   -6.043444 8.401692 119.28833 9.056111e-28 1.295477e-24
## 1717  -7.056255 9.921304 114.37749 1.077199e-26 1.027289e-23
## 1963   6.492175 6.868420 102.37925 4.584800e-24 3.279278e-21
## 1111  -9.565662 8.284244  97.26908 6.051792e-23 3.462836e-20

deGenes.1vs3 <- decideTestsDGE(lrt.1vs3, p=0.05, lfc = 1)
summary(deGenes.1vs3)
##        1*mobGroupsMM -1*mobGroupsWW
## Down                            430
## NotSig                         2094
## Up                              337
detag <- rownames(lrt.1vs3)[as.logical(deGenes.1vs3)]
plotSmear(lrt.1vs3, de.tags=detag)
abline(h=c(-1, 1), col='blue')

圖中紅色的是統(tǒng)計(jì)學(xué)上的顯著差異表達(dá)基因

至于edgeR與DESeq2的比較其實(shí)已經(jīng)有很多benchmark的文獻(xiàn)做過(guò)了,這里就先鴿一下,以后有機(jī)會(huì)再來(lái)填坑。

benchmark ref:https://bioconductor.org/packages/release/bioc/vignettes/SummarizedBenchmark/inst/doc/Feature-Iterative.html

參考文章:

  1. https://bioconductor.org/packages/release/bioc/vignettes/edgeR/inst/doc/edgeRUsersGuide.pdf
  2. https://www.biostars.org/p/319957/
  3. https://web.stanford.edu/class/bios221/labs/rnaseq/lab_4_rnaseq.html
  4. https://bioinformatics-core-shared-training.github.io/cruk-bioinf-sschool/Day3/rnaSeq_DE.pdf

完。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容