scRNA-seq解析:学習済みモデルで細胞型を自動アノテーション(CellTypist/Azimuth)

scRNA-seq

📚 この記事について:「scRNA-seq解析 実践シリーズ」アノテーション編。学習済みの分類器でラベルを転写する方法を、Python ネイティブの CellTypist と、参照マッピングの Azimuth で解説します。手法全体の地図は アノテーション手法の全体像 を参照。

🔙 前の記事参照データとの相関による自動アノテーション(SingleR) / 🔜 次の記事基盤モデルによる自動アノテーション(scGPT/Geneformer)

🧩 前提:クラスタリング済みの AnnData(annotated data、scanpy のデータ形式)/全遺伝子の log 正規化済み発現(後述)/Python の基本。


この記事のゴール

教師あり分類・参照マッピング型の自動アノテーションを理解し、CellTypist を Python で動かせること。前記事(相関型)との違いと、事前学習モデルの利点を押さえます。


学習済みモデル型とは

注釈済みの参照データで分類器を学習し、その分類器(モデル)で、自分のデータの各細胞に細胞型ラベルを予測(転写)する方法です。相関型(前記事)が「相関の計算」だったのに対し、こちらは学習した分類器で予測します。細胞ごとに判定でき、最大の利点は、配布されている事前学習モデルを使えば、自分で参照を用意せずに即予測できることです。

学習済みモデル型の仕組み。①学習フェーズ:注釈済み参照で分類器を学習する(配布済みの事前学習モデルを使う場合は省略可)。②予測フェーズ:自分のデータ(ラベルなし)を学習済みモデルに通し、細胞ごとに細胞型を予測する。majority voting でサブクラスタ単位に仕上げる。
学習済みモデル型の仕組み。①学習フェーズ:注釈済み参照で分類器を学習する(配布済みの事前学習モデルを使う場合は省略可)。②予測フェーズ:自分のデータ(ラベルなし)を学習済みモデルに通し、細胞ごとに細胞型を予測する。majority voting でサブクラスタ単位に仕上げる。

CellTypist を使う(Python ネイティブ)

どんなツールか

CellTypist(Domínguez Conde et al., 2022)は、大規模アトラスで学習したロジスティック回帰分類器で細胞型を予測する Python ツールです。多数の事前学習モデルを同梱しており、ダウンロードしてすぐ予測できます。

🎯 発生期マウス脳には Developing_Mouse_Brain モデルがあります。免疫系には Immune_All_Low、腸管には Cells_Intestinal_Tract など、対象に合うモデルを選ぶのが肝心です(一覧は models.models_description())。

コード

pythonimport scanpy as sc
import celltypist
from celltypist import models

# 1) モデルを取得(発生期マウス脳には Developing_Mouse_Brain が好適)
models.download_models(model=["Developing_Mouse_Brain.pkl"])

# 2) 入力は「全遺伝子・log1p 正規化(1万カウント基準)」が必要
#    HVG に絞った adata ではなく、全遺伝子を持つ正規化済みデータを使う
adata_full = adata.raw.to_adata()        # 正規化済み全遺伝子を復元(raw に退避してある場合)
# adata_full.X が CP10K + log1p でなければ:
# sc.pp.normalize_total(adata_full, target_sum=1e4); sc.pp.log1p(adata_full)

# 3) 予測(majority_voting でサブクラスタ単位に仕上げる)
predictions = celltypist.annotate(
    adata_full, model="Developing_Mouse_Brain.pkl", majority_voting=True,
)
adata_pred = predictions.to_adata()      # predicted_labels, majority_voting 列が付く

# 4) 元の adata に書き戻して UMAP 表示
adata.obs["celltypist"] = adata_pred.obs.loc[adata.obs_names, "majority_voting"].values
adata.obs["celltypist"] = adata.obs["celltypist"].astype("category")
sc.pl.umap(adata, color="celltypist", legend_loc="on data", frameon=False)

⚠️ 入力の注意(つまずきやすい)
全遺伝子を渡す:CellTypist はモデルの遺伝子と照合するため、HVG に絞った行列ではなく全遺伝子を使います(adata.raw に退避していれば adata.raw.to_adata())。
CP10K+log1pnormalize_total(target_sum=1e4)log1p の正規化済み発現が必要。生カウントやスケール後の値ではエラー・誤予測になります。

majority_voting=True は、クエリを過剰クラスタリングしてサブクラスタごとに多数決でラベルを決める仕上げです。バッチ効果に強く、ラベルがきれいにまとまります。

自分のデータでモデルを学習する

合うモデルが無ければ、自前の注釈済みデータからモデルを学習できます。

python# 注釈済み参照(adata_ref.obs["cell_type"] にラベル)からモデルを学習
new_model = celltypist.train(adata_ref, labels="cell_type",
                             n_jobs=8, feature_selection=True)
new_model.write("my_model.pkl")

Azimuth(参照マッピング・Web アプリ)

Azimuth(Hao et al., 2021)は、Seurat の参照マッピングツールです。アンカーで自分のデータを注釈済み参照に射影し、ラベルを転写します。各細胞に予測スコア(prediction score)マッピングスコア(mapping score)が付き、信頼度を確認できます。

  • 使い方:Web アプリ(azimuth.hubmapconsortium.org)に h5ad をアップロードし、参照を選んで実行 → 結果をダウンロード。プログラムからは R パッケージを使います。
  • 注意参照はヒト中心(PBMC・肺など)。マウス・発生期に合う参照は限られるため、その場合は CellTypist の Developing_Mouse_Brain などが現実的です。

🔧 Python で参照マッピングをしたい場合:scvi-tools の scANVI / scArches(Xu et al., 2021; Lotfollahi et al., 2022)が、半教師あり学習でラベルを転写できます(深層生成モデルを使うため、詳細は 基盤モデルによる自動アノテーション の記事で扱います)。


