第2章:批次效应产生的原因与影响
2.1 什么是批次效应?先别急着喊"数据有问题"
说起批次效应,我脑子里立马冒出几年前一个项目。
当时我们同时跑了三批10x数据,明明是同一种细胞系,UMAP一画,三批数据各自抱团,谁也不挨谁。我盯着那个图愣了十分钟,心想:这细胞是偷偷学会分群了?
后来才反应过来——嗯,这就是批次效应。
说白了,批次效应就是:相同生物学样本,因为不在同一时间、同一条件、同一批实验里处理,导致数据出现了非生物学差异。它不是细胞本身想分开,是实验步骤把数据"掰开"了。
核心一句话:批次效应是技术和操作引入的"假信号",不是生物学真差异。
2.2 批次效应是怎么冒出来的?我帮你拆开看
我从项目经验里总结了四个主要"元凶"。你看完就会明白,批次效应几乎没法完全避免,只能控制和校正。
2.2.1 技术平台本身的"基因"差异
10x和Smart-seq2,这两个平台从建库原理上就南辕北辙。10x靠微滴包裹细胞,每个细胞只捕获一小部分转录本;Smart-seq2是全长扩增,覆盖度更高。你想想看,同一个基因在10x里可能只检测到3'端几个reads,在Smart-seq2里能覆盖整个转录本。这数据放到一起,能一样吗?
2.2.2 实验条件波动——你控制不了的"小脾气"
同样的10x平台,今天做的和下周做的,结果也可能不一样。
- 试剂批次:同一家公司的试剂,不同批次活性可能差5%-10%。我在一次质控里发现,换了一批逆转录酶后,基因检出数降了12%。
- 设备状态:微流控芯片的通道堵塞程度、PCR仪的温控精度,都会影响数据。
- 操作环境:实验室温度、湿度,甚至样本放置时间,都会引入噪声。
2.2.3 操作人员——这个因素最容易被忽略
我曾经做过一个对比:两个实习生分别处理同一份PBMC样本,一个做了8小时,一个做了11小时。最后UMAP画出来,两个人的数据明显分成两群。你可能会问:操作慢了点,差别这么大?是的。细胞在悬液里多待几个小时,转录组状态会发生变化,应激基因开始表达,差异就出来了。
2.2.4 样本处理的时间差
有些样本来自不同医院、不同时间点。从取样到建库,中间隔了几天,细胞的活性、RNA完整性都会往下掉。10x对细胞活性很敏感,Smart-seq2对RNA完整性要求更高。时间差带来的质量差异,也会变成批次效应。
| 来源 | 影响程度 | 10x vs Smart-seq2差异 | 可控性 |
|---|---|---|---|
| 技术平台差异 | 高 | 捕获原理、覆盖度、灵敏度不同 | 低(需校正) |
| 试剂批次波动 | 中-高 | 10x对酶活性敏感,Smart-seq2对引物批次敏感 | 中(可标准化) |
| 操作人员差异 | 中 | 两个平台都对操作时间、习惯敏感 | 中(需培训) |
| 样本处理时间差 | 中-高 | 10x要求细胞活性高,Smart-seq2要求RNA完整 | 低(采样时间决定) |
2.3 批次效应对下游分析的影响——不是吓唬你
如果不管批次效应,直接拿合并数据做分析,结果会怎样?我见过不少"假阳性"血泪史。
2.3.1 聚类:细胞没按类型分,按批次分了
这是最直观的表现。用PCA或UMAP看,数据点首先按批次聚成几大块,而不是按细胞类型。你原本想找稀有细胞群,结果发现"新群"其实是某个批次自己的噪声。
2.3.2 差异表达分析:找出的"差异基因"全是批次标记
我曾经帮人复查一个项目,他兴奋地说找到了一个很好的marker基因。我一看,那个基因在批次A里高表达,在批次B里低表达——但那两个批次里是同样的细胞。说白了,他找的不是生物学差异,是批次特异基因。
2.3.3 生物学信号被淹没
当批次效应大到一定程度,真正的生物学差异反而看不出来了。就像你想在暴风雨里听清一个人说话——背景噪声太大了。
注意:批次效应不是"有或无"的问题,而是"大或小"的问题。即使同一个平台、同一个人、同一天操作,也会存在微小批次效应。关键是它是否大到影响你的结论。
2.4 怎么识别批次效应?我教你三招
别等到分析做完了才发现批次效应。我习惯在数据整合前先做"侦察"。
- 看PCA/UMAP,按批次着色:如果相同颜色的点抱团,不同颜色的点分开,说明批次效应明显。这是最快的方法。
- 计算批次相关性矩阵:如果不同批次间的相关性低于同批次内的相关性,说明有批次效应。
- 检查批次特异基因:用简单差异分析,找每个批次高表达的基因。如果找到的基因跟生物学类型无关,基本就是批次效应没跑了。
这里给一个快速检查的代码片段,我经常在预处理阶段跑一遍:
# 载入数据后,用PCA快速侦察
library(Seurat)
merged_data <- merge(batch1, batch2)
merged_data <- NormalizeData(merged_data) %>%
FindVariableFeatures() %>%
ScaleData() %>%
RunPCA()
# 按批次着色看PC1 vs PC2
DimPlot(merged_data, reduction = "pca",
group.by = "batch", pt.size = 0.5)
一个小技巧:我习惯在看PCA时,同时用"batch"和"cell_type"两个分组着色。如果batch分的比cell_type还清楚,那批次效应就是头号问题,必须先校正再往下走。
2.5 批次效应的"蝴蝶效应"——从源头到结论
为了让你更直观地理解,我把整个链条画了一张图。你跟着箭头走一遍,就明白批次效应是怎么一步步影响最终结论的。
2.6 一个真实案例,我踩过的坑
2021年我做了一个跨平台整合项目——10x和Smart-seq2的PBMC数据。当时我天真地以为,只要用同一个参考基因组、同一个cellranger版本,数据就能直接合并。结果PCA一画,10x数据全在左边,Smart-seq2全在右边,中间隔了一条"鸿沟"。
我试着直接用Seurat的FindIntegrationAnchors()做整合,但效果很差,因为批次效应太大,anchor找不准。
后来我换了个思路:先分别对两个平台做QC和标准化,再用Harmony做校正。校正后UMAP上,CD4 T细胞、CD8 T细胞、单核细胞终于混在一起了。但我又发现了一个问题——有些细胞群校正后"过度融合",原本应该分开的亚型也混到一起了。
经验总结:批次校正是"走钢丝"——校少了,批次效应还在;校多了,生物学差异也被抹掉。你需要反复调参,结合生物学先验知识来判断校正是否过度。
所以每次做批次整合,我都会问自己三个问题:
- 批次效应大不大?(PCA/UMAP侦察)
- 用什么方法校正?(Harmony? Seurat? MNN? 具体看数据量)
- 校正结果合理吗?(用已知marker基因验证细胞类型是否保真)
2.7 本章小结——你记住这几个点就行
批次效应不可怕,可怕的是你忽略它。
- 来源多样:平台差异、实验条件、操作人员、时间差,每个环节都可能引入批次效应。
- 影响深远:聚类、差异分析、生物学发现,每个下游步骤都会被批次效应干扰。
- 识别要早:在预处理阶段就做批次侦察,不要等到结论推翻了再回头找原因。
- 校正要谨慎:既不是校得越彻底越好,也不能放着不管。需要在"去除批次效应"和"保留生物学差异"之间找平衡。