2. 批次效应的来源与影响

空间转录组数据整合时,最让人头疼的问题之一就是批次效应。说白了,就是不同批次采集的数据之间出现了系统性的差异,这种差异跟生物学本身无关,纯粹是技术操作带来的"假象"。如果不处理,你可能会把技术假象当成生物学发现来解读,后果嘛……嗯,轻则浪费几个月时间,重则得出完全错误的结论。

我个人做过不少跨平台、跨批次的空间转录组整合项目,踩过的坑真不少。下面这张图概括了批次效应的主要来源和它们对分析的影响路径,你可以先有个整体印象。

空间转录组批次效应:来源与影响路径 技术差异 样本处理 测序批次 批次效应 空间基因表达偏移 下游分析偏差 聚类混淆 差异表达假阳性 空间模式失真 生物学结论错误 来源层 → 效应层 → 影响层 → 具体表现 识别批次效应是校正的第一步,也是关键一步

2.1 技术差异:平台与实验条件

空间转录组的技术平台五花八门,从主流的 10X Visium、Slide-seq、MERFISH,到各种定制化的原位测序方案。每个平台的捕获原理、分辨率、基因检测数和空间定位精度都不一样。你想想看,把不同平台的数据放到一起分析,先天基因表达谱就带着各自的"胎记"。

我记得刚接触空间转录组时,手头有 10X Visium 和 Slide-seq 两套数据,同一个基因在两个平台上的表达量能差 3 倍以上。一开始我以为是生物学差异,后来排查了一圈才发现——就是平台技术原理不同导致的。

除了平台本身,实验条件也逃不掉。温度、湿度、试剂批号、操作人员的习惯……这些细小的差异都会在最终数据中留下痕迹。下面这个表格列出了几个主流平台的关键技术参数差异,你看完就明白了。

技术参数 10X Visium Slide-seq MERFISH
空间分辨率 55 μm(spot间距) ~10 μm(bead直径) ~0.1 μm(单分子)
基因检测数 ~2000 / spot ~500 / bead ~10000 / cell
捕获效率 中 低 高
是否依赖转录本扩散 是 是 否

关键认知:平台间的技术差异是批次效应的"先天性"来源。即使同一平台,不同实验室、不同试剂批次也会引入额外变异。

2.2 样本处理:组织获取与制备

样本处理环节是批次效应的另一个"重灾区"。从样本采集、保存方式到切片、透化,每一步都暗藏玄机。

我在项目中遇到过这样的情况:同一个肿瘤样本,前后两端各切了一片,结果前端切片检测到的基因总数比后端多了近一倍。查了半天才发现——透化时间差了 3 分钟。你想想看,这种差异一旦混入整合数据,很容易被误判为肿瘤异质性。

  • 采集时间差异:上午 vs 下午采集,样本的代谢状态不同,RNA 完整度也不同。
  • 保存方式:新鲜冷冻 vs FFPE 处理,RNA 质量天差地别。
  • 切片厚度与位置:厚度差 5 μm,捕获到的细胞层就不一样。
  • 透化时间:这个参数各家都得优化,差 1 分钟基因检出数就明显变化。

实操建议:在项目设计阶段,尽量将所有样本的保存方式、切片参数、透化条件统一。如果条件不允许,至少要在元数据中详细记录这些信息,方便后续校正时作为协变量使用。

2.3 测序批次:文库制备与测序运行

测序环节的技术差异,很多时候被低估了。文库制备的批次、测序仪的型号、测序运行的深度——这些都能在数据中"刻下"独特的烙印。

我曾经踩过这个坑:同一批样本分两批建库测序,第一批跑了 50M reads/spot,第二批只跑了 30M reads/spot。整合后做聚类,样本完美按测序批次分成了两群。我当时还以为发现了新的亚型,高兴了好几天……后来复盘才意识到,就是测序深度差异导致的。

常见的测序批次相关变量包括:

  1. 文库构建试剂盒批号不同
  2. PCR 扩增循环数差异
  3. 测序仪型号(NovaSeq vs NextSeq)
  4. 测序运行时间、簇密度、Q30 质量值

注意:测序深度的差异在空间转录组中影响尤其大。因为每个 spot 的覆盖度本身就低,批次间的深度差异会直接改变基因检测的灵敏度和动态范围。

2.4 对空间基因表达的影响

上面说的这些来源,最终都会汇聚到基因表达矩阵上。具体来说,批次效应会造成以下几类问题:

  • 表达量系统偏移:同一个基因在不同批次中,平均表达水平不同。
  • 空间模式失真:某个基因在组织中的空间梯度,可能被批次效应扭曲或掩盖。
  • 基因检测灵敏度差异:低表达基因在一个批次中检测不到,在另一个批次中正常。
  • 噪声水平变化:不同批次的 dropout 率和背景噪声不同,影响后续建模。

说白了,批次效应就像给原始信号叠加了一层"技术滤镜"。你不把它去掉,看到的画面就是失真的。

2.5 对下游分析的影响

批次效应最致命的影响,不在表达矩阵本身,而在于它会一路传导到下游分析中,污染每一个结论。

我个人习惯,拿到整合数据后的第一件事不是看生物学差异,而是先检查批次效应是否已经消除。不然的话,后续分析很可能是在"画假图、说假话"。

下面列出几个受批次效应影响最明显的下游环节:

下游分析 批次效应带来的问题 后果
聚类分析 样本按批次而非生物学特征聚类 误判细胞类型或空间区域
差异表达 批次间差异被误认为生物学差异 假阳性率飙升
空间可变基因检测 批次引入的伪空间模式被检测为SVG 空间生物学结论错误
细胞类型注释 参考数据集与目标数据集存在批次偏移 注释偏差
空间通信推断 配体-受体表达关系被批次效应干扰 细胞互作网络失真

一句话总结:批次效应是所有下游分析的"噪声放大器"。不校正,后面的工作就是在沙子上盖楼。

2.6 批次效应的识别与评估

既然批次效应这么"坏",我们怎么及时发现它呢?我的经验是:先可视化,再量化。

可视化层面,PCA 和 UMAP 是最直接的工具。按批次着色,如果不同批次的数据点明显分离,那就要警惕了。量化层面,我常用 kBET、LISI 和 ASW 这几个指标来评估批次混合程度。

这里给一个简单的 Python 检查脚本,用 Scanpy 做 PCA 着色,一眼就能看出有没有批次问题:

import scanpy as sc

# 加载整合后的数据
adata = sc.read('integrated_spatial.h5ad')

# 检查批次列是否存在
if 'batch' not in adata.obs.columns:
    print("请先在 adata.obs 中添加 batch 列")

# PCA 降维并可视化
sc.pp.pca(adata, n_comps=30)
sc.pl.pca(adata, color='batch', title='PCA: 按批次着色')

# 运行 UMAP 做进一步验证
sc.pp.neighbors(adata, n_pcs=20)
sc.tl.umap(adata)
sc.pl.umap(adata, color='batch', title='UMAP: 按批次着色')

我的习惯:在运行任何正式校正之前,我都会先做 PCA + UMAP 的可视化检查。如果批次分离明显,我会记录下分离的程度和方向,作为后续校正效果的基线参考。

量化评估方面,我建议至少使用两个互补指标。比如 kBET 检测局部混合程度,ASW 评估全局批次分离度。下面是一个简单的计算片段:

import scanpy as sc
import numpy as np
from scib.metrics import kBET, silhouette_batch

# 假设 adata 已经包含 batch 列
# 计算 kBET (值越接近1越好)
kbet_score = kBET(adata, batch_key='batch', label_key='cluster')
print(f"kBET 接受率: {kbet_score:.3f}")

# 计算批次 ASW (值越接近0表示混合越好)
batch_asw = silhouette_batch(adata, batch_key='batch', label_key='cluster')
print(f"批次 ASW: {batch_asw:.3f}")

注意:可视化发现批次分离 ≠ 必须校正所有分离。有时候批次效应与生物学效应纠缠在一起,校正过度反而会损失真实信号。判断什么该校正、什么该保留,需要结合实验设计和先验知识。

好了,这一章我们把批次效应的来龙去脉梳理清楚了。从技术差异、样本处理、测序批次三大来源,到它们对表达矩阵和下游分析的具体影响,再到如何识别和评估——这些是后续所有校正方法的基础。理解了"敌人"长什么样,我们才能找到最有效的武器去对付它。