古詩詞大全網 - 古詩大全 - 轉錄組入門(7):差異表達分析

轉錄組入門(7):差異表達分析

原先三個樣本的HTSeq-count計數的數據可以在我的GitHub中找到,但是前面已經說過Jimmy失誤讓我們分析的人類就只有3個樣本, 另外壹個樣本需要從另壹批數據獲取(請註意batch effect),所以不能保證每壹組都有兩個重復。

我壹直堅信”妳並不孤獨“這幾個字,遇到這種情況的人肯定不止我壹個,於是我找到了幾種解決方法

以上方法都會在後續進行介紹,但是我們DESeq2必須得要有重復的問題亟待解決,沒辦法我只能自己瞎編了。雖然是編,我們也要有模有樣,不能直接復制壹份,要考慮到高通量測序的read是默認符合泊松分布的。我是這樣編的。

這僅僅是壹種填坑的方法而已,更好模擬數據的方法需要參閱更加專業的文獻, 有生之年 我希望能補上這壹個部分。

這部分內容最先在 RNA-Seq Data Analysis 的8.5.3節看到,剛開始壹點都不理解,但是學完生物統計之後,我認為這是理解所有差異基因表達分析R包的關鍵。

基本上,統計課都會介紹如何使用 t檢驗 用來比較兩個樣本之間的差異,然後在樣本比較多的時候使用 方差分析 確定樣本間是否有差異。當然前是樣本來自於正態分布的群體,或者隨機獨立大量抽樣。

對於基因芯片的差異表達分析而言,由於普遍認為其數據是服從正態分布,因此差異表達分析無非就是用t檢驗和或者方差分析應用到每壹個基因上。高通量壹次性找的基因多,於是就需要對多重試驗進行矯正,控制假陽性。目前在基因芯片的分析用的最多的就是 limma

但是 ,高通量測序(HTS)的read count普遍認為是服從泊松分布(當然有其他不同意見),不可能直接用正態分布的 t檢驗 方差分析 。 當然我們可以簡單粗暴的使用對於的 非參數檢驗 的方法,但是統計力不夠,結果的p值矯正之估計壹個差異基因都找不到。老板花了壹大筆錢,結果卻說沒有差異基因,是個負結果,於是好幾千經費打了水漂,他肯定是不樂意的。因此,還是得要用參數檢驗的方法,於是就要說到方差分析和線性模型之間的關系了。

線性回歸和方差分析是同壹時期發展出的兩套方法。在我本科階段的田間統計學課程中就介紹用 方差分析 (ANOVA)分析不同肥料處理後的產量差異,實驗設計如下

這是最簡單的單因素方差分析,每壹個結果都可以看成 yij = ai + u + eij, 其中u是總體均值,ai是每壹個處理的差異,eij是隨機誤差。

:方差分析(Analysis of Variance, ANAOVA)名字聽起來好像是檢驗方差,但其實是為了判斷樣本之間的差異是否真實存在,為此需要證明不同處理內的方差顯著性大於不同處理間的方差。

線性回歸 壹般是用於量化的預測變量來預測量化的響應變量。比如說體重與身高的關系建模:

當然線性回歸也可用處理名義型或有序型因子(也就是離散變量)作為預測變量,如果要畫圖的話,就是下面這個情況。

如果我們需要通過壹個實驗找到不同處理後對照組和控制組的基因變化,那麽基因表達可以簡單寫成, y = a + b · treament + e。 和之前的 yij = ai + u + eij 相比,妳會發現公式是如此的壹致。 這是因為線性模型和方差分析都是 廣義線性模型 (generalizing linear models, GLM)在正態分布的預測變量的特殊形式。而GLM本身只要采用合適的 連接函數 是可以處理對任意類型的變量進行建模的。

目前認為read count之間的差異是符合負二項分布,也叫gamma-Possion分布。那麽問題來了,如何用GLM或者LM分析兩個處理件的差異呢?其實可以簡單的用上圖的擬合直線的斜率來解釋,如果不同處理之間存在差異,那麽這個擬合線的斜率必定不為零,也就是與X軸平行。但是這是壹種便於理解的方式(雖然妳也未必能理解),實際更加復雜,考慮因素更多。

註1 負二向分布有兩個參數,均值(mean)和離散值(dispersion). 離散值描述方差偏離均值的程度。泊松分布可以認為是負二向分布的離散值為1,也就是均值等於方差(mean=variance)的情況。

註2 這部分涉及大量的統計學知識,不懂就用維基百科壹個個查清楚。

聊完了線性模型和方差分析,下面的設計矩陣(design matrix)就很好理解了, 其實就是用來告訴不同的差異分析函數應該如何對待變量。比如說我們要研究的KD和control之間變化,設計矩陣就是

