实验设计原则:重复数、批次效应、对照设置

实验设计这关要是没过,后面分析再花哨也是白搭。我见过太多人拿到数据就跑流程,结果发现差异基因不是跟着处理走,而是跟着批次跑。说白了,数据质量在取样那一刻就已经决定了。

RNA-seq 差异表达的核心逻辑很简单:你比较两组样本,看看哪些基因的表达量有显著变化。但这个「比较」能不能站住脚,全靠实验设计的三根柱子——重复数、批次效应、对照设置。

差异表达实验设计的核心原则 重复数 生物学重复 ≥ 3 技术重复可省略 检验效能估算 样本量公式 ⚠ 避免混淆两类重复 批次效应 单一批次完成全部 或交叉平衡设计 记录批次变量 batch 纳入模型 ⚠ 批次 ≠ 生物学分组 对照设置 阴性对照(未处理) 阳性对照(已知效果) 载体对照 时间点对照 ⚠ 对照与处理同批次

重复数:别再踩技术重复的坑

很多人第一次做 RNA-seq 时,会把同一个样本多跑几遍当作「重复」。这其实是个误解——你测的是一份 RNA 的不同分装,结果当然高度一致。你需要的是生物学重复,也就是来自不同个体或不同批次培养物的独立样本。

为什么非要这样?因为差异表达的统计检验(DESeq2、edgeR 那套)本质上是看组内变异和组间变异的比值。组内变异来自哪里?来自个体间的天然差异。技术重复根本反映不了这种差异。

我的经验: 生物学重复至少 3 个,最好 4-5 个。3 个是底线,能撑住基本的负二项分布拟合,但碰到高变异基因就比较勉强。5 个以上,DESeq2 的 dispersion 估计才真正稳定。
重复类型定义用途推荐数量
生物学重复独立生物样本反映群体变异,用于差异检验≥ 3,最好 ≥ 5
技术重复同一样本多次测定评估技术误差通常不需要
测序深度重复同文库多次上机罕见应用不推荐常规使用
我曾经犯过的错: 有次帮人做分析,对方给了两组各 2 个样本。DESeq2 跑完 p 值全部不显著,换了 edgeR 也一样。不是没差异,是重复数不够,统计检验根本推不动离散度参数。后来补到 4 个重复,差异基因哗啦就出来了。

那么怎么估算到底需要多少重复?可以用 RNASeqPower 或 ssizeRNA 这类工具预估算一下。需要你预估效应大小(比如 fold change 想看到 2 倍以上),以及基因表达的平均离散度。

# R 包 RNASeqPower 示例
library(RNASeqPower)

# 参数:效应倍数 2 倍,dispersion 0.1,期望检测到的基因数
rnapower(depth=20, n=3, effect=2, cv=0.1)
rnapower(depth=20, n=5, effect=2, cv=0.1)
技巧: 经费有限时,优先保证生物学重复数量,而不是单样本的测序深度。1000 万 reads × 5 个重复,远好过 3000 万 reads × 2 个重复。

批次效应:别让实验室操作毁掉你的结论

批次效应是个幽灵,你看不见摸不着,但它能在结果里留下明显的「假基因」。我在做癌症公共数据整合时就发现,来自不同实验室的样本一聚类,首先分开的不是肿瘤 vs 正常,而是 GSE 编号。

批次效应怎么来的?RNA 提取时间不同、试剂盒批号不同、建库人员不同、测序通道不同——每一个操作环节都可能引入系统偏差。

最好的策略:单一批次完成

如果条件允许,所有样本在同一天、由同一个人、用同一批试剂完成建库和测序。这能最大限度减少非生物学因素的干扰。

如果做不到:交叉平衡设计

样本量大时难免分多批次。关键原则是:每个处理组的样本均匀分布在每个批次中。别把对照组全放在第一批,处理组全放在第二批——那样你就分不清差异基因和批次差了。

