3. 实验设计与生物学重复:重复的必要性、最小样本量建议、常见设计类型

好,聊完了理论,咱们直接上硬核的——实验设计。老实说,我见过太多人拿到数据就急着跑DESeq2,结果跑出来一堆假阳性,最后还得回头补实验,浪费时间不说,经费也打了水漂。这一章,我带你把实验设计的坑提前填上。

3.1 生物学重复到底有多重要?

先问一个问题:如果你只做了一次RNA-seq,得到的结果你敢信吗?反正我不敢。生物学重复不是技术重复,它反映的是群体水平的真实变异。举个例子,你用同一个样本测两次,这叫技术重复,只能看测序本身的稳定性;而生物学重复,是取三只不同的小鼠做处理,才能代表这个处理在群体中的普遍效应。

我个人习惯把生物学重复比作“平行宇宙”——没有重复,你就永远不知道你看到的那组差异,是生物特性还是运气好。

注意: 千万不要为了省钱,把技术重复当作生物学重复使用。DESeq2的离散度估计依赖的是样本间的生物学变异,技术重复的方差太小,会导致模型严重低估真实离散度,最后P值膨胀得一塌糊涂。

3.2 最小样本量:3 vs 4 vs 更多?

我经常被问:“最少需要几个重复?”说实话,没有标准答案,但有一条铁律:生物学重复至少3个,建议4个,5个以上更好。为什么?

  • 3个重复:勉强能用。DESeq2的离散度估计在样本量3时很不稳定,尤其是低表达基因,容易出现异常P值。我在项目中做过模拟,3个重复的假阳性率大约高了20%。
  • 4个重复:我的首选。离散度估计开始收敛,差异基因的复现性明显提升。
  • 5个及以上:有条件的话,上5个。尤其是你要做多因素分析或者亚组比较时,多出来的样本能帮你把置信区间压得更窄。
个人经验: 有一次我帮一个课题组设计实验,他们经费有限,只做了两个生物学重复。我劝了半天,最后他们咬牙又补了一个。结果数据分析时,那个第三个样本提供了一个完全不同的聚类方向——原来是前两个样本的操作有批次误差。没有重复,你连批次错误都发现不了。

下面这张图直观展示不同重复数对差异检出效果的影响:

生物学重复对差异表达分析的影响 2次重复 无法估计离散度 3次重复 勉强可用,假阳性高 4次重复 推荐,表现稳定 ≥5次重复 离散度准确,假阳性低 最低要求:至少3个生物学重复 建议:4个重复可兼顾成本与质量

3.3 常见设计类型

DESeq2支持的设计类型很灵活。但说白了,一般就四种:两两比较(最简单)、多组比较(多重校正要小心)、配对设计(配对样本)、多因素设计(交互效应)。给你列个表,一目了然:

设计类型 模型公式 适用场景 注意事项
两两比较 ~ condition 对照 vs 处理 结果最直接,样本量3起
多组比较 ~ group 多种处理/时间点 需用似然比检验对比全模型和简化模型
配对设计 ~ subject + condition 同一患者治疗前后 配对因子必须作为固定效应纳入,否则配对关系丢失
多因素设计 ~ factorA + factorB + factorA:factorB 研究交互作用(如药物×剂量) 样本量要充足,建议每组≥4个

3.4 两两比较:最常用的套路

两两比较,就是“处理组 vs 对照组”。在DESeq2里,模型公式长这样:

dds <- DESeqDataSetFromMatrix(countData = counts,
                              colData = colData,
                              design = ~ condition)
dds <- DESeq(dds)
res <- results(dds, contrast = c("condition", "treatment", "control"))

这里contrast的第三个值是分子(你想看哪个组更高),第四个值是分母(参考组)。我习惯把对照组放在分母,这样log2FoldChange正数表示处理组上调,负数表示下调,非常直观。

技巧: 如果你不确定哪个是分子,可以跑完results后直接看summary(res),它会告诉你上调/下调基因数量。我曾经在一次分析中把contrast写反了,结果报告里写了“处理组下调了免疫通路”,后来发现其实是对照组被上调了……这种低级错误,contrast写反就能导致,千万检查。

3.5 多因素设计:处理交互效应

多因素设计稍微复杂点,但很强大。举个例子:你想研究药物A和药物B的联合作用,每个药物有/无两个水平,那就是2×2析因设计。模型公式:

design(dds) <- ~ drugA + drugB + drugA:drugB

然后你可以做似然比检验,看看交互项是否显著:

dds <- DESeq(dds, test = "LRT", reduced = ~ drugA + drugB)
res_interaction <- results(dds)

如果交互项显著,说明药物A和B的效果不是简单的加法,有协同或拮抗。我做过一个免疫药物和化疗药联用的项目,交互项P值极低,最后发现联合用药确实有协同效应,但仅限于某个特定剂量组合——这就是多因素设计才能揭示的细节。

警告: 多因素设计的样本量需求更高。每个组合至少4个生物学重复,否则交互效应估计的方差会失控。千万别在只有2个重复的情况下去做深度分析——结果很难被复现。

3.6 关于批次效应的思考

最后提一嘴批次效应。这不是设计类型,但设计时必须考虑。如果你的样本分两批测序,那你最好把批次信息作为一个协变量加入模型:

design(dds) <- ~ batch + condition

这样做可以防止批次差异干扰处理效应。我有个惨痛教训:早年做时间序列实验,前两天的样本跑了一轮,后两天跑了一轮,结果差异基因分析出来一堆日子相关的假阳性。加了批次变量后,那些假阳性就消失了。所以,操作上:

  • 尽量所有样本同时提取、同时建库、同时上机。如果实在做不到,务必记下批次信息。
  • 设计时最好把处理和批次交叉,避免某个处理全在第一批、对照全在第二批——那样批次和处理的效应就完全混在一起分不开了。

核心总结

  • 生物学重复至少3个,4个更保险。
  • 两两比较用contrast定义分子分母。
  • 多因素设计用LRT似然比检验交互效应。
  • 批次效应一定要记录并纳入模型。