为什么单细胞数据整合绕不开批次效应
单细胞测序技术这几年火得不行,我身边不少做肿瘤免疫、发育生物学的朋友都在跑 scRNA-seq 项目。但你有没有遇到过这种怪事:同一个样本,今天测和下周测,UMAP 上的细胞群就是合不到一起?明明都是 CD8+ T 细胞,非要分居两地,好像在抗议一样。
嗯,这就是批次效应。它不是什么玄学,而是一个你必须正视的技术事实。我个人在处理超过 20 套公共数据集后,感受特别深——批次效应如果不处理,后续所有差异分析、细胞注释、轨迹推断都是自欺欺人。这章我们就把它拆开来看,到底批次效应从哪来,又为什么非要用 Harmony 这样的整合工具才能搞定。
1.1 批次效应到底是什么?
批次效应,说白了就是非生物学因素带来的系统性差异。你处理一个样本时,从组织解离、反转录、建库到上机测序,每一步都有随机波动。一个批次里所有细胞共享这个波动,结果就是:相同生物学类型的细胞,在不同批次里表达谱会有偏移。
举个例子。我去年有一个项目,需要把两套来自不同中心的 PBMC 数据合并分析。一套用 10x Genomics v2 试剂盒,一套用 v3。按理说细胞类型应该一样吧?结果两套数据的 CD14+ 单核细胞在 PCA 上隔了老远,误差比 T 细胞和 B 细胞的距离还大。这不是生物学差异,这就是批次效应在捣乱。
批次效应 = 技术差异 + 环境差异 + 操作差异
它掩盖了真实的生物学信号,让数据分析者很难判断:某个基因上调,是因为细胞状态变了,还是仅仅因为今天用的试剂批号不同?
1.2 批次效应的主要来源
批次效应不是单一原因造成的,你想想看,从拿到样本到拿到数据,中间至少有四五个环节可能引入批次差异。我按个人经验整理了一个表,方便你对照自查。
| 来源分类 | 具体因素 | 典型影响 |
|---|---|---|
| 样本处理 | 解离酶、时间、温度、操作者 | 细胞活力不同,造成某些群过高或过低 |
| 建库试剂 | 试剂盒版本(v2/v3)、引物、酶 | 捕获效率差异,影响低表达基因检测 |
| 测序平台 | Illumina NovaSeq vs HiSeq,流动槽 | 测序深度、GC 偏好不同 |
| 时间跨度 | 室温、湿度、仪器校准状态 | 系统性偏移,尤其影响小样本量数据 |
| 批次标志物 | 实验设计本身(如 Day1/2 处理) | 伪生物学差异,容易误判 |
这里我特别要提醒一点:很多人在做数据整合时,会下意识把细胞类型当作已知标签,然后用它去矫正。这其实是个弯路——你矫正的目标恰好是你想要发现的东西。所以,一个好的整合方法不能依赖细胞类型先验知识。
1.3 批次效应的影响有多大?
我见过最夸张的一次,两份完全相同的 PBMC 样本,因为一个在周一建库、一个在周五建库,UMAP 上居然分成了两个独立的云团。这要是没人提醒,你可能就以为发现了两种新的细胞亚群。
具体来说,批次效应主要造成以下几类问题:
- 细胞群漂移:同一类型的细胞在不同批次中聚不到一起,甚至完全分离。
- 假阳性差异:原来不显著的基因,因为批次原因变得显著;反之亦然。
- 比例估计偏差:一个批次中细胞捕获效率低,导致某个亚群比例被低估,但实际上只是技术原因。
- 注释失败:跨批次聚类后,有些亚群边界模糊,无法用 marker 基因明确归属。
你可以把这个现象画成一张简单的概念图。我习惯用一个流程来理解:
注意:以上比例只是示例。实际项目中,即使细胞比例非常接近,批次效应仍可能让它们在嵌入空间里分家。千万不要只因为比例相似就认为整合是自动完成的。
1.4 为什么需要专门的整合方法?
你可能会想:直接合并数据,然后用常规的 PCA 降维不就完了?我当初也是这么试的。结果发现 PCA 会把批次方差当作最大方差方向,前两个主成分里混的全是批次信息,真实生物学变异被挤到后面去了。
普通标准化(比如 log-normalization)也救不了。一个基因在批次 A 中表达量整体偏高,在批次 B 中整体偏低,标准化只是放缩了一个样本内的分布,跨批次的系统偏移它无能为力。
所以我们必须用专门的整合算法。Harmony 就是其中之一,它的核心思路是:不要硬性要求所有细胞对齐到同一个参考空间,而是通过迭代软聚类 + 调整嵌入,让不同批次的相同细胞类型在低维空间里自然叠在一起。这和先找到锚点、再投影的 Seurat CCA 不同,也和 MNN 配对的做法不一样。
1.5 Harmony 的定位与优势
我在项目中比较过几种主流方法:Seurat CCA、scVI、Harmony。对于 10 万细胞以上的数据集,Harmony 的速度优势非常明显。而且它不需要 GPU,单机就能跑。另外一个我很喜欢的设计是:Harmony 不修改原始表达矩阵,只在 PCA 嵌入上做矫正。这意味着你随时可以退回原始数据做检查,不会丢失信息。
| 方法 | 原理 | 速度(~100k 细胞) | 是否需要 GPU | 是否保留原始表达 |
|---|---|---|---|---|
| Seurat CCA | 锚点 + 投影变换 | 中等 | 否 | 是(但需创建新对象) |
| scVI | 变分自编码器 | 慢(需要训练) | 是(推荐) | 否(生成矫正后表达) |
| Harmony | 迭代软聚类 + 嵌入调整 | 快 | 否 | 是(仅调整 PCA) |
我的建议:如果你刚开始做单细胞整合,又不想被复杂的神经网络调参折磨,Harmony 是最容易上手的选择。我自己所有 10 万级以内项目都用它来做第一轮整合,效果稳定,而且兼容 Seurat 和 Scanpy 两大生态。
1.6 什么时候必须谨慎使用整合?
嗯,到这里我想泼一盆冷水。整合不是万能的,甚至在某些场景下会帮倒忙。
- 当批次效应与生物学效应高度相关时:比如所有处理组在一个批次,对照组在另一个批次。这种情况下,Harmony 可能会把真实的处理效应也当作批次效应给抹掉。你必须在实验设计时就尽量把处理条件跨批次分布。
- 当样本极度不平衡时:一个批次只有 100 个细胞,另一个批次有 10 万个。Harmony 的迭代优化可能会被大样本批次主导,小批次信息丢失。
- 当细胞类型完全不一致时:比如一个批次是脑组织,另一个批次是血液,它们本来就没有重叠的细胞类型。强行整合只会制造虚假的连续状态。Harmony 会在没有共享细胞类型时收敛失败,这是它比较诚实的一点。
我曾经在一个项目中,把小鼠大脑的神经元和人 PBMC 合并分析——纯属需求测试。结果 Harmony 算法花了很长时间才收敛,最终嵌入把所有细胞聚成一个团。这是它告诉你:“对不起,我实在找不出可以对齐的共有的细胞类型。”
1.7 本章小结
一个数据看两天就上手跑 UMAP,很可能被批次效应误导。批次效应存在于每一个多批次项目中,它来自样本处理、试剂、测序平台等几十个细节。应对它的关键是:理解来源 → 评估影响 → 选择合适方法。
Harmony 在众多整合工具中,赢在速度快、不需要 GPU、不修改原始数据,而且使用门槛低。从下一章开始,我们会一步步动手实践:从安装、加载数据,到真正跑一次 Harmony 整合,再到检查矫正效果。
我会把自己的踩坑经历也揉进去,帮你少走弯路。