簡單的轉錄組差異基因表達分析 -- DESeq2

經(jīng)典的轉錄組差異分析通常會使用到三個工具limma/voom, edgeRDESeq2揣云。今天我們就通過一個小規(guī)模的轉錄組測序數(shù)據(jù)來演示DESeq2的簡單流程际起。

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


該數(shù)據(jù)包含6個樣本: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"

簡而言之床牧,WW組可以認為是實驗的對照組荣回,而MMWM則是兩個處理組。

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

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

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

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

? 由于mobData 中的行名沒有提供基因的ID心软,我們也不是為了探究生物學問題,就以mobData 的行數(shù)作為其ID

library(DESeq2)
library(dplyr)
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
dim(mobData)
## 3000    6

row.names(mobData) <- as.character(c(1:dim(mobData)[1]))
mobGroups <- c("MM", "MM", "WM", "WM", "WW", "WW")
colData <- data.frame(row.names=colnames(mobData),
                      group_list=mobGroups)
dds <- DESeqDataSetFromMatrix(countData = mobData,
                              colData = colData,
                              design = ~group_list,
                              tidy = F)
dds
## class: DESeqDataSet 
## dim: 3000 6 
## metadata(1): version
## assays(1): counts
## rownames(3000): 1 2 ... 2999 3000
## rowData names(0):
## colnames(6): SL236 SL260 ... SL239 SL240
## colData names(1): group_list

DESeqDataSetDESeq2流程中儲存read counts和中間統(tǒng)計分析數(shù)據(jù)的對象著蛙,之后的分析都建立在該對象之上進行删铃。

DESeqDataSet 可以通過以下四種方法產(chǎn)生:

  1. From transcript abundance files and tximport —— DESeqDataSetFromTximport
  2. From a count matrix —— DESeqDataSetFromMatrix
  3. From htseq-count files —— DESeqDataSetFromHTseqCount
  4. From a SummarizedExperiment object —— DESeqDataSet

預處理

? 在進行差異分析之前,需要對樣本數(shù)據(jù)的表達矩陣進行預處理踏堡,包括:

  1. 去除低表達量基因
  2. 探索樣本分組信息 -- 有助于挖掘潛在的差異樣本
table(rowSums(counts(dds)==0))
## 
##    0    1    2    3    4    5    6 
## 1833  442  324  170   92   84   55
keep <- rowSums(counts(dds)==0) < 6
dds.keep <- dds[keep, ]
dim(dds.keep)
## [1] 2945    6

library(factoextra)
library(FactoMineR)
count.pca <- counts(dds.keep) %>% as.matrix %>% t %>% PCA(.,graph = F)
fviz_pca_ind(count.pca,
             col.ind = mobGroups, 
             addEllipses = F, 
             mean.point = F,
             legend.title = "Groups")
colnames(dds.keep) <- c(paste(colnames(dds.keep),mobGroups, sep =".")) 
counts(dds.keep) %>% as.matrix %>% t %>% dist %>% hclust %>% plot
colnames(dds.keep) <- colnames(dds)

? 通過PCA結果來看各組樣本分組情況還是不錯的猎唁,但hclust的聚類結果反映的分組就略微有點混雜了,可能要聚類計算的距離函數(shù)選用不當有關暂吉。

差異分析

使用DESeq()函數(shù)進行差異分析時胖秒,該函數(shù)干了以下三件事:

  1. 計算文庫大小,預測用于標準化的size factor
  2. 預測離散度(dispersions)
  3. 使用負二項分布的廣義線性回歸模型(GLM)進行擬合慕的,以及進行Wald test

The Wald test (also called the Wald Chi-Squared Test) is a way to find out if explanatory variables in a model are significant.

ref : https://www.statisticshowto.com/wald-test/

degobj <- DESeq(dds.keep);degobj
## class: DESeqDataSet 
## dim: 2945 6 
## metadata(1): version
## assays(4): counts mu H cooks
## rownames(2945): 1 2 ... 2999 3000
## rowData names(26): baseMean baseVar ... deviance maxCooks
## colnames(6): SL236 SL260 ... SL239 SL240
## colData names(2): group_list sizeFactor
countdds <- counts(degobj, normalized = T)
deg.res1 <- results(degobj, contrast=c("group_list","MM","WW"), pAdjustMethod = 'fdr')

