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。整合后做聚类,样本完美按测序批次分成了两群。我当时还以为发现了新的亚型,高兴了好几天……后来复盘才意识到,就是测序深度差异导致的。
常见的测序批次相关变量包括:
- 文库构建试剂盒批号不同
- PCR 扩增循环数差异
- 测序仪型号(NovaSeq vs NextSeq)
- 测序运行时间、簇密度、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}")
注意:可视化发现批次分离 ≠ 必须校正所有分离。有时候批次效应与生物学效应纠缠在一起,校正过度反而会损失真实信号。判断什么该校正、什么该保留,需要结合实验设计和先验知识。
好了,这一章我们把批次效应的来龙去脉梳理清楚了。从技术差异、样本处理、测序批次三大来源,到它们对表达矩阵和下游分析的具体影响,再到如何识别和评估——这些是后续所有校正方法的基础。理解了"敌人"长什么样,我们才能找到最有效的武器去对付它。