scRNA-seq解析:参照データとの相関で細胞型を自動アノテーション(SingleR)

scRNA-seq

📚 この記事について:「scRNA-seq解析 実践シリーズ」アノテーション編。参照データとの相関で細胞型を割り当てる方法を、代表ツール SingleR(Python 実装)で解説します。手法全体の地図は アノテーション手法の全体像 を参照。

🔙 前の記事マーカーデータベースによる自動アノテーション(scType) / 🔜 次の記事学習済みモデルによる自動アノテーション(CellTypist/Azimuth)

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


この記事のゴール

参照データ相関型の自動アノテーションを理解し、SingleR を Python で動かせること。マーカーDB型(前記事)が「マーカーのリスト」を使うのに対し、本手法は注釈済みの発現データそのものを参照にします。


参照データ相関型とは

すでに細胞型が分かっている参照データ(リファレンス)を用意し、自分のデータの各細胞と、参照の各細胞型プロファイルとの発現の相関を計算して、最も相関が高い細胞型を割り当てる方法です。細胞ごと(cell-level)に判定でき、マーカーを手で選ぶ必要はありません。

位置づけは、「注釈済みデータの知識を、相関を通じて自分のデータに移す」方法です。マーカーDB型より多くの遺伝子を使うぶん、参照とデータが合っていれば精度が高い一方、良質な参照が必須になります。

参照データ相関型の仕組み。自分のデータの1細胞の発現と、参照(注釈済み)の各細胞型プロファイルとの相関を計算し、最も相関が高い細胞型を、その細胞のラベルとして割り当てる。
参照データ相関型の仕組み。自分のデータの1細胞の発現と、参照(注釈済み)の各細胞型プロファイルとの相関を計算し、最も相関が高い細胞型を、その細胞のラベルとして割り当てる。

SingleR を使う

どんなツールか

SingleR(Aran et al., 2019)は、参照データとの相関で細胞型を細胞ごとに割り当てる代表的なツールです。各細胞について、参照の細胞型ごとのプロファイルとのスピアマン相関をマーカー遺伝子上で計算し、最も似た型を選びます。さらに、上位候補だけを使って相関を計算し直すファインチューニングで、近い細胞型どうしを見分けます。

オリジナルは R ですが、Python 実装 singler(BiocPy)があり、参照データは celldex パッケージから取得できます。Python だけで完結します。

参照データを選ぶ(celldex)

python# まず利用できる参照データの一覧を確認する
import celldex
refs = celldex.list_references()
print(refs[["name", "version"]])
# 例:immgen(マウス免疫), mouse_rnaseq(マウス各組織),
#     blueprint_encode(ヒト), dice(ヒト免疫) など

コード(singler + celldex)

pythonimport scanpy as sc
import singler
import celldex

# 1) 参照データを取得(マウスなら mouse_rnaseq や immgen)
ref = celldex.fetch_reference("mouse_rnaseq", "2024-02-26", realize_assays=True)

# 2) 各細胞を参照と照合して細胞型を割り当てる
#    test_data は「遺伝子 × 細胞」の発現行列(scanpy は 細胞×遺伝子 なので転置)
results = singler.annotate_single(
    test_data     = adata.X.T,
    test_features = list(adata.var_names),
    ref_data      = ref,
    ref_labels    = ref.get_column_data().column("label.main"),  # 粗い分類。細かくは label.fine
)

# 3) 細胞ごとの予測ラベル(best)を AnnData に書き戻す
adata.obs["singler"] = list(results.get_column("best"))
adata.obs["singler"] = adata.obs["singler"].astype("category")
sc.pl.umap(adata, color="singler", legend_loc="on data", frameon=False)

結果(results)には、細胞ごとの best(予測ラベル)、各細胞型への scores、トップとの差を表す delta が入っています。delta が小さい細胞は自信が低いので、注意して扱います。