? counts() 可以提取DESeq object中的表達矩陣,而results() 可以提取差異分析的結果挤渔,其中包括了:

樣本間的均值, log2 fold changes, standard errors, test statistics, p-values and adjusted p-values.

? 使用results()函數(shù)時需要指明進行比較的樣本肮街,這里用 contrast=c("group_list","MM","WW") 提取MM組和WW組進行差異分析的結果。如果想要比較WM組和WW組判导,只要改變contrast=c("group_list","WM","WW") 即可嫉父。

# result default
results(object, contrast, name, lfcThreshold = 0,
    altHypothesis = c("greaterAbs", "lessAbs", "greater", "less"),
    listValues = c(1, -1), cooksCutoff, independentFiltering = TRUE,
    alpha = 0.1, filter, theta, pAdjustMethod = "BH", filterFun,
    format = c("DataFrame", "GRanges", "GRangesList"), test,
    addMLE = FALSE, tidy = FALSE, parallel = FALSE,
    BPPARAM = bpparam(), minmu = 0.5)

? 檢查結果中是否包含NA

dim(deg.res1)
## [1] 2945    6
apply(deg.res1,2, function(x) sum(is.na(x)))
##       baseMean log2FoldChange          lfcSE           stat         pvalue 
##              0              0              0              0              0 
##           padj 
##           1142

? 這里padj中有1142個NA值是因為使用results()提取差異分析結果時沛硅,大于alpha值(這里是0.1)的矯正后p-value都會被當做是NA。因此绕辖,我們將這些padj值都設為1

deg.res1$padj[is.na(deg.res1$padj)] <- 1
table(is.na(deg.res1$padj))
## 
## FALSE 
##  2945
summary(deg.res1)
## 
## out of 2945 with nonzero total read count
## adjusted p-value < 0.1
## LFC > 0 (up)       : 102, 3.5%
## LFC < 0 (down)     : 215, 7.3%
## outliers [1]       : 0, 0%
## low counts [2]     : 0, 0%
## (mean count < 4)
## [1] see 'cooksCutoff' argument of ?results
## [2] see 'independentFiltering' argument of ?results
plotMA(deg.res1)
使用MA-plot查看fold change與read counts的關系

排序后以log2FoldChange絕對值大于1摇肌, padj小于0.05為條件篩選顯著的差異表達基因

deg.ord1 <- deg.res1[order(deg.res1$padj, decreasing = F),]
deg.sig1 <- subset(deg.ord1,abs(deg.ord1$log2FoldChange)>1 & deg.ord1$padj<0.05)
deg.sig1
## log2 fold change (MLE): group_list MM vs WW 
## Wald test p-value: group_list MM vs WW 
## DataFrame with 217 rows and 6 columns
##              baseMean    log2FoldChange             lfcSE              stat
##             <numeric>         <numeric>         <numeric>         <numeric>
## 2500 159.774533763595 -4.11069945121082 0.432943287486228 -9.49477580557611
## 1212 112.711030407211  3.96456274705605 0.449008108800994  8.82960166942819
## 1917  303.58162963147  3.45479344900962 0.406885893259752  8.49081648255649
## 490   71.687159921068 -6.18926587678444 0.753506435554632 -8.21395224345857
## 1317 222.718984861955 -3.03292643435534  0.37190983516799 -8.15500464779421
## ...               ...               ...               ...               ...
## 1792 5.98829479907705 -4.93244157414254  1.77616534224116 -2.77701712607386
## 98   6699.69196582045  1.19245883058489 0.429894831042278   2.7738384936934
## 295  6699.58197403621  1.19259109051591 0.429948214187822  2.77380170718637
## 662  5.15806783175131 -5.09298667756621  1.83903942690847 -2.76937329512713
## 899  18.1185589826749 -3.43948745771197  1.24400277511213 -2.76485513257955
##                    pvalue                 padj
##                 <numeric>            <numeric>
## 2500 2.20685744092375e-21 3.97896396598552e-18
## 1212 1.05049159823894e-18 9.47018175812401e-16
## 1917 2.05190369014182e-17 1.23319411777524e-14
## 490  2.14024730609951e-16 9.64716473224354e-14
## 1317  3.4916644951535e-16 1.25909421695235e-13
## ...                   ...                  ...
## 1792  0.00548602882496584    0.046221074632773
## 98    0.00553991737467495   0.0462481504691228
## 295    0.0055405438166004   0.0462481504691228
## 662   0.00561642447454876   0.0466654992055826
## 899   0.00569480805304419   0.0468846526010898

