1. 单细胞整合概述:批次效应来源、整合目标、主流方法简介

做过单细胞分析的都知道,数据整合是个绕不过去的坎。你费尽心思跑了几个样本,想合并到一起做联合分析,结果一投影——样本各自抱团,明明相同的细胞类型却因为来自不同实验批次而分开。

嗯,这就是典型的批次效应。我最早接触这个问题时,还以为是细胞本身有差异,后来发现连同一个PBMC样本分两次测都能跑出两个群,这才明白技术差异有多严重。

1.1 什么叫批次效应?它从哪来的?

批次效应说白了就是非生物学因素导致的数据差异。你想想看,同样一种细胞,用不同试剂、不同仪器、不同时间测,得到的表达量就是不一样。这些都是干扰信号,不是我们想要的生物学变异。

我根据自己的经验,把常见的批次效应来源整理了一下:

  • 样本捕获与建库差异:不同批次的建库试剂盒、反转录效率不同,甚至同一个实验员操作手法的波动都会引入偏差。
  • 测序平台/仪器差异:10X Genomics 不同版本、Illumina 不同机型,测序深度、reads 错配率都不一样。
  • 实验时间与操作:今天做的样本和上个月做的样本,环境温度、试剂保存状态都变了。
  • 样本处理与冰冻时间:新鲜组织 vs 冻存组织,单细胞解离时细胞活率差异很大。
  • 批次内多重效应:最隐蔽的是同一次实验内也有微批次效应,比如芯片不同泳道。

我曾经在整合3个公开数据集时发现,明明是同一个器官的正常细胞,仅仅因为数据集来源不同,在tSNE上就拉开了“楚河汉界”。当时花了好几天才排查出是测序平台不同导致的——那次之后我就养成了先检查技术变量的习惯。

核心观点: 批次效应是技术噪声,不是生物学信号。整合的目的就是消除这些噪声,同时保留真正的细胞异质性。

1.2 整合的目标到底是什么?

很多人以为整合就是“把所有样本的数据拼在一起”,其实远没那么简单。真正整合要回答三个问题:

  1. 消除批次偏差:相同细胞类型的表达谱在不同批次间应该对齐,而不是各自站队。
  2. 保留生物学差异:真正的细胞类型、分化状态、疾病相关变化必须保留,不能因为校正而被抹平。
  3. 维持数据原始结构:校正后的数据最好能恢复成类似“同一批次测出来的”状态,便于后续差异分析、轨迹推断等。

我用一个简表说明整合前后的变化:

维度整合前整合后
PCA/UMAP投影样本各自聚集,互不重叠相同细胞类型跨样本混合
聚类结果聚类群可能按样本分聚类群按细胞类型分
差异基因检测大量技术差异基因干扰只保留生物学差异基因

小经验: 第一次做整合时,我建议先对每个样本单独跑个PCA降维,看看样本间的分布是否明显分离。如果PCA图上样本分得很开(连U轴都没混到一起),那批次效应就一定很严重。

1.3 主流方法有哪些?

现在市面上的整合方法少说也有十几种,但真正被社区广泛验证、好用的就那么几个。我把它们分成两类:

  • 基于匹配细胞对的方法:CCA(Seurat Canonic Correlation Analysis)、MNN(Mutual Nearest Neighbors)。它们通过寻找跨数据集的“互近邻”或“高度相关”的细胞对来建立校正锚点。
  • 基于嵌入对齐的方法:Harmony、scVI(深度学习生成模型)、BBKNN。它们不依赖显式的细胞匹配,而是通过在低维空间中对齐每个数据集的分布来校正。

具体技术特点我习惯用下表对比(这里只列我们课程会重点讲的两种):

方法原理核心适用场景计算资源保留生物学细节
CCA (Seurat)寻找跨数据集的共享相关维度中等数据集(<50万细胞),且细胞类型已知或关系清晰内存中等,需逐步锚点计算较好,尤其适合跨物种或不同模态整合
Harmony在PCA空间迭代调整软聚类质心大型数据集(百万级细胞),批次数量多速度快,可扩展性好优秀,对精细状态变化敏感

代码上,这两种方法的调用其实很简洁。以R语言为例:

# Seurat CCA 整合流程
merged_obj <- NormalizeData(merged_obj) %>%
  FindVariableFeatures(selection.method = "vst", nfeatures = 2000) %>%
  RunPCA(npcs = 30) %>%
  FindIntegrationAnchors(dims = 1:30) %>%
  IntegrateData(dims = 1:30)

# Harmony 整合流程
merged_obj <- NormalizeData(merged_obj) %>%
  FindVariableFeatures(selection.method = "vst", nfeatures = 2000) %>%
  ScaleData() %>%
  RunPCA(npcs = 30) %>%
  RunHarmony(group.by.vars = "sample_id")

看到没有?Harmony 的接口更直接,一行 RunHarmony 就完成了校正。而 Seurat CCA 需要先找锚点再整合,步骤多一些,但这也给了你更多的控制权。

避坑提醒: 我曾经在整合一个包含10个样本、约30万细胞的数据时,直接用 CCA 报内存不够。后来改成 Harmony,跑完只用了不到5分钟。如果你的数据量超过20万细胞,一定要先考虑 Harmony 或 scVI。

1.4 我为什么选 Harmony 和 Seurat CCA 做专题?

市面上方法虽多,但实际项目中用得最多的就是这两家。我自己参与过十几个单细胞项目,从肿瘤到免疫图谱,几乎都离不开这两个工具。CCA 方法论积淀深,适合理解整合的数学原理;Harmony 工程化好,处理大规模数据又快又稳。

更重要的是,这两个方法正好代表两种不同的技术路线——基于锚点匹配 vs 基于嵌入对齐。搞懂它们,再学其他方法(比如 scVI、MNN)就会触类旁通。

下面的SVG图梳理了本章的核心知识结构,帮大家建立整体框架:

单细胞整合知识框架 单细胞整合知识框架 批次效应来源 技术平台差异 试剂批次/操作 测序深度/质量 样本处理/保存 整合核心目标 消除批次偏差 保留生物异质性 维持原始结构 主流整合方法 CCA (Seurat) Harmony MNN / scVI 🔍 图上展示了从批次效应诊断 → 整合目标设定 → 方法选择的全流程 本课程重点剖析 CCA 与 Harmony,其余方法作为参照对比

好了,这一章我们理清了批次效应的来源、整合的目标是什么、以及市面上主流的方法都有哪些。从下一章开始,我会带着大家一起手撕 CCA 的数学原理,看看它到底是怎么找到那个“共享低维空间的”。

一句话总结: 单细胞整合的核心矛盾是区分“技术噪声”与“生物信号”。理解了这个矛盾,你就抓住了所有整合方法的钥匙。