总结edgeR差异分析。
1. 有重复的差异分析
1. 构建edgeR的DGEList对象,并过滤
1 2 3 4 5 6 7 8
| library(edgeR) exprSet <- read.csv("counts.csv", header=T) group_list <- rep(c("Control", "FU"), each = 3)
exprSet <- exprSet[rowSums(exprSet) > 0,]
dge <- DGEList(counts = exprSet,group = factor(group_list))
|
保留在至少在两个样本中cpm值大约1的基因
1 2 3 4
| keep <- rowSums(cpm(dge)>1) >= 2 table(keep) dge <- dge[keep, , keep.lib.sizes=FALSE] dge$samples$lib.size <- colSums(dge$counts)
|
归一化基因表达分布
1
| dge <- calcNormFactors(dge)
|
假设数据符合正态分布,构建线性模型,0代表x线性模型的截距为0。
1 2 3
| design <- model.matrix(~0+factor(group_list)) rownames(design) <- colnames(dge) colnames(design) <- levels(factor(group_list))
|
2. 差异表达分析
计算线性模型的参数,并拟合线性模型
1 2 3 4
| dge <- estimateGLMCommonDisp(dge,design) dge <- estimateGLMTrendedDisp(dge, design) dge <- estimateGLMTagwiseDisp(dge, design) fit <- glmFit(dge, design)
|
进行差异分析
1
| lrt <- glmLRT(fit, contrast=c(-1,1))
|
3. 提取过滤差异分析结果
1 2
| DEG <- topTags(lrt, n=nrow(dge)) DEG <- as.data.frame(DEG)
|
2. 无重复edgeR差异分析
1. 数据过滤
1 2 3 4 5 6 7 8 9
| library(edgeR)
count <- read.csv(file = "counts.csv",row.names = 1,header = T)
colnames(count) <- c("Control","treat")
count <- count[rowSums(count[,1:2])>0,] count <- as.matrix(count)
|
2. 构建DGEList对象
1 2 3 4 5 6 7 8 9
| group_list <- c("Control","treat") dge <- DGEList(counts = count, group = factor(group_list))
keep <- rowSums(cpm(dge)>1) >= 1 table(keep) dge <- dge[keep, , keep.lib.sizes=FALSE]
|
3. 标准化
考虑到测序深度不同, 我们需要对其进行标准化, 避免文库大小不同导致的分析误差。
edgeR里默认采用TMM(trimmed mean of M-values) 对配对样本进行标准化。
1
| dge <- calcNormFactors(dge)
|
4. 差异表达分析
根据经验给定一个值(BCV, square-root-dispersion). edgeR给的建议是, 如果你是人类数据, 且实验做的很好(无过多的其他因素影响), 设置为0.4, 如果是遗传上相似的模式物种, 设置为0.1, 如果是技术重复, 那么设置为0.01。
bcv值大,得到的差异基因数量就少,因此可以根据需求设置。
1 2
| bcv <- 0.2 et <- exactTest(dge, dispersion=bcv^2)
|
用decideTestsDGE看下有多少基因上调, 多少基因下调. 设置p.value=0.05。
1 2 3 4
| gene1 <-decideTestsDGE(et,p.value =0.05,lfc =0) summary(gene1) DEG <- topTags(et, n=nrow(dge)) DEG <- as.data.frame(DEG)
|
参考:
- https://blog.csdn.net/u012110870/article/details/102804557