跳到主要内容

04 工具选择:同一件事 5 个工具怎么选

差异分析可以用 DESeq2、edgeR、limma-voom、NOISeq、baySeq;富集分析可以用 clusterProfiler、DAVID、Enrichr、g:Profiler、WebGestalt;生存分析可以用 survival、survminer、rms、penalized、glmnet。面对这么多选择,新手要么随便选一个("师兄用的 DESeq2 我也用"),要么全部跑一遍然后不知道报哪个。

这一章不是要告诉你"哪个工具最好"——没有最好的工具,只有最适合你的数据和问题的工具。我要给你的是一个决策框架:面对多个选择时,如何系统性地做出合理的决定,并在文章中说明你的选择理由。

决策框架:四维评估

选择工具时考虑四个维度:

维度核心问题权重
数据适配性这个工具的统计假设和我的数据匹配吗?最高
方法学成熟度这个工具经过了充分的基准测试吗?
社区支持文档好不好?出了问题能不能找到答案?
可复现性版本稳定吗?长期维护吗?

数据适配性是第一优先级。 一个统计假设和你的数据不匹配的工具,即使再流行、文档再好,也不应该用。比如 DESeq2 假设大部分基因不差异表达——如果你的实验设计导致大部分基因都变了(如药物处理 vs 对照),这个假设就不成立,应该考虑其他方法。

场景一:差异表达分析——DESeq2 vs edgeR vs limma-voom

这是组学分析中最常见的选择题。三个工具都能做 RNA-seq 差异分析,都基于类似的统计框架(广义线性模型 + 负二项分布),但在细节上有重要差异。

核心差异:

特性DESeq2edgeRlimma-voom
离散度估计基因级 + shrinkage基因级 + tagwise均值-方差趋势
小样本表现好(shrinkage 强)中等较差(需要足够样本估计趋势)
大样本表现好(且速度最快)
复杂设计支持(但语法不如 limma 灵活)支持最灵活(继承 limma 的 design 语法)
速度慢(10000 基因 × 100 样本 ~5 分钟)中等快(同样数据 ~30 秒)
默认输出含 shrinkage 的 log2FC原始 log2FC原始 log2FC
引用量最高(>50000)高(>30000)高(>30000)

选择建议:

  • 样本量 < 5 per group: DESeq2。它的 shrinkage 在小样本时最有效,能稳定离散度估计。
  • 样本量 5-20 per group: 三个都可以,结果通常高度一致。选你最熟悉的。
  • 样本量 > 50 per group: limma-voom。速度优势明显,且大样本下三者结果几乎相同。
  • 复杂实验设计(多因素、交互效应、repeated measures): limma-voom。它的 design matrix 语法最灵活,支持任意复杂的线性模型。
  • 需要 shrinkage log2FC(如做 GSEA 排序): DESeq2。它的 apeglm shrinkage 是目前最好的 log2FC 估计方法。

在文章中怎么说明选择理由:

"Differential expression analysis was performed using DESeq2 (v1.48.2), which was chosen for its robust performance with moderate sample sizes and its built-in log2 fold change shrinkage using the apeglm method."

一句话就够了。不需要长篇论证为什么不用 edgeR——审稿人不会因为你用了 DESeq2 而不是 edgeR 来质疑你。

场景二:富集分析——ORA vs GSEA vs ssGSEA

富集分析的工具选择比差异分析更复杂,因为不同方法回答的是不同的问题。

三种方法的本质区别:

ORA(Over-Representation Analysis): 输入是一个基因列表(如差异基因),问"这个列表中某个通路的基因是否比预期多?"。代表工具:clusterProfiler 的 enrichGO()/enrichKEGG()

GSEA(Gene Set Enrichment Analysis): 输入是全部基因的排序列表(按 log2FC 或 p 值排序),问"某个通路的基因是否倾向于出现在列表的顶部或底部?"。代表工具:clusterProfiler 的 gseGO()/gseKEGG()

ssGSEA(single-sample GSEA): 对每个样本单独计算每个通路的活性分数,输出是"样本 × 通路"的矩阵。代表工具:GSVA 包。

方法输入输出适用场景
ORA基因列表显著通路列表有明确的差异基因列表时
GSEA排序的全基因列表显著通路 + NES + leading edge不想设阈值、想看整体趋势时
ssGSEA表达矩阵样本级通路活性分数需要把通路活性当变量用时(如和临床关联)

选择建议:

  • 标准差异分析后做功能注释: ORA 和 GSEA 都做。ORA 看"差异基因富集在哪些通路",GSEA 看"哪些通路整体有方向性变化"。两者互补,不是二选一。
  • 想把通路活性和临床变量关联: ssGSEA。它给每个样本一个分数,可以做相关分析、生存分析。
  • 差异基因太少(< 50 个): 优先用 GSEA。ORA 在基因列表太短时统计功效很低。
  • 差异基因太多(> 3000 个): ORA 可能给出太多显著通路。考虑用更严格的阈值筛选差异基因,或者用 GSEA 看整体趋势。