学習済みモデル型の主なツール

ツール 言語 方式 ひとこと
CellTypist Python 事前学習ロジスティック回帰 多数の配布モデル・即予測(本記事
Azimuth R / Web 参照マッピング(アンカー) スコアつき・ヒト参照が中心
scANVI / scArches Python 半教師あり深層生成モデル scvi-tools・参照マッピング
scPred R SVM など Seurat と統合
sciBet R 多項回帰 高速・高精度

迷わないための地図:自動アノテーションの系統

「自動アノテーション」のツールは多数ありますが、すべて次の5系統のどれかです。本記事は③教師あり・マッピング型。詳細は各記事へ(全体像は アノテーション手法の全体像)。

系統 代表ツール 参照/DB 詳細
① マーカーDB scType, decoupler, SCSA マーカーDB マーカーDBによる自動アノテーション
② 参照相関 SingleR, scmap, CHETAH 注釈済み参照 参照相関による自動アノテーション
③ 教師あり/マッピング CellTypist, Azimuth, scANVI 参照/事前学習 本記事
④ 深層学習/基盤モデル scGPT, Geneformer 事前学習 基盤モデルによる自動アノテーション
⑤ LLM GPTCelltype, CASSIA 不要 LLMによる自動アノテーション

付いたラベルは UMAP で検証する

自動で付いた細胞型ラベルは、そのまま信じず、代表的なマーカーの発現を UMAP に投影して、本当にそのクラスタに特異的かを目で確かめます。ドットプロットは平均値に要約されるため、UMAP に重ねて細胞ごとの発現を見るのが確実です。

python# 代表マーカーの発現を UMAP に投影して、付いたラベルを検証する
sc.pl.umap(
    adata,
    color=["Pax6", "Eomes", "Neurod6", "Gad2", "Cx3cr1", "Cldn5"],
    ncols=3, cmap="viridis", frameon=False,
)

UMAP に重ねると、次の点が確認できます。

  • 他のクラスタにも発現がないか:そのマーカーが目的以外のクラスタでも光っていないか。
  • クラスタ内での広がり:そのクラスタの全細胞で出ているのか、一部だけか、発現が低いだけか。
  • 複数クラスタにまたがらないか:生物学的に複数の細胞型で発現するマーカーもあります(組み合わせで判断)。

⚠️ 本来発現しないはずのクラスタに発現がある → データ品質を疑う
あるマーカーが、組織学的に発現するはずのないクラスタに出ている場合、QC の不備やダブレット(2細胞が1液滴に入ったもの)の混入を疑います。たとえばニューロンのマーカーと血管内皮のマーカーが同じ細胞群で同時に光るなら、ダブレットの可能性があります。このときは QC の閾値やダブレット除去を見直す(→ QCダブレットの検出の記事)のが安全です。


どれを使えばよいか

  • 対象に合う事前学習モデルがある → CellTypist(発生期マウス脳なら Developing_Mouse_Brain)。Python で完結。
  • ヒトのデータで手軽に試したい → Azimuth(Web アプリ)。スコアで信頼度も見られる。
  • Python で参照マッピングしたい → scANVI / scArches(→ 基盤モデルの記事)。
  • いずれの場合も、結果は手動アノテーションで検証します(上節)。

落とし穴(全系統共通)

⚠️ 自動アノテーションは「下書き」。必ず手動で検証
– 学習済みモデルは学習データに無い細胞型は当てられません。
事前学習モデルはヒト中心が多いので、マウスはマウス用モデル(CellTypist の Developing_Mouse_Brain など)を選びます。
– 付いたラベルは、UMAP へのマーカー投影(上節)で確認してから採用します。


まとめ

  • 学習済みモデル型は、参照で学習した分類器(または配布済みの事前学習モデル)で、細胞ごとにラベルを予測(転写)する。事前学習モデルなら参照不要で即予測できる。
  • 代表は CellTypist(Python・配布モデル多数。マウス発生期は Developing_Mouse_Brain)。入力は全遺伝子・CP10K+log1pが必須。
  • 参照マッピングの Azimuth は Web/R でヒト中心。Python での参照マッピングは scANVI / scArches
  • 付いたラベルは UMAP にマーカーを投影して検証し、想定外の発現があれば QC・ダブレットを再点検する。

次の記事:基盤モデルによる自動アノテーション(scGPT/Geneformer) — 巨大アトラスで事前学習した深層モデルを使う方法に進みます。


関連記事


参考文献

  • Domínguez Conde, C., Xu, C., Jarvis, L. B., et al. (2022). Cross-tissue immune cell analysis reveals tissue-specific features in humans. Science, 376, eabl5197. doi:10.1126/science.abl5197
  • Hao, Y., Hao, S., Andersen-Nissen, E., et al. (2021). Integrated analysis of multimodal single-cell data. Cell, 184, 3573–3587. doi:10.1016/j.cell.2021.04.048
  • 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, e9620. doi:10.15252/msb.20209620
  • Lotfollahi, M., Naghipourfar, M., Luecken, M. D., et al. (2022). Mapping single-cell data to reference atlases by transfer learning. Nature Biotechnology, 40, 121–130. doi:10.1038/s41587-021-01001-7
  • Pasquini, G., Rojo Arias, J. E., Schäfer, P., & Busskamp, V. (2021). Automated methods for cell type annotation on scRNA-seq data. Computational and Structural Biotechnology Journal, 19, 961–969. doi:10.1016/j.csbj.2021.01.015
  • Heumos, L., Schaar, A. C., Lance, C., et al. (2023). Best practices for single-cell analysis across modalities. Nature Reviews Genetics, 24, 550–572. doi:10.1038/s41576-023-00586-w

コメント

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