簡單使用DESeq2/EdgeR做差異分析


簡單使用DESeq2/EdgeR做差異分析

DESeq2和EdgeR都可用於做基因差異表達分析,主要也是用於RNA-Seq數據,同樣也可以處理類似的ChIP-Seq,shRNA以及質譜數據。

這兩個都屬於R包,其相同點在於都是對count data數據進行處理,都是基於負二項分布模型。因此會發現,用兩者處理同一組數據,最后在相同閾值下篩選出的大部分基因都是一樣的,但是有一部分不同應該是由於其估計離散度的不同方法所導致的。

DESeq2的使用方法:

  1. 輸入矩陣數據,行名為sample,列名為gene;DESeq2不支持無生物學重復的數據,因此我選擇了2個樣本,3個生物學重復的數據;並對count data取整(經大神指點,這里需要說明下,我的測試數據readcount是RSEM定量的結果,並不是常見的htseq-count的結果,所以count值會有小數點,而DESeq2包不支持count數有小數點,所以這里需要round取整)。

    database_all <- read.table(file = "readcount", sep = "\t", header = T, row.names = 1) database <- database_all[,1:6] #type <- factor(c(rep("LC_1",3), rep("LC_2",3))) database <- round(as.matrix(database))
  2. 設置分組信息以及構建dds對象

    condition <- factor(c(rep("LC_1",3), rep("LC_2",3))) coldata <- data.frame(row.names = colnames(database), condition) dds <- DESeqDataSetFromMatrix(countData=database, colData=coldata, design=~condition)
  3. 使用DESeq函數進行估計離散度,然后進行標准的差異表達分析,得到res對象結果

    dds <- DESeq(dds) res <- results(dds)
  4. 最后設定閾值,篩選差異基因,導出數據

    table(res$padj <0.05) res <- res[order(res$padj),] resdata <- merge(as.data.frame(res), as.data.frame(counts(dds, normalized=TRUE)),by="row.names",sort=FALSE) write.csv(resdata,file = "LC_1_vs_LC_2.csv")

EdgeR的使用方法:

  1. 跟DESeq2一樣,EdgeR輸入矩陣數據,行名為sample,列名為gene;DESeq2不支持無生物學重復的數據,因此我選擇了2個樣本,3個生物學重復的數據。

    exprSet_all <- read.table(file = "readcount", sep = "\t", header = TRUE, row.names = 1, stringsAsFactors = FALSE) exprSet <- exprSet_all[,1:6] group_list <- factor(c(rep("LC_1",3), rep("LC_2",3)))
  2. 設置分組信息,去除低表達量的gene以及做TMM標准化

    exprSet <- exprSet[rowSums(cpm(exprSet) > 1) >= 2,] exprSet <- DGEList(counts = exprSet, group = group_list) exprSet <- calcNormFactors(exprSet)
  3. 使用qCML(quantile-adjusted conditional maximum likelihood)估計離散度(只針對單因素實驗設計

    exprSet <- estimateCommonDisp(exprSet) exprSet <- estimateTagwiseDisp(exprSet)
  4. 尋找差異gene(這里的exactTest函數還是基於qCML並且只針對單因素實驗設計),然后按照閾值進行篩選即可

    et <- exactTest(exprSet) tTag <- topTags(et, n=nrow(exprSet)) tTag <- as.data.frame(tTag) write.csv(tTag,file = "LC_1_vs_LC_2_edgeR.csv")

Summary

以上我主要針對單因素兩兩比較組進行差異分析,其實DESeq2和EdgeR兩個R包都可以對多因素進行差異分析。

  1. DESeq2修改以上代碼的分組信息design參數以及在差異分析results函數中添加所選定的分組因素,其他代碼基本一樣,具體參照DESeq2手冊

  2. EdgeR則需要用Cox-Reid profile-adjusted likelihood (CR)方法來估算離散度,y <- estimateDisp(y, design)或者分別使用三個函數(y <- estimateGLMCommonDisp(y, design),y <- estimateGLMTrendedDisp(y, design), )y <- estimateGLMTagwiseDisp(y, design);然后差異表達分析也跟單因素分析不同,主要使用generalized linear model (GLM) likelihood ratio test 或者 quasi-likelihood(QL) F-test,具體代碼可以參照EdgeR手冊。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM