第一章:为什么要消除批次效应?
各位好。我是做生物信息学的,今天聊聊转录组差异分析里最让人头疼的事——批次效应。
说白了,批次效应就是“非生物学差异”。你明明测的是同一批样本,只是因为今天跑和明天跑、这个人操作和那个人操作、试剂盒换了批号,结果表达量就变了。这不怪你,这是实验系统本身的噪音。
我早年接过一个合作项目,两组小鼠测完一看差异基因上千个,结果发现实验组和对照组恰好分在两个批次里测序。嗯,几乎所有差异都是批次效应伪造的。那次之后,我再也不敢忽略批次校正了。
1.1 什么是批次效应?
批次效应是指由于实验操作、试剂批次、测序仪、操作人员等非生物学因素引入的系统性偏差。它在高通量数据里非常普遍,尤其是RNA-seq。
- 来源多样:不同测序lane、不同流动池、不同文库制备时间、不同试剂盒批号。
- 表现隐蔽:PCA图上样本按批次聚类,而不是按实验组。
- 后果严重:假阳性率飙升,真实差异信号被掩盖。
核心思路: 批次效应不是“脏数据”,它属于已知的协变量。我们要做的不是扔掉它,而是把它纳入统计模型,在差异分析时把它剥离开。
1.2 什么时候需要消除批次效应?
并不是所有情况都要校正。我列个表格,帮你快速判断。
| 场景 | 是否需要校正 | 说明 |
|---|---|---|
| 所有样本在同一次测序,同一批次 | 通常不需要 | 没有批次变量可以建模 |
| 实验组和对照组恰好混在多个批次中 | 强烈建议校正 | 否则组间差异会被批次污染 |
| 批次变量与生物学分组完全混杂 | 无法校正 | 需要重新实验或调整设计 |
| 你已经用limma/voom做差异分析 | 可以在模型中包含批次 | edgeR+limma-voom天然支持 |
特别注意: 如果你实验组全部在批次1,对照组全部在批次2,那批次效应和生物学效应完全纠缠,任何统计方法都拆不开。设计实验时一定要交叉安排批次。
1.3 为什么选edgeR + limma-voom?
很多人问:为什么不用DESeq2?或者直接用limma的normalize和removeBatchEffect?
我个人习惯是这样——edgeR的
estimateDisp
对负二项分布建模很稳健,但它的线性模型框架相对简单。limma-voom的亮点在于:它把RNA-seq的count数据先转成log2-cpm并估算均值-方差关系,然后应用limma成熟的线性模型和贝叶斯方差收缩。
两套工具结合,能同时处理:
- 离散count数据的本质(edgeR提供dispersion)
- 灵活的多因子线性模型(limma的design matrix)
- 批次效应作为协变量直接放进模型,不需要预校正
小技巧: 我不建议用
removeBatchEffect()
提前校正数据,因为那会改变count分布,影响后续差异分析的p值计算。更好的做法是把批次变量直接放进limma的
design
矩阵里。
1.4 本章知识体系
下面这张图帮你把这一章的核心逻辑串起来。
1.5 案例重现:一个真实的教训
我曾经处理过一个公共数据集,来自GEO。24个样本,两组比较,但测序分了三批。拿到原始count后我直接跑edgeR,差异基因多达1400多个。我总觉得不对——两组生物学差异真有这么大?
后来我把批次信息画在PCA上,果然第一批和第二批的样本各自聚团。再加上批次变量做limma-voom,差异基因降到200个左右。嗯,那1200个都是假的。
核心观点: 差异分析前,先问自己——我的数据里有批次吗?如果有,一定要把它放在模型里,而不是假装它不存在。
这一章我们铺垫了批次效应的概念、危害,以及为什么选择edgeR+limma-voom组合。下一章我们会真正动手:从count矩阵开始,构建包含批次变量的design矩阵,跑通完整的voom流程。
先理解原理,再动手实践——这是我一直坚持的学习方式。