🔧 環境メモpip install singler celldextest_data は遺伝子×細胞の行列を想定するため、scanpy の AnnData(細胞×遺伝子)は adata.X.T のように転置して渡します(データ形式の細部は singler/celldex のドキュメントを参照。クラスタ単位で割り当てたい場合は、クラスタごとに最頻ラベルを取る方法もあります)。

自分の注釈済みデータを参照にする

celldex の既製参照が合わない場合(発生段階・特殊組織など)は、自分や論文の注釈済みデータを参照にできます。参照データの発現行列と、その細胞型ラベルを渡せば、同じように相関で割り当てられます。

⚠️ 落とし穴
良質な参照が必須:参照が無ければ使えません。参照の質がそのまま結果の質になります。
参照に無い型は当てられない:参照に存在しない細胞型は、無理に既存ラベルへ寄せられます。
種・遺伝子名の一致:マウスのデータにはマウス参照を。遺伝子シンボルの表記(Pax6 vs PAX6)を揃えます。
bulk 参照は粒度が粗いmouse_rnaseq のような bulk 参照は大分類向き。細かい亜型には sc 参照が向きます。
発生期はヒト/成体参照が効きにくい:既製参照に頼らず、自前の発生期参照を検討します。


参照相関型の主なツール

SingleR 以外にも、相関や類似度で割り当てるツールがあります。Python で完結できるのは singler(SingleR の Python 実装)です。

ツール 言語 手法 ひとこと
SingleRsingler R / Python スピアマン相関+ファインチューニング 細胞単位・参照の知識を移す(本記事
scmap R 最近傍/相関(cell・cluster) クラスタ単位の割当も可
CHETAH R 階層的に相関で分類 自信が低い細胞は中間ノードで保留
Clustifyr R 相関ベース クラスタ平均と参照の相関
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ダブレットの検出の記事)のが安全です。


どれを使えばよいか

  • 良質な注釈済み参照がある → 参照相関型(本記事)や教師あり・マッピング型。
  • Python で完結させたい → SingleR の Python 実装 singler
  • マウス・発生期など特殊な系 → 既製参照に頼らず、自前の注釈済みデータを参照にする。
  • いずれの場合も、結果は手動アノテーションで検証します(上節)。

落とし穴(全系統共通)

⚠️ 自動アノテーションは「下書き」。必ず手動で検証
– 参照相関型は参照に無い細胞型は当てられません。
マウスや発生期はヒト/成体参照が効きにくいので、自前参照を優先します。
– 付いたラベルは、UMAP へのマーカー投影(上節)で確認してから採用します。


まとめ

  • 参照相関型は、注釈済み参照との発現の相関で細胞型を細胞ごとに割り当てる。良質な参照が必須
  • 代表は SingleR(スピアマン相関+ファインチューニング)。Python 実装 singlercelldex で完結できる。
  • 参照に無い型は当てられず、マウス・発生期は自前参照が現実的。
  • 付いたラベルは UMAP にマーカーを投影して検証し、想定外の発現があれば QC・ダブレットを再点検する。

次の記事:学習済みモデルによる自動アノテーション(CellTypist/Azimuth) — 参照で学習した分類器でラベルを転写する方法に進みます。


関連記事


参考文献

  • Aran, D., Looney, A. P., Liu, L., et al. (2019). Reference-based analysis of lung single-cell sequencing reveals a transitional profibrotic macrophage. Nature Immunology, 20, 163–172. doi:10.1038/s41590-018-0276-y
  • Kiselev, V. Y., Yiu, A., & Hemberg, M. (2018). scmap: projection of single-cell RNA-seq data across data sets. Nature Methods, 15, 359–362. doi:10.1038/nmeth.4644
  • de Kanter, J. K., Lijnzaad, P., Candelli, T., et al. (2019). CHETAH: a selective, hierarchical cell type identification method for single-cell RNA sequencing. Nucleic Acids Research, 47(16), e95. doi:10.1093/nar/gkz543
  • 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をコピーしました