第一章:为什么要消除批次效应?

各位好。我是做生物信息学的,今天聊聊转录组差异分析里最让人头疼的事——批次效应。

说白了,批次效应就是“非生物学差异”。你明明测的是同一批样本,只是因为今天跑和明天跑、这个人操作和那个人操作、试剂盒换了批号,结果表达量就变了。这不怪你,这是实验系统本身的噪音。

我早年接过一个合作项目,两组小鼠测完一看差异基因上千个,结果发现实验组和对照组恰好分在两个批次里测序。嗯,几乎所有差异都是批次效应伪造的。那次之后,我再也不敢忽略批次校正了。

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章知识体系:批次效应与edgeR+limma-voom 批次效应来源 导致假阳性/假阴性 何时必须校正 edgeR:负二项 + 离散度 处理count过度离散 limma-voom:log2-cpm + 均值-方差趋势 贝叶斯方差收缩 批次变量放入design矩阵 不需预校正,在模型中消除 输出:可靠的差异基因列表

1.5 案例重现:一个真实的教训

我曾经处理过一个公共数据集,来自GEO。24个样本,两组比较,但测序分了三批。拿到原始count后我直接跑edgeR,差异基因多达1400多个。我总觉得不对——两组生物学差异真有这么大?

后来我把批次信息画在PCA上,果然第一批和第二批的样本各自聚团。再加上批次变量做limma-voom,差异基因降到200个左右。嗯,那1200个都是假的。

核心观点: 差异分析前,先问自己——我的数据里有批次吗?如果有,一定要把它放在模型里,而不是假装它不存在。

这一章我们铺垫了批次效应的概念、危害,以及为什么选择edgeR+limma-voom组合。下一章我们会真正动手:从count矩阵开始,构建包含批次变量的design矩阵,跑通完整的voom流程。

先理解原理,再动手实践——这是我一直坚持的学习方式。