那麽比較矩陣(contrast matrix)就是告訴差異分析函數應該如何對哪個因素進行比較, 這裏就是比較不同處理下表達量的變化。

其實read count如何標準化的方法有很多,最常用的是FPKM和RPKM,雖然它們其實是錯的-- FPKM/RPKM是錯的 。

我推薦閱讀 Comparing the normalization methods for the differential analysis of Illumina high-throughput RNA-Seq data , 了解不同標準化方法之間的差異。

有壹些方法是要求原始數據,有壹些則要求經過某類標準化後的數據,記得區分。

關於DESeq2分析差異表達基因,其實在 position bias)標準化。edgeR的 calcNormFactors 函數使用 TMM算法 對DGEList標準化

大部分的mRNA-Seq數據分析用TMM標準化就行了,但是也有例外,比如說single-cell RNA-Seq(Lun, Bach, and Marioni 2016), 還有就是global differential expression, 基因組壹半以上的基因都是差異表達的,請盡力避免,(D. Wu et al. 2013), 不然就需要用到內參進行標準化了(Risso et al. 2014).

第四步: 實驗設計矩陣(Design matrix), 類似於DESeq2中的design參數。 edgeR的線性模型和差異表達分析需要定義壹個實驗設計矩陣。很直白的就能發現是1vs0

第五步: 估計離散值(Dispersion)。前面已經提到負二項分布(negative binomial,NB)需要均值和離散值兩個參數。edgeR對每個基因都估測壹個經驗貝葉斯穩健離散值(mpirical Bayes moderated dispersion),還有壹個公***離散值(common dispersion,所有基因的經驗貝葉斯穩健離散值的均值)以及壹個趨勢離散值

還可以進壹步通過quasi-likelihood (QL)擬合NB模型,用於解釋生物學和技術性導致的基因特異性變異 (Lund et al. 2012; Lun, Chen, and Smyth 2016).

註1 估計離散值這個步驟其實有許多 estimate*Disp 函數。當不存在實驗設計矩陣(design matrix)的時候, estimateDisp 等價於 estimateCommonDisp 和 estimateTagwiseDisp 。而當給定實驗設計矩陣(design matrix)時, estimateDisp 等價於 estimateGLMCommonDisp , estimateGLMTrendedDisp 和 estimateGLMTagwiseDisp 。 其中tag與gene同義。

註2 其實這裏的第三, 四, 五步對應的就是DESeq2的 DESeq 包含的2步,標準化和離散值估測。

第六步: 差異表達檢驗(1)。這壹步主要構建比較矩陣,類似於DESeq2中的 results 函數的 contrast 參數。

這裏用的是 glmQLFTest 而不是 glmLRT 是因為前面用了glmQLTFit進行擬合,所以需要用QL F-test進行檢驗。如果前面用的是 glmFit ,那麽對應的就是 glmLRT . 作者稱QL F-test更加嚴格。多重試驗矯正用的也是BH方法。

後續就是提取顯著性差異的基因用作下遊分析,做壹些圖看看

第六步:差異表達檢驗(2)。上面找到的顯著性差異的基因,沒有考慮效應值,也就是具體變化了多少倍。我們也可用找表達量變化比較大的基因,對應的函數是 glmTreat 。

經過上面兩個方法的洗禮,基本上套路妳也就知道了,我先簡單小結壹下,然後繼續介紹limma包的 voom 。

Limma原先用於處理基因表達芯片數據,可是說是這個領域的老大 :sunglasses: 。如果妳仔細看edgeR導入界面,妳就會發現,edgeR有壹部分功能依賴於limma包。Limma采用經驗貝葉斯模型( Empirical Bayesian model)讓結果更穩健。

在處理RNA-Seq數據時,raw read count先被轉成log2-counts-per-million (logCPM),然後對mean-variance關系建模。建模有兩種方法:

數據預處理 : Limma使用edgeR的DGEList對象,並且過濾方法都是壹致的,對應edgeR的第壹步,第二步, 第三步

差異表達分析 : 使用”limma-trend“

差異表達分析 : 使用”limma-voom“

如果分析基因芯片數據,必須好好讀懂LIMMA包。

基本上每壹個包,我都提取了各種的顯著性基因,比較就需要用韋恩圖了,但是我偏不 :stuck_out_tongue: 我要用UpSetR.

感覺limma的結果有點奇怪,有生之年在折騰吧。

好吧,這部分我鴿了

[1] Comparing the normalization methods for the differential analysis of Illumina high-throughput RNA-Seq data

[2] https://www.bioconductor.org/help/workflows/rnaseqGene/

[3] https://www.bioconductor.org/help/workflows/RnaSeqGeneEdgeRQL/

[4] https://www.bioconductor.org/help/workflows/RNAseq123/