? 至此,便篩選出了217個MM組和WW組之間的顯著差異表達基因仪际。至于后續(xù)的可視化分析則是因課題而異了围小,等以后有空了再補坑吧!

? 有同學可能注意到树碱,雖然我們的樣本有多個組肯适,但在差異分析時進行的還是pairwise的分析,為什么我們不可以三個組一起分析呢成榜?學過ANOVA的同學應該都知道框舔,ANOVA就是可以應對這種多組差異分析的情況。但要注意的是赎婚,ANOVA只可以告訴我們對于某個基因在這三組中是否存在差異刘绣,想要找出是哪一組有其他組別有差異還是需要進行pairwise t-test之類的分析。所以挣输,在這里我們兩組兩組地進行分析正是出于這個考慮额港,并且有更方便我們解釋差異分析的結果,說明在A組基因的表達量相對于B組的是上調(diào)還是下調(diào)歧焦。另外移斩,本文的差異分析還是處于單因子水平(只有一個變量),至于多因子的差異分析以后研究透了再和大家進行分享绢馍。

一點想法:

? 最近想要整理這些轉錄組常規(guī)分析流程向瓷,一來是因為之前學習的時候很零碎,想借此機會系統(tǒng)性地整理這方面的知識舰涌。另一方面也是因為我感覺平時做濕實驗的時候都講究個protocol猖任,一些基本的實驗,像PCR這種我們只要根據(jù)具體實驗調(diào)整一些參數(shù)就都可以跟著protocol來做了瓷耙。所以朱躺,一些經(jīng)典的生信分析也可以有一個這樣的“protocol”,要用的時候調(diào)整參數(shù)就可以了搁痛。

參考文章:

  1. https://web.stanford.edu/class/bios221/labs/rnaseq/lab_4_rnaseq.html
  2. https://www.researchgate.net/post/How_to_interpret_results_of_DESeq2_with_more_than_two_experimental_groups
  3. https://bioconductor.org/packages/release/bioc/vignettes/DESeq2/inst/doc/DESeq2.html#htseq
  4. https://bioconductor.org/packages/release/bioc/manuals/DESeq2/man/DESeq2.pdf

完长搀。

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市鸡典,隨后出現(xiàn)的幾起案子源请,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件谁尸,死亡現(xiàn)場離奇詭異舅踪,居然都是意外死亡,警方通過查閱死者的電腦和手機良蛮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進店門抽碌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人决瞳,你說我怎么就攤上這事货徙。” “怎么了瞒斩?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵破婆,是天一觀的道長。 經(jīng)常有香客問我胸囱,道長祷舀,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任烹笔,我火速辦了婚禮裳扯,結果婚禮上,老公的妹妹穿的比我還像新娘谤职。我一直安慰自己饰豺,他們只是感情好,可當我...
    茶點故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布允蜈。 她就那樣靜靜地躺著冤吨,像睡著了一般。 火紅的嫁衣襯著肌膚如雪饶套。 梳的紋絲不亂的頭發(fā)上漩蟆,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天,我揣著相機與錄音妓蛮,去河邊找鬼怠李。 笑死,一個胖子當著我的面吹牛蛤克,可吹牛的內(nèi)容都是我干的捺癞。 我是一名探鬼主播,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼构挤,長吁一口氣:“原來是場噩夢啊……” “哼髓介!你這毒婦竟也來了?” 一聲冷哼從身側響起儿倒,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤版保,失蹤者是張志新(化名)和其女友劉穎呜笑,沒想到半個月后夫否,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體彻犁,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年凰慈,在試婚紗的時候發(fā)現(xiàn)自己被綠了汞幢。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡微谓,死狀恐怖森篷,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情豺型,我是刑警寧澤仲智,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站姻氨,受9級特大地震影響钓辆,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜肴焊,卻給世界環(huán)境...
    茶點故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一前联、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧娶眷,春花似錦似嗤、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至豌注,卻和暖如春伤塌,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背幌羞。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工寸谜, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人属桦。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓熊痴,卻偏偏與公主長得像,于是被迫代替她去往敵國和親聂宾。 傳聞我的和親對象是個殘疾皇子果善,可洞房花燭夜當晚...
    茶點故事閱讀 42,877評論 2 345