一个常见错误: 用 ORA 时把全基因组(20000 个基因)作为背景。正确的背景应该是"你检测到的所有基因"(即通过了表达过滤的基因,通常 12000-16000 个)。用错误的背景会导致 p 值偏小,产生假阳性。

# 正确:用检测到的基因作为背景
ego <- enrichGO(gene = deg_list,
universe = all_detected_genes, # 不是全基因组!
OrgDb = org.Hs.eg.db,
ont = "BP",
pAdjustMethod = "BH",
pvalueCutoff = 0.05)

场景三:生存模型——Cox vs LASSO Cox vs Random Survival Forest

预后分析中模型选择的核心问题是:你有多少候选变量,样本量有多大?

三种方法的定位:

方法候选变量数样本量要求输出可解释性
标准 Cox< 10EPV > 10HR + p 值
LASSO Cox10-1000EPV > 2-5系数(含变量选择)
Random Survival Forest任意> 100 events变量重要性

EPV(Events Per Variable) 是生存分析中的关键概念:事件数(死亡数)除以模型中的变量数。EPV < 10 时标准 Cox 的估计不稳定;LASSO 通过正则化可以在 EPV 较低时工作,但 EPV < 2 时任何方法都不可靠。

选择建议:

  • 验证已知的临床变量(age、stage、grade): 标准 Cox。变量少、解释清晰、审稿人最熟悉。
  • 从几百个候选基因中筛选 signature: LASSO Cox。自动做变量选择,输出稀疏模型。
  • 探索性分析,想看哪些变量最重要: Random Survival Forest。不需要预设模型形式,能捕捉非线性效应。但结果不如 Cox 容易解释,审稿人可能不熟悉。
  • TCGA-LIHC 项目的典型流程: 单因素 Cox 初筛 → LASSO Cox 建模 → 标准多变量 Cox 验证独立性。三种方法各司其职。

一个实际的 EPV 计算:

TCGA-LIHC: 365 个 tumor 样本,130 个死亡事件
如果 LASSO 选出 15 个基因:EPV = 130/15 ≈ 8.7(可接受)
如果 LASSO 选出 30 个基因:EPV = 130/30 ≈ 4.3(偏低,考虑用 lambda.1se)
如果标准 Cox 放 15 个变量:EPV = 130/15 ≈ 8.7(低于推荐的 10,结果不稳定)

场景四:聚类分析——层次聚类 vs K-means vs 共识聚类

单细胞分析中聚类工具的选择更复杂(Seurat vs Scanpy vs SC3...),但在 bulk 组学中,聚类主要用于样本分型或基因模块识别。

三种方法的核心差异:

方法需要预设 K?对异常值敏感?结果稳定性适用场景
层次聚类否(但需要选 cut height)中等探索性分析、热图可视化
K-means低(依赖初始化)大样本、球形簇
共识聚类(ConsensusClusterPlus)否(自动评估最优 K)分子分型、需要稳健结果时

选择建议:

  • 画热图时的样本/基因排序: 层次聚类(ward.D2 方法)。它和热图天然配合,且不需要预设 K。
  • 肿瘤分子分型(如 iCluster): 共识聚类。它通过多次重采样评估聚类的稳定性,给出最优 K 的建议。审稿人对分子分型的结果要求高,共识聚类的稳健性是必要的。
  • WGCNA 基因模块识别: WGCNA 内置的动态树切割(dynamic tree cut)。不要用 K-means 替代——WGCNA 的模块定义基于拓扑重叠矩阵,和 K-means 的假设不兼容。

场景五:"都跑一遍"策略的正确用法

有时候审稿人会问"你为什么用 DESeq2 而不是 edgeR?"。一种应对策略是"都跑一遍,报告一致的结果"。但这个策略有正确和错误的用法。

正确用法:作为 robustness check。

在 Supplementary 中展示多工具对比结果(如三工具 Venn 图),说明核心发现不依赖于特定工具的选择。主文中报告一个工具的结果,Supplementary 中展示一致性。

# 在 Supplementary 中报告
cat(sprintf("Core findings were robust across methods: %d genes were
identified as significant by all three tools (DESeq2, edgeR, limma-voom),
representing %.1f%% of DESeq2 results.",
length(consensus), length(consensus)/length(deseq2_deg)*100))

错误用法:cherry-picking。

跑了三个工具,只报告结果"最好看"的那个(比如差异基因最多的、p 值最小的)。这本质上是 p-hacking 的变体——你增加了分析自由度但没有做相应的校正。

错误用法:报告并集。

把三个工具的结果取并集("至少一个工具显著的基因"),声称这是"comprehensive"的结果。实际上这等于放宽了显著性标准——并集中包含了大量只被一个工具检测到的低可信度基因。

