在對基因表達數據進行分析時,常用的R包有limma,DESeq2/DESeq,edgeR,還有一些不常用的,比如SAMSeq,NOIseq以及基於Linux的Cuffdiff等。
在之前的GEO分析教程中,我使用的是limma包,它是原理是基於連續數據的線性模型,對基因表達數據進行擬合分析,最初是被設計用來分析晶片表達數據分析;DESeq2在之前對TCGA數據分析的教程中,有展示具體用法,其是基於負二項分布對數據表達進行分析;edgeR同樣也可以對基因表達數據進行分析,其原理與DESeq2較為類似。關於以上方法具體的差異以及原理,後面還會有詳細的筆記介紹。接下裡會對同一組數據,利用上述三種不同的方法進行分析,直觀的觀察三者之間的差異。
本次使用的TCGA數據,是5例cancer和5例normal組織的RNAseq數據。
1. 安裝與加載包
if (!requireNamespace("BiocManager", quietly = TRUE)) install.packages("BiocManager")
BiocManager::install("edgeR")library(edgeR)
2.加載數據與預處理
load(file="expressMatrix.Rdata")group=rep(c('cancer',"normal"),c(5,5))cData=data.frame(group=as.factor(group))rownames(cData)=colnames(expressMatrix)d<-DGEList(counts = expressMatrix,group = cData$group)
3. 數據過濾
keep_gene<-rowSums(cpm(d)>1)>=2table(keep_gene)d<-d[keep_gene,keep.lib.size=F]這個是過濾以及normalized之後結果的可視化,10組數據整體表達較為一致
4.計算
design<-model.matrix(~cData$group)d <- calcNormFactors( d )d <- estimateGLMCommonDisp(d, design)d <- estimateGLMTrendedDisp(d, design)d <- estimateGLMTagwiseDisp(d, design)
fit=glmFit(d,design)lrt<-glmLRT(fit)
5. 獲取分析結果
edgeR_results=topTags(lrt,n=Inf)$tableedgeR_results$adjPvalues=p.adjust(edgeR_results$PValue,method = "BH")
6. 差異基因可視化
學過之前數據挖掘課程的小夥伴,現在火山圖應該以及得心應手了吧。
文中使用的代碼和數據在QQ粉絲交流群(642764332)。下一節講述如何使用DESeq2包對該數據進行差異表達分析。
參考文章: