DESeq2与edgeR差异可视化对比教程 - 第2节
负二项分布模型:为什么是它?
做 RNA-seq 差异分析的第一步,你得知道计数数据长什么样。 说白了,RNA-seq 测到的基因计数是离散的,而且方差通常比均值大——这就是 过离散(overdispersion)。 如果用普通的泊松分布去拟合,你会发现 p 值小得离谱,假阳性一大堆。 我当年第一次跑差异分析时就踩过这个坑,结果老板让我重做…
所以 DESeq2 和 edgeR 都用了 负二项分布,它有两个参数:
- 均值(μ)——代表真实表达水平。
- 离散度(dispersion)——描述方差怎么随均值变化。
形式上看,方差 = μ + α·μ²,其中 α 就是离散参数。 这个“额外”的 αμ² 项就是过离散的来源。 两个工具在处理离散度估计上其实思路一致,但算法细节有差别,后面会讲。
标准化方法:median-of-ratios vs TMM
测序深度不同、文库组成不同,直接比原始计数没有意义。 你需要把不同样本拉到同一个“尺子”上。 DESeq2 和 edgeR 用了不同的标准化策略,这是它们最核心的差异之一。
DESeq2 的 median-of-ratios
原理:对每个基因,计算该基因在各样本中的计数与几何均值的比值,然后取所有比值的中位数作为该样本的缩放因子。 这样做的好处是:不受高表达基因的干扰,对低表达和零计数也比较鲁棒。 我个人的习惯是:当实验组之间组成差异较大(比如 treated vs control 中有很多基因关闭),median-of-ratios 会更稳定。
edgeR 的 TMM(Trimmed Mean of M-values)
TMM 核心思想:先选一个参考样本(通常是表达量中等的),然后计算其他样本相对于参考样本的 log2 倍数变化(M 值)和平均表达量(A 值),对 M 值进行“修剪”——去掉上下 30% 的极端值,再求加权平均值,最后得到缩放因子。 这个方法对高表达基因的异常倍数变化不敏感,适合文库大小差异大的情况。 有一次我处理肿瘤 vs 正常组织的数据,文库总量差了 3 倍,TMM 给的结果比 median-of-ratios 更平稳。
| 特性 | DESeq2 (median-of-ratios) | edgeR (TMM) |
|---|---|---|
| 缩放因子计算 | 每个基因比值的中位数 | 修剪后的 M 值加权平均 |
| 对极端值的敏感性 | 低(中位数天然稳健) | 低(修剪后加权) |
| 处理零计数的能力 | 好(比值跳过零) | 一般(需要过滤低表达) |
| 适用场景 | 组成差异大、重复数多 | 文库大小差异大、重复数少 |
plotMDS() 看一眼样本聚类,确认参考样本合理。
统计检验策略:差异表达判断
标准化之后,两组的均值有了可比性,接着就要判断差异是否显著。 这里 DESeq2 和 edgeR 走了不同的技术路线。
DESeq2 的 Wald 检验与似然比检验
Wald 检验:直接估计组间倍数变化的标准误,然后计算 z 统计量。 速度快,适合简单两两比较。 似然比检验(LRT):比较完整模型(含分组变量)和简化模型(不含分组变量)的似然值,适合多因素设计(比如 time + treatment)。 我建议你做时间序列或杂交设计时用 LRT,否则 Wald 足够用。
edgeR 的精确检验与准似然 F 检验
精确检验:直接用负二项分布计算两组计数的精确 p 值,适合两组比较,对小样本很友好。 准似然 F 检验(QL F-test):在精确检验基础上引入准似然色散(quasi-likelihood dispersion),对离散度估计更保守,尤其适合有技术重复或批次效应的数据。 我的经验:如果你只有 2~3 个生物学重复,用精确检验更容易出结果;如果重复数 ≥ 4,QL F-test 更稳健。
# DESeq2 的 Wald 检验示例
dds <- DESeq(dds)
res <- results(dds, contrast = c("condition", "treated", "control"))
# edgeR 的精确检验示例
fit <- exactTest(y, pair = c("control", "treated"))
top <- topTags(fit)
你想想看,两个工具底层统计模型一样(负二项分布), 但标准化和检验方式的不同,直接影响了最终的差异基因列表。 实际项目中,我常常两个都跑一遍,取交集或者分别验证,毕竟没有绝对的“最优”。