scATAC-seq のアノテーション② RNA参照からのラベル転移

scATAC-seq
📚 この記事について
注釈済みの scRNA-seq を参照に、細胞型のラベルを ATAC へ自動でコピーする方法です。古典(ingest)と AI(scANVI)を対比します。
🔙 前の記事遺伝子活性スコアでアノテーション
🔜 次の記事モチーフ・TF活性解析
📌 前提:遺伝子活性スコア(細胞×遺伝子)が作れていること、注釈済みRNA参照があること

scATAC-seq(single-cell ATAC-seq/核を使う場合は snATAC-seq)のアノテーションを自動化する方法が、ラベル転移です。ここでは仕組みと、2つのアプローチ、そして最大の注意点を押さえます。

1. ラベル転移とは


マーカーで一つずつ手作業するのは大変です。そこで、すでに細胞型が付いた scRNA-seq 参照データを使い、そのラベルを ATAC へ自動でコピーするのがラベル転移です。

難しいのは、RNA(特徴=遺伝子)と ATAC(特徴=ピーク)で特徴が噛み合わない点です。そこで2ステップで橋渡しします。① 前回の遺伝子活性で ATAC を「細胞×遺伝子」に変換して特徴をそろえ、② 両者を共通の埋め込みに置いて、近い細胞のラベルを転送します。

図:ラベル転移の仕組み(遺伝子活性で特徴を揃え、共通埋め込みでKNN転送)
図:ラベル転移の仕組み(遺伝子活性で特徴を揃え、共通埋め込みでKNN転送)

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ダブレットの見直しも行います。

まとめ


  • ラベル転移=注釈済み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

コメント

タイトルとURLをコピーしました