正确的多工具策略:

  1. 预先确定主分析工具(基于四维评估框架),在 Methods 中说明选择理由
  2. 用其他工具做 sensitivity analysis,放在 Supplementary
  3. 报告交集作为高可信度结果,报告主工具的完整结果作为主要结果
  4. 如果不同工具给出矛盾结果,在 Discussion 中讨论可能的原因

工具选择的元原则

超越具体场景,有几条通用原则:

原则一:选择和你的数据假设匹配的工具。 这比选择"最流行"或"最新"的工具重要得多。一个假设不匹配的工具,即使引用量再高,也会给出错误结果。

原则二:选择你能理解的工具。 如果你不理解一个工具在做什么,你就无法判断它的输出是否合理。用一个你理解的"简单"工具,比用一个你不理解的"高级"工具更安全。

原则三:选择有活跃维护的工具。 一个 3 年没更新的 R 包可能有未修复的 bug,且可能和新版本的 R/Bioconductor 不兼容。检查 GitHub 的最近 commit 时间和 issue 响应速度。

原则四:选择审稿人认可的工具。 这是一个现实考量。如果你用了一个非常小众的工具,审稿人可能不熟悉,会要求你用主流工具重新做。除非你有很强的理由(如主流工具确实不适合你的数据),否则优先选择领域内公认的标准工具。

原则五:记录你的选择理由。 不管选了什么,在 Methods 或 Supplementary 中简要说明为什么。这不仅帮助审稿人理解你的决策,也帮助未来的你(或你的同事)理解为什么当时做了这个选择。

常见坑

  • "师兄用什么我就用什么":师兄的数据和你的数据可能完全不同。师兄做的是 3 vs 3 的小样本,用 DESeq2 合理;你做的是 TCGA 300+ 样本,limma-voom 可能更合适。正确做法:理解每个工具的适用条件,基于自己的数据特征做选择。

  • 追新不追稳:看到一篇新论文发布了一个"性能更好"的新工具,立刻切换过去。但新工具可能有未发现的 bug、文档不完善、社区支持少。正确做法:新工具观望 1-2 年,等社区验证过之后再考虑。除非新工具解决了你用旧工具确实遇到的问题。

  • 把"结果不同"等同于"有一个是错的":DESeq2 找到 2000 个差异基因,edgeR 找到 1800 个,limma 找到 1600 个——这不意味着有工具"错了"。不同工具的统计模型不同,对同一数据的灵敏度/特异度平衡不同。正确做法:关注交集(高可信度)和差集(需要额外验证),不要纠结于"谁对谁错"。

  • 用错误的输入格式:DESeq2 要求 raw counts,limma-voom 也要求 raw counts(内部做 voom 转换),但有人把 TPM 或 FPKM 喂给 DESeq2——这会导致完全错误的结果。正确做法:仔细阅读工具文档的 Input 部分,确认输入格式正确。

  • 忽略工具的默认参数:DESeq2 默认用 Wald test,但在多组比较时应该用 LRT;clusterProfiler 默认的 pvalueCutoff 是 0.05,但有时候你需要调整。正确做法:不要盲目接受默认参数,理解每个关键参数的含义,根据你的分析目标调整。

下一步

接着深入: 工具选好了、分析做完了,最后一个判断是:这些结果中哪些值得写进论文?05 写作判断:哪些结果可以写、哪些不能写 会用 5 个场景训练你的发表判断力。

横向延伸: 如果你想看多工具对比的具体代码实现,可以看 06 验证与对比 中 DESeq2 vs edgeR vs limma-voom 的完整对比流程。

参考资源

  • Soneson C, Robinson MD (2018) "Bias, robustness and scalability in single-cell differential expression analysis." Nature Methods 15:255-261. 虽然是单细胞的,但其基准测试框架对 bulk 工具选择也有参考价值。
  • Schurch NJ et al. (2016) "How many biological replicates are needed in an RNA-seq experiment and which differential expression tool should I use?" RNA 22:839-851. 不同样本量下 DESeq2/edgeR/limma 的系统比较。
  • Tarca AL et al. (2013) "A comparison of gene set analysis methods in terms of sensitivity, prioritization and specificity." PLoS ONE 8:e79217. 富集分析方法的系统比较。
  • Harrell FE Jr (2015) Regression Modeling Strategies. Springer. 生存分析模型选择的经典教材,EPV 概念的来源。
  • Wilkerson MD, Hayes DN (2010) "ConsensusClusterPlus: a class discovery tool with confidence assessments and item tracking." Bioinformatics 26:1572-1573. 共识聚类方法论文。
AI 陪学

让 AI 陪我学这一篇

AI 会读这篇文章后给你 3-5 步学习计划, 逐步陪你学完,最后出 1-3 道题验证你掌握得怎么样。 登录后 AI 才能记住你的进度。

静态文件

离线资料下载

手册 HTML / PDF 已在后台预生成,点击后直接下载网站静态资源。