edgeR简介与安装
1.1 什么是edgeR?
edgeR,说白了,就是一个专为RNA-seq差异表达分析打造的R包。它的核心思想很简单:用负二项分布模型来处理测序数据里的过度离散问题。
我记得刚接触转录组分析那会儿,大家还在用简单的t检验。结果假阳性多到让人头疼。后来才发现,测序数据天生就有“过度离散”——基因表达在生物学重复间的波动比泊松分布假设的要大。edgeR正是专门解决这个问题的。
我个人习惯,拿到一个新数据集的第一件事就是用edgeR快速扫一遍差异基因。它速度快,内存占用也小,很适合做探索性分析。
1.2 核心统计模型
edgeR用的模型叫“经验贝叶斯负二项模型”。名字听起来唬人,其实就两个关键点:
- 负二项分布:每个基因的表达量服从NB(μ, φ),其中μ是均值,φ是离散度。离散度越大,数据越“散”。
- 经验贝叶斯:多个基因共享信息,对离散度做收缩估计。说白了,就是把所有基因的离散度拉向一个共同的先验,这样低表达基因的估计不会太离谱。
我在项目中遇到过这样的情况:测了三组生物学重复,其中一组有个明显的异常样本。如果不做离散度收缩,那个基因的p值会被严重低估。用了edgeR的默认方法,结果扎实很多。
1.3 安装环境准备
edgeR是Bioconductor生态的一员。所以安装前需要先搞定BiocManager。你的R版本最好别太老,3.5以上的基本都行。
# 安装BiocManager(如果还没有)
install.packages("BiocManager")
# 通过BiocManager安装edgeR
BiocManager::install("edgeR")
options(repos = c(CRAN = "https://cloud.r-project.org")),不然下载可能很慢。
1.4 验证安装
装完之后,加载一下看有没有报错。我一般会用sessionInfo()看看版本信息。
library(edgeR)
sessionInfo()
如果看到类似这样的输出,就说明安装成功了:
R version 4.3.1 (2023-06-16)
Platform: x86_64-pc-linux-gnu (64-bit)
other attached packages:
[1] edgeR_4.0.0 limma_3.58.0
1.5 核心数据结构:DGEList
edgeR处理数据的起点是DGEList对象。你只需要准备一个基因×样本的计数矩阵,加上分组信息,就能构建它。
counts <- matrix(rpois(1000, lambda = 10), nrow = 100, ncol = 10)
group <- factor(rep(c("Ctrl", "Treat"), each = 5))
y <- DGEList(counts = counts, group = group)
y
输出会显示样本数、基因数、库大小等信息。你想想看,这个对象就像是一个数据容器,后面所有的归一化、离散度估计、差异检验都是基于它进行的。
colnames(counts)和group的对应关系。少一个“Ctrl”写错,整个分析就偏了。
1.6 edgeR的工作流程总览
下面这张SVG图总结了你马上要经历的几个步骤。每一次参数调整,都会影响中间某个环节的输出。我会在后面的章节中逐一演示。
1.7 参数调整的意义
你仔细看上面的SVG图,绿色方框后面标注了“参数影响区域”。后面每修改一个参数(归一化方法、离散度先验强度、检验类型),都会导致最终的差异基因列表发生变化。这正是本课程的核心——让你直观看到参数变动带来的可视化输出差异。
举个例子:estimateDisp函数里有个参数trend.method,可选"none"、"movingave"、"loess"。我曾经在一次项目里发现,选"loess"和选"none"相比,高表达基因的离散度会收缩得更厉害,直接导致两组中几个高表达基因的p值变化了三个数量级。要是没有可视化对比,你根本不会注意到这个细节。
1.8 避坑指南
- 零计数基因:edgeR会自动过滤掉在所有样本中表达量很低的基因。但有时候过滤阈值需要调整。我通常会用
filterByExpr看默认过滤情况,再根据实际数据微调。 - 库大小差异大:如果样本间总计数相差超过3倍,建议使用TMM归一化(默认就是TMM)。但极端情况下(比如某个样本只有其他样本的1/10),最好先检查一下那个样本是不是有问题。
- 批量效应:edgeR本身不支持直接加入批次校正。我一般先用
limma::removeBatchEffect处理后再转为DGEList,但要注意这样会损失一些自由度。
小结
这一章我们把edgeR的“家底”摸了一遍:它是什么、为什么需要它、怎么装、怎么做。更重要的是,我们理清了整个数据分析流程中的参数敏感节点。
接下来,我会带你去看看默认参数下的可视化效果,然后再一个个改参数,看它怎么变。准备好了吗?