单细胞分析中最容易被忽略、又最容易踩坑的环节------批次效应(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驱动生物科研计算与智能生信分析)------支持多样本批次校正与整合分析,从数据到报告一站搞定。