简单使用limma做差异分析
首先需要说明的是,limma是一个非常全面的用于分析芯片以及RNA-Seq的差异分析,按照其文章所说:
limma is an R/Bioconductor software package that provides an integrated solution for analysing data from gene expression experiments.
在这我只是对其中的一种情况进行简单的总结,比如这个包可以处理RNA-Seq数据,我简单的以两个比较组进行分组为例,至于其他分组情况,请看limma说明文档,有非常详细的说明,非常亲民。
-
首先我们还是输入count矩阵,这里也跟其他差异分析R包一样,不要输入已经标准化的数据。顺便也加载下edgeR这个R包
library(limma) library(edgeR) counts <- read.table(file = "conut_all.txt", sep = " ", header = TRUE, row.names = 1, stringsAsFactors = FALSE)
-
接着按照文档的说明以及limma包的习惯,我们需要对count进行标准化以及转化为log2的值,这里标准化的方法为TMM,使用edgeR里面的calcNormFactors函数即可
dge <- DGEList(counts = counts) dge <- calcNormFactors(dge) logCPM <- cpm(dge, log=TRUE, prior.count=3)
这里prior.count值我粗略理解为是为了防止log2()遇到过于小的值
-
然后跟其他包一样,设置分组信息
group_list <- factor(c(rep("control",2), rep("siSUZ12",2))) design <- model.matrix(~group_list) colnames(design) <- levels(group_list) rownames(design) <- colnames(counts)
-
接下来就是常规的差异分析
fit <- lmFit(logCPM, design) fit <- eBayes(fit, trend=TRUE) output <- topTable(fit, coef=2,n=Inf) sum(output$adj.P.Val<0.05)
到这里为止,我们主要是用了limma包里对RNA-Seq差异分析的limma-trend方法,该方法主要适用于样本间测序深度基本保持一致的情况,也就是说两个样本的文库(reads数目)大小相差的不悬殊(说明文档中是默认3倍以内?)
当文库大小在样本间变化幅度相当大的话,可以使用limma的voom方法,可按照下面的代码流程:
-
count数据的输入以及数据标准化还是跟之前的一样
counts <- read.table(file = "conut_all.txt", sep = " ", header = TRUE, row.names = 1, stringsAsFactors = FALSE) dge <- DGEList(counts = counts) dge <- calcNormFactors(dge)
-
还是一样需要分组信息
group_list <- factor(c(rep("control",2), rep("siSUZ12",2))) design <- model.matrix(~group_list) colnames(design) <- levels(group_list) rownames(design) <- colnames(counts)
-
接下来进行voom转化
v <- voom(dge, design, plot=TRUE)
其实可以不进行TMM标准化,直接用count数据进行voom转化,如:
v <- voom(counts, design, plot=TRUE)
-
最后就是普通的差异分析过程
fit <- lmFit(v, design) fit <- eBayes(fit) output <- topTable(fit, coef=2,n=Inf) sum(output$adj.P.Val<0.05)
Summary
Limma长久以来就是一个非常流行的差异分析R包,其内容涉及的非常广泛,用于RNA-Seq只是其内容的一小部分,并且使其处理RNA-Seq数据也使用芯片类似线性模型下,并且按照其说法,limma包比其他基于负二项式分布模型的差异分析R包更加的优秀。
其实差异分析不外乎数据的标准化以及统计模型分析差异两个方面的作用,每个差异分析R包都有其自身的优点,个人理解,取舍在于自己的理解以及想法即可。
其实,自己对于limma包的理解还是比较粗浅的