3. 批次效应与生物学变异的核心区别
做RNA-seq分析的人,十有八九都栽过这个跟头——看到差异表达基因列表兴奋得不行,结果一复查,全是批次效应。我早几年也经历过,辛辛苦苦跑完流程,发现两组样本其实是在不同批次测的,那叫一个尴尬。
说白了,批次效应和生物学变异是两码事,但长得太像。你想想看,同一个处理组内样本的波动,到底是实验差异还是真实生物学差异?今天我们就把它彻底掰开。
3.1 两者到底有什么不同?
先给个直觉定义:
- 生物学变异——个体之间因为遗传、发育、环境应答不同产生的真实差异。比如癌细胞和正常细胞之间的表达差异,这就是我们想要的东西。
- 批次效应——因为实验操作、试剂批次、测序日期、仪器状态等非生物因素引入的系统性偏差。这不是生物学信号,是噪声。
我个人习惯把它们比喻成“信号和噪音”。生物学变异是你要找的宝藏,批次效应是路上挖出的石头。但麻烦的是,石头有时候长得也像宝石。
3.2 一张表看清核心差异
| 维度 | 生物学变异 | 批次效应 |
|---|---|---|
| 来源 | 生物个体差异、处理效应、发育阶段等 | 实验日期、试剂批次、操作人员、温度、仪器 |
| 分布特征 | 往往与实验分组相关,有生物学合理性 | 常与测序批次、提取时间等非分组变量相关 |
| 重现性 | 重复实验可以复现 | 换一批样本重新测序,模式消失或变化 |
| 对分析影响 | 真实差异,保留 | 假阳性,需要去除或校正 |
| 可视化表现 | PCA图上,样本按生物学分组聚类 | PCA图上,样本按测序批次聚类,与分组无关 |
嗯,这张表基本够用了。但实际数据里,边界经常是模糊的。举个例子,假设两个品系的小鼠分别在两个不同日期提取RNA,那么PCA图上第一主成分分开的到底是品系差异还是日期差异?你根本说不清。这就是混淆。
3.3 怎么判断是批次效应还是生物学变异?
最直接的办法——看变量关联性。把主成分的染色变量换一换,试试用批次标记上色,再用生物学分组标记上色。如果样本按“批次”聚成了簇,而“分组”散成一团,那八成是批次效应。
我在项目中常用这个R代码快速诊断:
library(ggplot2)
library(PCAtools)
# pca_data 是表达矩阵的PCA结果,包含metadata
p <- biplot(pca_data,
colby = "batch", # 以批次着色
shape = "condition", # 以生物学分组标形状
showLoadings = FALSE)
print(p)
如果看到batch聚在一起而condition混在一起,赶紧检查实验设计。另外,热图+层次聚类也能帮忙,看样本树是否按批次长出明显分支。
3.4 我踩过的几个坑
- 坑一:把批次当生物学重复——我曾经拿同一批次的六只小鼠当独立重复,结果发现组内变异特别小,差异检验极度 inflated。后来才意识到,这六只小鼠其实是同一天、同一个试剂盒做的提取,根本不是真正的生物学重复。
- 坑二:分组和批次完美共线——比如所有对照样本是批次1,所有处理样本是批次2。这种情况你根本没法区分。我遇到过,最后只能重新补做交叉设计。
- 坑三:以为可以做批次校正就万事大吉——如果批次效应跟生物学变异高度重叠(比如批次就是分组),用ComBat会掰弯真正的信号。校正前必须先确认正交性。
3.5 核心区别概览图
下面这张图把刚才讲的内容串起来。从左到右看:样本进入测序流程后,数据里同时包含生物学变异和批次效应,我们需要通过聚类、PCA、关联性分析来判断它们分别落在哪里。
你看,整个流程就是先区分,再决定下一步动作。如果确认是批次效应且与生物学分组正交,可以用ComBat、removeBatchEffect等工具去除;如果已经混淆……嗯,只能靠实验设计层面补救。记得:批次效应不能靠后期分析逆转糟糕的实验设计。
一句话总结: 生物学变异是你想找的信号,批次效应是混进来的噪声。分辨它们的核心武器是——查看变量关联性和PC聚类方向。做对了,差异分析才有意义;做错了,发文章时审稿人一眼就能看出来。