批次效应概述:是什么、为什么、怎么来的
大家好,我是做单细胞数据分析的。今天开始讲批次校正,先聊聊最基础的问题——批次效应。
做单细胞测序的同学都遇到过:明明同一批样本,分两次上机测,结果UMAP图上就分成两坨。是生物学差异吗?不一定。很可能就是批次效应。
批次效应(Batch Effect):指在研究过程中,由于实验操作、试剂批次、测序仪器、测序时间等非生物学因素导致的系统性数据差异。
为什么会出现批次效应?
说白了,任何多步骤实验流程,只要不是同一天、同一个人、同一台机器做完,就会引入变量。我遇到过最离谱的案例:同一个样本分两次跑,第一次用旧版试剂盒,第二次用了新版,结果两个文库的基因检测情况完全不同。嗯,这就是批次效应。
常见的来源我列一下:
- 样本处理差异:解离方法、冻存时间、细胞活率不同
- 试剂批次:不同批次的反转录酶、扩增酶、建库试剂盒
- 测序平台:10x Genomics 不同版本,或者 NovaSeq vs NextSeq
- 测序深度:有的批次 reads 多,有的少
- 操作人员:手速、操作习惯的不同
- 时间跨度:前后隔了几个月,实验室环境都变了
我曾经踩过一个坑:做临床样本整合时,发现病例组和对照组正好对应两个批次。如果不校正,差异分析结果全是假的。那是我第一次意识到批次效应是可以直接毁掉一个项目的。
批次效应的影响有多大?
你想想看,单细胞数据本身噪声就大。如果再加上系统性的批次偏移,后果很严重:
- 混淆生物学差异:你以为找到了疾病相关亚群,其实是批次差异
- 降低整合效果:不同数据集无法对齐,合并分析变成噩梦
- 丢失稀有细胞群:小群细胞如果只出现在某个批次,校正后可能被抹掉
- 错误统计推断:p值会骗人,假阳性率飙升
| 影响维度 | 具体表现 | 严重程度 |
|---|---|---|
| 可视化 | UMAP/t-SNE 按批次聚类而非按细胞类型 | 高 |
| 差异表达 | 检测到大量假阳性基因 | 极高 |
| 细胞注释 | 同类型细胞被分到不同cluster | 高 |
| 下游分析 | 轨迹推断、细胞通讯分析结果扭曲 | 中高 |
什么时候必须校正?什么时候不能校正?
这问题很关键,很多人上来就咔咔校正。我个人习惯:先观察,再判断。
- 必须校正:整合多个数据集、合并不同批次、做meta分析时
- 谨慎校正:如果批次与生物学条件完全混淆(比如batch1全是病人,batch2全是对照),无法区分,校正可能抹掉真实信号
- 不要校正:单样本分析、所有数据在同一天同一台机器上产出时
我的经验:先画一张UMAP图按批次上色。如果批次之间明显分离,而生物学因素混杂在其中,那必须校正。但如果两个批次混在一起,就没必要强行校正——过度校正反而引入假象。
批次校正的三种主流思路
现在市面上方法很多,但大体分三类。我按自己的理解给你梳理:
- 基于降维对齐(代表:CCA、Harmony)
先在低维空间找匹配的细胞对,然后拉近它们。速度快,适合大数据。 - 基于最近邻匹配(代表:MNN)
寻找跨批次的相互最近邻细胞对,用这些对来估计校正向量。鲁棒性好。 - 基于深度生成模型(代表:scVI、scANVI)
用VAE把批次当作条件变量,学习数据分布后生成校正后的表达。灵活、可概率化。
这三种方法我们后面会逐个深挖,今天先把框架搭好。
一个小技巧:拿到数据后,先跑个简单的PCA/UMAP,按来源批次上色。如果看到明显的颜色分离,那就要校正。如果颜色混在一起,就先不急着动。
评估批次效应大小的常用指标
光靠肉眼不够,定量更靠谱。我常用这几个:
- kBET (k-Betweenness Entropy Test):检验局部邻域中批次分布是否均匀
- PCR (Principal Component Regression):用批次做因变量,看主成分能解释多少方差
- LISI (Local Inverse Simpson Index):衡量局部异质性
- ASW (Average Silhouette Width):按批次计算的轮廓宽度,越小说明批次效应越轻
这些指标后面讲具体方法时会用到。今天先知道有这些工具就行。
一个简单的案例:看看批次效应长什么样
假设你有两个PBMC数据集,一个来自批次A,一个来自批次B。整合前先看UMAP:
# Python 伪代码示意
import scanpy as sc
adata_a = sc.read('pbmc_batchA.h5ad')
adata_b = sc.read('pbmc_batchB.h5ad')
concat = adata_a.concatenate(adata_b, batch_key='batch')
sc.pp.pca(concat)
sc.pp.neighbors(concat)
sc.tl.umap(concat)
sc.pl.umap(concat, color='batch')
你看结果——如果两个batch的点在UMAP上分别聚成两团,那就有批次效应。如果它们混在一起,bad luck,你遇到的问题可能不是批次,而是生物学差异。
记住:批次效应校正不是万能的。如果批次完全重叠——你的校正算法越努力,结果可能越离谱。先检查、再校正,是我做数据分析的第一条铁律。
小结一下
今天我们从批次效应的来源、影响、何时校正、主流方法分类几个角度走了一遍。核心就一句话:批次效应是单细胞整合中最常见的系统性偏差,校正前先定性定量分析,选对方法。后面我们一章章拆解CCA、MNN、scVI——每种方法的原理、代码实现、优缺点都会讲到。
不急,一步步来。