scATAC-seq(single-cell ATAC-seq/核を使う場合は snATAC-seq)のアノテーションを自動化する方法が、ラベル転移です。ここでは仕組みと、2つのアプローチ、そして最大の注意点を押さえます。
1. ラベル転移とは
マーカーで一つずつ手作業するのは大変です。そこで、すでに細胞型が付いた scRNA-seq 参照データを使い、そのラベルを ATAC へ自動でコピーするのがラベル転移です。
難しいのは、RNA(特徴=遺伝子)と ATAC(特徴=ピーク)で特徴が噛み合わない点です。そこで2ステップで橋渡しします。① 前回の遺伝子活性で ATAC を「細胞×遺伝子」に変換して特徴をそろえ、② 両者を共通の埋め込みに置いて、近い細胞のラベルを転送します。
2. 2つのアプローチ(古典 ⇄ AI)
転送のやり方は大きく2系統です。QC・ダブレットや統合と同じく、手軽な古典手法と頑健なAIの手法です。
| 観点 | ingest / KNN(古典) | scANVI(AI) |
|---|---|---|
| 原理 | 参照の埋め込みに写像し KNN で多数決 | 半教師ありVAEで潜在空間を学習して分類 |
| 準備 | 手軽・学習ほぼ不要 | 学習が必要(GPU推奨) |
| バッチ耐性 | 弱い | 強い(scArches で統合) |
| 不確実性 | 出しにくい | 予測確率(確信度)が出せる |
| 使いどころ | まず試す | 本格・大規模・バッチが強いとき |
3. コード:ingest(まず試す)
scanpy の ingest は、参照の埋め込みに ATAC を写像し、KNN でラベルを移します。共通の遺伝子にそろえるのがコツです(scanpy:Wolf et al., Genome Biology, 2018)。
python
import scanpy as sc
# ref=注釈済みRNA(obs['cell_type']あり)/query=ATACの遺伝子活性行列
# 1. 共通遺伝子にそろえる
common = ref.var_names.intersection(query.var_names)
ref, query = ref[:, common].copy(), query[:, common].copy()
# 2. 参照側で埋め込みを用意
sc.pp.pca(ref); sc.pp.neighbors(ref); sc.tl.umap(ref)
# 3. ingest でラベルを転送(KNN)→ query.obs['cell_type'] に予測が入る
sc.tl.ingest(query, ref, obs="cell_type")
4. コード:scANVI(頑健にやる)
バッチが強い・大規模・確信度が欲しいときは scANVI です。ラベル付き参照で半教師あり学習し、クエリを写像して予測します(scANVI:Xu et al., Mol. Syst. Biol., 2021)。
python
import scvi # 参照RNAで学習 → ATACクエリに転送(要点)
# 1. scVI → scANVI(ラベル付きで半教師あり学習)
scvi.model.SCVI.setup_anndata(ref, labels_key="cell_type")
m = scvi.model.SCANVI.from_scvi_model(scvi.model.SCVI(ref), unlabeled_category="Unknown")
m.train()
# 2. ATACクエリを写像(scArches)して予測
q = scvi.model.SCANVI.load_query_data(query, m)
q.train(max_epochs=100)
query.obs["predicted"] = q.predict() # 予測ラベル
query.obs["confidence"] = q.predict(soft=True).max(1) # 確信度
5. 転送結果は「下書き」。必ず検証する
ラベル転移が返すのはあくまで下書きです。鵜呑みにせず、遺伝子活性スコアの回と同じくマーカーを UMAP に投影して検証します(そのクラスタだけに出ているか/全細胞か一部か/複数クラスタにまたがらないか)。
⚠️ 参照に無い細胞型は「誤ってラベルされる」
最大の注意点はこれです。ATAC に参照RNAに存在しない細胞型があると、その細胞は最も近い既存ラベルに強制的に割り当てられます(本当は別物なのに)。scANVI の確信度が低い細胞や、マーカーと合わないクラスタは、参照に無い細胞型の可能性を疑ってください。組織学的にありえないラベルが出たときは、QC・ダブレットの見直しも行います。
最大の注意点はこれです。ATAC に参照RNAに存在しない細胞型があると、その細胞は最も近い既存ラベルに強制的に割り当てられます(本当は別物なのに)。scANVI の確信度が低い細胞や、マーカーと合わないクラスタは、参照に無い細胞型の可能性を疑ってください。組織学的にありえないラベルが出たときは、QC・ダブレットの見直しも行います。
まとめ
- ラベル転移=注釈済みRNAからラベルを自動コピー。①遺伝子活性で特徴をそろえ、②共通埋め込みで転送。
- ingest(古典・手軽)と scANVI(AI・頑健・確信度あり)の2択。
- 結果は下書き。マーカーで検証し、参照に無い細胞型に注意。
関連記事
参考文献
- Wolf, F. A., Angerer, P., & Theis, F. J. (2018). SCANPY: large-scale single-cell gene expression data analysis. Genome Biology, 19, 15. doi:10.1186/s13059-017-1382-0
- Xu, C., Lopez, R., Mehlman, E., et al. (2021). Probabilistic harmonization and annotation of single-cell transcriptomics data with deep generative models. Molecular Systems Biology, 17(1), e9620. doi:10.15252/msb.20209620
- Zhang, K., Zemke, N. R., Armand, E. J., & Ren, B. (2024). A fast, scalable and versatile tool for analysis of single-cell omics data. Nature Methods, 21(2), 217–227. doi:10.1038/s41592-023-02139-9


コメント