edgeR包主要是用于利用来自不同技术平台的read数(包括RNA-seq,SAGE或者ChIP-seq等)来鉴别差异表达或者差异标记(ChIP-seq)。主要是利用了多组实验的精确统计模型或者适用于多因素复杂实验的广义线性模型。所以有时作者也把前者叫做“经典edgeR”, 后者叫做”广义线性模型 edgeR“。这里定义的read数是可以指基因水平、外显子水平、转录本水平或者标签水平等,这个由用户根据自己数据分析的实际需要而定。这里作者也列举了一些差异表达鉴定方面的文献:包括edgeR刚发布时的文献–“edgeR: a Bioconductor package for differential expression analysis of digital gene expression data”以及后来的一些改进文章。
1 2 |
source("http://bioconductor.org/biocLite.R") biocLite("edgeR") |
快速开始
对一个软件不是很熟悉时,一般都可以看看它的快速简介,就能进行运算了。edgeR的基本计算步骤就是: 经典edgeR操作步骤:
- 先读取read数(比如说RNA-seq数据,可以利用Bowtie、Tophat及htseq-counts这么个流程获取),一个行为基因(或者其它特征)列为样本元素为read数的矩阵;
- 构建分组变量,主要是对样本进行分组(分为处理组和对照组,利用factor函数)
- 建立基因表达列表,利用DEGList函数, 参数counts为read数矩阵,group为上一步的分组变量,还有其它参数,后面有介绍
- 估计与计算各种其它参数,计算各样本内的标准化因子(calcNormFactors函数)(由于RNA-seq测序过程中技术因素可能会产生样本特异性效应,所以标准化一般是在这种情况下才使用的,也主要是测序深度即和文库大小有关,可以通过DEGList函数的lib.size=colSums(counts)来设置。),估计生物学变异系数(BCV,Biological cofficient of variation, 在经典edgeR中,BCV就是负二项分布中的离散度的平方根,所以估计BCV也是估计离散度,edgeR先认为所有的基因有同样的离散度,estimateCommonDisp算得,在此基础上计算基因间范围内的离散度,estimateTagwiseDisp算得)
通过检验来计算鉴别差异表达基因
1 2 3 4 5 6 7 8
x <- read.delim("fileofcounts.txt",row.names="Symbol") # 读取reads count文件 group <- factor(c(1,1,2,2)) #分组变量 前两个为一组, 后一个为一组, 每个有两个重复 y <- DGEList(counts=x,group=group) # 构建基因表达列表 y <- calcNormFactors(y) # 计算样本内标准化因子 y <- estimateCommonDisp(y) #计算普通的离散度 y <- estimateTagwiseDisp(y) #计算基因间范围内的离散度 et <- exactTest(y) # 进行精确检验 topTags(et) # 输出排名靠前的差异表达基因信息
广义线性模型 edgeR操作步骤:
- 也是要读取raw read count 数据(同上);
- 构建实验设计变量 也就是一个矩阵;
- 构建基因表达列表并进行标准化处理
- 利用实验设计变量及基因表达列表来估计估计生物变异的离散度(dispersion)、基因间离散度估算
拟合广义线性模型并利用似然比检验来鉴别差异表达基因
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
rawdata <- read.delim("TableS1.txt", check.names=FALSE, stringsAsFactors=FALSE); #读取原始文件 y <- DGEList(counts=rawdata[,4:9], genes=rawdata[,1:3]); # 建立基因表达列表 y$samples$lib.size <- colSums(y$counts); #设置各个样本的库大小 y <- calcNormFactors(y); #利用库的大小来进行标准化TMM Patient <- factor(c(8,8,33,33,51,51)); #因素1 Tissue <- factor(c("N","T","N","T","N","T")); #因素2 data.frame(Sample=colnames(y),Patient,Tissue); design <- model.matrix(~Patient+Tissue); #建立分组变量 rownames(design) <- colnames(y); y <- estimateGLMCommonDisp(y, design, verbose=TRUE); #估计离散度 y <- estimateGLMTrendedDisp(y, design); y <- estimateGLMTagwiseDisp(y, design); fit <- glmFit(y, design); #拟合广义线性模型 lrt <- glmLRT(fit); topTags(lrt); #利用似然比检验来检验差异表达基因 topTags(lrt); #输出靠前的差异表达基因
实例:
下面通过文档中提供的一个RNA-seq的例子来具体说下edgeR的使用流程(经典edgeR),GLM方法的就不讲了,更复杂的见edgeR的文档。 数据: pnas_expression 文本数据
|
|
关于样本没有重复时该怎么做
当然最好还是有重复,实在没有重复的话,edgeR的文档也有提到,那就是选择一个认为合理的离散度的值。 通常如果是实验控制的好的人类数据,那么选择BCV=0.4,比较好的模式生物选择BCV=0.1,技术重复的话选择BCV=0.1。 这里作者举了个简单的模拟数据的例子:
|
|