单细胞分析中最容易被忽略、又最容易踩坑的环节——批次效应(Batch Effect)

同一个实验,不同跑胶日期、不同操作人员、不同测序批次,都可能引入系统性偏差。如果不校正,你看到的"差异"可能只是技术噪声。

1. 识别批次效应

import scanpy as sc
​
# 模拟两个批次的数据
adata1 = sc.datasets.pbmc68k_reduced()
adata2 = sc.datasets.pbmc3k()
adata2.var_names = adata2.var_names.str.upper()  # 基因名统一大写
​
# 合并
adata = sc.concat([adata1, adata2], keys=['batch1', 'batch2'],
                  index_unique='-', join='outer')
adata.obs['batch'] = [s.split('-')[0] for s in adata.obs_names]
​
# 快速看有没有批次效应
sc.tl.pca(adata)
sc.pl.pca_scatter(adata, color='batch', title='Before correction')

2. Harmony 校正(推荐)

# pip install harmonypy
import harmonypy as hm
​
# 先做 PCA
sc.tl.pca(adata, n_comps=50)
​
# Harmony 校正
pcs = adata.obsm['X_pca'][:, :30]
meta = adata.obs[['batch']].copy()
ho = hm.run_harmony(pcs, meta, 'batch')
​
# 把 Harmony 结果写回
adata.obsm['X_pca_harmony'] = ho.Z_corr.T
sc.pp.neighbors(adata, use_rep='X_pca_harmony', n_neighbors=15)
sc.tl.leiden(adata, resolution=0.8)
sc.tl.umap(adata)
​
sc.pl.umap(adata, color=['leiden', 'batch'],
           title='After Harmony correction')

3. BBKNN 校正(Scanpy 内置)

# 不用额外安装,Scanpy 自带
sc.tl.pca(adata, n_comps=50)
sc.external.pp.bbknn(adata, batch_key='batch')
sc.tl.leiden(adata, resolution=0.8)
sc.tl.umap(adata)
​
sc.pl.umap(adata, color=['leiden', 'batch'],
           title='After BBKNN correction')

4. Scanorama 校正

# pip install scanorama
from scanorama import correct, visualize
​
# Scanorama 需要按批次分开的 AnnData 列表
batches = [adata[adata.obs['batch'] == b].copy() for b in adata.obs['batch'].unique()]
corrected = correct(batches, batch_key='batch')
​
# 合并校正后的数据
adata_corr = sc.concat(corrected, index_unique='-', join='outer')
sc.pp.neighbors(adata_corr)
sc.tl.leiden(adata_corr, resolution=0.8)
sc.tl.umap(adata_corr)
​
sc.pl.umap(adata_corr, color=['leiden', 'batch'],
           title='After Scanorama correction')

5. 如何选择

方法 优势 适用场景
Harmony 速度快,效果好 多样本、多批次首选
BBKNN Scanpy 内置,零依赖 快速验证、少量批次
Scanorama 保留更多生物变异 跨物种/跨平台整合
scVI 深度学习,最强 大规模数据集(10万+细胞)

批次效应校正做得不好,后续所有分析结论都可能有问题。如果你有多个样本需要整合分析,建议交给专业团队处理——标准化的 Pipeline 能确保结果可重复、可验证。

🔗 RunLabAI 运智(研算AI(RunLabAI) · 专注AI驱动生物科研计算与智能生信分析)——支持多样本批次校正与整合分析,从数据到报告一站搞定。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