1. 课程概述:为什么选择DESeq2和edgeR进行RNA-seq可视化?
刚接触RNA-seq那会儿,我一度很困惑。拿到一个计数矩阵,几万行基因,几十个样本,怎么才能从这些数字里看出生物学故事?后来慢慢明白,光靠p-value列表是不够的——你得把数据「画」出来,才能看到全貌。而说到RNA-seq的可视化,有两个工具绕不过去:DESeq2和edgeR。
这两个名字你肯定听过。但为什么要学它们?市面上工具那么多,凭什么它们成了RNA-seq可视化的事实标准?这章我就跟你聊聊背后的道理。
1.1 RNA-seq数据到底特别在哪?
你想想看,RNA-seq数据不是普通连续数值。它是离散的计数——每个基因在每个样本里被测序仪捕获了多少次。这个特性带来一个麻烦:过离散(overdispersion)。
什么意思?简单说,就是数据的变异比标准泊松分布预期的要大得多。我记得第一次做差异分析时,直接用泊松模型跑了一轮,结果假阳性多到没法看。后来才搞清楚——RNA-seq数据的方差-均值关系不是线性的,低表达基因噪音大,高表达基因稳定一些。
这就引出一个核心问题:用什么统计模型来描述这种计数数据?
- 泊松分布:假设均值等于方差,对RNA-seq来说太理想化
- 负二项分布:引入离散参数,允许方差大于均值,更贴近真实
- 其他方法:如非参数检验、对数转换+线性模型,但要么不够灵敏,要么丢失了计数结构
关键事实:DESeq2和edgeR都基于负二项分布模型。这不是巧合——是这个模型的灵活性和生物学合理性,让它们成为行业标杆。
1.2 负二项分布:DESeq2和edgeR的共同根基
负二项分布有两个参数:均值(mu)和离散度(dispersion)。DESeq2和edgeR都用这个框架,但它们在如何估计离散度上走了不同的路。
我个人习惯把这个模型想象成「带权重的收缩」。每个基因的方差信息不仅来自自身,还从表达量相近的基因那里「借」一点力量。这在样本量少的时候尤其重要。你只有2-3个重复,直接算方差根本不靠谱——收缩估计能救命。
下面这个表帮你快速看清两家底层的差异:
| 特性 | DESeq2 | edgeR |
|---|---|---|
| 模型核心 | 负二项 + 稳健离群值处理 | 负二项 + 精确检验/似然比检验 |
| 离散度估计 | 经验贝叶斯收缩(先验+似然) | 经验贝叶斯 + 加权似然 |
| 归一化方法 | median of ratios | TMM(trimmed mean of M-values) |
| 处理小样本 | 稳健,3个重复就能跑 | 也可以,但离散度估计波动稍大 |
| 检验方法 | Wald test + LRT | exact test + glmQLFTest + LRT |
一个小经验:我刚开始用edgeR时,总搞不清exact test和glmQLFTest的区别。其实很简单——有复杂设计(多因素、批次效应)就用glmQLFTest,简单两组比较exact test就够了。
1.3 各有千秋:DESeq2 vs edgeR 核心差异
说实话,两个工具90%的分析结果高度一致。但在某些场景下,它们各有独到之处。
DESeq2的强项:它对离群值的处理非常稳健。我在项目中遇到过一组样本,其中一个重复明显因为建库问题产生了异常读数。DESeq2自带的离群值替代机制(如果某个基因在某个样本里异常高/低,会自动用Cook's distance标记并替换)让分析没有崩掉。换edgeR的话,得手动处理这个样本。
edgeR的强项:它的检验框架更灵活。尤其是glmQLFTest(准似然比检验),在处理多因素设计和相互作用效应时,我觉得比DESeq2的LRT更直接一些。另外,edgeR对超大规模数据(几百个样本)的计算效率通常更高。
注意:这不是说谁好谁差。我自己的经验是——初学者先用DESeq2,它的默认参数更保守,不容易踩坑。当你需要更精细地控制模型时,再回头看edgeR。
来看一个简单的加载和可视化示例,感受一下两种工具的风格差异:
library(DESeq2)
dds <- DESeqDataSetFromMatrix(countData = counts,
colData = metadata,
design = ~ condition)
dds <- DESeq(dds)
res <- results(dds)
plotMA(res, ylim = c(-5, 5))
library(edgeR)
dge <- DGEList(counts = counts)
dge <- calcNormFactors(dge)
design <- model.matrix(~ condition)
dge <- estimateDisp(dge, design)
fit <- glmQLFit(dge, design)
qlf <- glmQLFTest(fit, coef = 2)
plotMD(qlf)
看到没?流程高度相似——数据准备、归一化、建模、检验、画图。但每一步的默认选择和参数设计不同,导致最终结果的稳健性和解读方式有差异。
1.4 可视化:从数据到故事的桥梁
差异基因列表只是起点。我常说一句话:「p-value告诉你差异是否显著,图告诉你差异是否漂亮」。
可视化在RNA-seq分析中扮演三个角色:
- 质控可视化:PCA图、样本聚类热图、counts分布箱线图——帮你判断数据质量、批次效应、离群样本
- 差异表达可视化:MA图、火山图、热图——展示差异基因的整体分布和表达模式
- 结果解读可视化:单个基因的表达箱线图、GO富集图、GSEA曲线——把数据翻译成生物学结论
DESeq2和edgeR都内置了核心绘图函数(plotMA / plotMD、plotPCA / plotMDS、heatmap.2 / pheatmap配合),但真正好用的可视化往往需要你手动组合ggplot2、pheatmap、ComplexHeatmap等扩展包。
这就是这门课要做的事——不只是教你怎么跑DESeq2和edgeR,而是帮你建立一套从数据到可视化叙事的完整工作流。每个图什么时候用、怎么解释、如何避坑,我都会结合真实项目经验来讲。
1.5 选择框架:什么时候用谁?
你不必在项目开始前就「站队」。我自己的做法是:
- 探索性分析:两个都跑一下,看看结果是否一致。如果差异基因列表重合度低于80%,说明数据可能有隐藏问题
- 正式报告:选一个作为主要工具,另一个作为验证。我个人在论文里常用DESeq2,因为它的离群值处理机制让审稿人更放心
- 复杂设计:多因素、时间序列、配对样本——edgeR的glmQLFTest框架更顺手
- 超大规模数据(>100样本):edgeR计算速度更快,内存占用更低
下面这张图总结了我自己用的决策逻辑:
从这张图你可以看到,两条路径最终汇聚到可视化与生物学解读。也就是说,不管你选了哪个工具,可视化都是把统计结果转化为科学结论的关键一步。而这正是这门课要带你深入的地方。
我自己的小习惯:新项目开始时,我会用DESeq2跑一套完整的分析流程 + 可视化,然后用edgeR验证关键基因。如果两者结果打架,我会深入检查数据质量——通常问题出在样本或批次上,而不是工具本身。
1.6 避坑指南:我踩过的几个坑
最后分享几个我用这两个工具时踩过的坑,希望能帮你省点时间:
- 归一化方法不同导致结果差异——DESeq2的median of ratios vs edgeR的TMM,虽然思路相近,但在某些极端数据(比如大量零表达基因)下会给出不同的标准化因子。我曾经因为没注意到这一点,在两个工具之间反复调试,浪费了三天。解决办法:检查normalization factor的分布,如果差异过大,手动排查低表达基因的过滤阈值。
- 离群值处理机制不同——DESeq2会自动替换离群值,edgeR不会。如果你用edgeR,一定要跑
plotMDS检查样本聚类,手动剔除异常样本。 - 不要盲目相信默认参数——尤其是离散度估计的
minDisp参数。我在一个低生物学变异的项目中,edgeR的默认离散度下限不够低,导致假阳性增加。调低minDisp后结果才合理。 - 可视化不只是为了论文插图——我建议在分析的每个阶段都画图:原始counts分布、标准化后的PCA、差异基因的MA图、关键基因的表达箱线图。画图的过程就是发现问题的过程。
一个很实在的建议:不要等分析全跑完了再画图。每做一步,画一张图,看一眼——这是我从生物信息学老前辈那里学到的习惯,非常管用。