设计类型样本安排风险
完全随机各处理组随机分配到各批次最低
交叉平衡每批次均有各处理组相等数量可接受
全部混批处理组 A 在 batch1,B 在 batch2❌ 严重
注意: 批次效应不是事后用 ComBat 或者 limma 的 removeBatchEffect 就能完全抹掉的。那些算法只能去掉「已知」的批次信号,如果批次和生物学分组完全混杂(confounded),神仙也救不回来。

记录一切

我强烈建议你在实验记录里把下面这些写清楚。不是为了写论文,是为了后面分析不被自己坑。

# 批次记录表示例
sample_id   treatment   batch   rna_date   library_kit   operator   flow_cell
S01         control     1       2024-01-10  NEBNext       Alice      FC_001
S02         treated     1       2024-01-10  NEBNext       Alice      FC_001
S03         control     2       2024-01-11  NEBNext       Bob        FC_002
S04         treated     2       2024-01-11  NEBNext       Bob        FC_002
我的习惯: 设计时就先画好样本分配表,明确每个 batch 里 control 和 treated 各几个。上机前多花一小时想清楚,后面省掉一周的扯皮时间。

对照设置:没有锚点就没有比较

差异表达分析本质上是「相对于谁」的差异。对照就是那个「谁」。对照设置得不对,后面的比较全是空中楼阁。

最常见的对照是未处理对照(vehicle control 或 mock),用来看处理本身的效应。但有些场景需要更细致的对照:

  • 阴性对照: 比如做 knockout,用野生型或空载体转染作为基线
  • 阳性对照: 已知某种药物能上调某个 marker 基因,用来验证实验系统是否正常工作
  • 时间点对照: 如果研究的是时间序列,每个时间点都需要独立的对照,别光拿 0h 作为所有时间点的基准
  • 批次内对照: 对照样本必须与处理样本在同一批次处理,不能分开做
一个真实案例: 我以前帮组里的同学分析一个 siRNA 敲低实验。他用的是 siNegativeControl(乱序 siRNA)作为对照,这没问题。但他把 siNC 单独做在一个 batch 里,处理组在另一个 batch。最后我们花了两周时间试图区分哪些基因是被 siRNA 敲低的,哪些只是批次差。白费功夫。

对照数量要不要与处理组一致?

最好是 1:1。如果经费紧张,对照你可以稍微少一点,但最少不低于 3 个生物学重复。DESeq2 的算法里,所有比较都是以对照组的均值为基准,如果你的对照组只有 2 个重复,均值的估计方差会很大,会导致很多真阳性差异被漏掉。

对照类型适用场景注意事项
未处理对照药物/刺激处理使用相同溶剂,保持一致培养条件
空载体对照过表达/敲低与处理组使用相同转染体系和剂量
野生型对照基因编辑(KO/KI)同品系、同遗传背景
假手术对照动物手术模型开腔但不做目标操作
时间匹配对照时间序列每个时间点分别设置对照
小建议: 对照样本的处理流程要与处理组完全一致。你取完对照样本,换套枪头取处理组,这没问题。但别把对照放冰箱里过夜再提取 RNA,处理组是新鲜提的——这种细节天天有人在犯。

把它们串起来:一个检查清单

每次开始一个新实验设计时,我都会拿这个清单过一遍。你可以直接复制到你的实验记录里。

## 实验设计检查清单(可复选)

□ 每个处理组 ≥ 3 个生物学重复(最好 5 个)
□ 技术重复已排除
□ 所有样本在单一批次内完成(如不能,已做交叉平衡)
□ 批次变量已记录(日期、操作者、试剂、芯片号)
□ 对照类型明确(未处理、空载体、野生型等)
□ 对照与处理在同一批次处理
□ 对照数量 ≥ 处理组或至少 3 个
□ 实验已纳入阳性对照(用于质控)
□ 样本分配表已画出,无混杂
□ 预估过所需样本量(如适用)

最后说一句:实验设计阶段多花的心思,在数据分析阶段会十倍回报给你。你觉得差不多了,那就再检查一遍重复数和批次设计——这两关过了,剩下的统计分析才有意义。