この記事のゴール
マーカー遺伝子データベース型の自動アノテーションを理解し、scType を実際に動かせること。さらに、自動アノテーションには他に多くのツールがあるので、全体の中での位置づけと選び方を整理します。
マーカーDB型とは
各クラスタ(または各細胞)の発現を、細胞型ごとの既知マーカー遺伝子のセット(データベース)と照合し、最も合致する細胞型を割り当てる方法です。注釈済みの参照データセットは不要で、必要なのはマーカーDBだけです。
位置づけとしては、手動アノテーションの「既知マーカー照合」を、データベース+スコア計算で自動化したものにあたります。手動と同じく「既知マーカーに基づく」ので、判定根拠が明確なのが長所です。しかしながら、自動アノテーションの結果が正しいかUMAPなどで遺伝子発現を確認する必要はあります。
scType を使う
どんなツールか
scType(Ianevski et al., 2022)は、マーカーの組み合わせから、参照データ無しで超高速に細胞型を同定するツールです。各細胞型について、正マーカー(その型で発現するはずの遺伝子)と負マーカー(発現しないはずの遺伝子)を使い、特異性で重みづけしたスコアを計算します。クラスタごとに最高スコアの細胞型を割り当て、スコアが低いクラスタは「Unknown」とします。
オリジナルは R ですが、Python 移植版(kris-nader/sc-type-py)があり、scanpy の AnnData にそのまま使えます。
コード(Python 移植版)
pythonimport scanpy as sc
import numpy as np
import pandas as pd
# 事前に scType の Python 実装スクリプトとマーカーDBを取得しておく:
# ・実装スクリプト sctype_py.py … GitHub リポジトリ kris-nader/sc-type-py
# ・マーカーDB ScTypeDB_full.xlsx … GitHub リポジトリ IanevskiAleksandr/sc-type
# どちらも作業フォルダに置き(中身を確認してから)、必要な関数を import する
from sctype_py import gene_sets_prepare, sctype_score, process_cluster
# 1) マーカーDBから細胞型ごとの遺伝子セットを準備(組織=Brain を選択)
# gs_positive(正マーカー)と gs_negative(負マーカー)が作られる
gs_list = gene_sets_prepare(
path_to_db_file="ScTypeDB_full.xlsx",
cell_type="Brain", # Immune system / Brain / Lung / Pancreas / Kidney ...
)
# 2) スケール済み発現でスコア計算(adata.X は log 正規化済みを想定)
adata.layers["scaled"] = sc.pp.scale(adata, copy=True).X
scaled = pd.DataFrame(adata.layers["scaled"].T, # 行=遺伝子, 列=細胞
index=adata.var_names, columns=adata.obs_names)
es_max = sctype_score(scRNAseqData=scaled, scaled=True,
gs=gs_list["gs_positive"], gs2=gs_list["gs_negative"])
# 3) クラスタごとに最高スコアの細胞型を割り当てる
clusters = adata.obs["leiden"].unique()
cL = pd.concat([process_cluster(cl, adata, es_max, "leiden") for cl in clusters])
sctype_scores = (cL.groupby("cluster")
.apply(lambda x: x.nlargest(1, "scores"))
.reset_index(drop=True))
# 4) スコアが低いクラスタ(細胞数/4 未満)は "Unknown" にする
low = sctype_scores["scores"] < sctype_scores["ncells"] / 4
sctype_scores.loc[low, "type"] = "Unknown"
# 5) adata に書き戻して UMAP 表示
mapping = dict(zip(sctype_scores["cluster"].astype(str), sctype_scores["type"]))
adata.obs["sctype"] = adata.obs["leiden"].astype(str).map(mapping).astype("category")
sc.pl.umap(adata, color="sctype", legend_loc="on data", frameon=False)
🔧 環境メモ:gene_sets_prepare / sctype_score / process_cluster は、ダウンロードした sctype_py.py 内の関数です(from sctype_py import ...)。リモートのスクリプトを直接実行せず、中身を確認してから import する方が安全です。データの整形(スケール済み行列=遺伝子×細胞)は移植版のチュートリアルに従ってください(バージョンで細部が変わることがあります)。
自分のマーカーDBを使う(重要)
内蔵 DB(ScTypeDB)はヒト・マウスの主要組織に対応しますが、発生段階や特殊な細胞型は手薄です。その場合は、自分のマーカーを同じ形式の XLSX にして渡せます。
python# ScTypeDB と同じ4列の XLSX を用意して渡す:
# tissueType(組織), cellName(細胞型名),
# geneSymbolmore1(正マーカー, カンマ区切り), geneSymbolmore2(負マーカー)
gs_list = gene_sets_prepare(path_to_db_file="my_markers.xlsx", cell_type="Brain_E14")
⚠️ 落とし穴
– 遺伝子名(シンボル)の一致:DB とデータで表記が違うと当たりません。マウスは Title case(Pax6)、ヒトは大文字(PAX6)が基本。
– マウス・発生期はそのまま効きにくい:内蔵 DB の「Brain」は主に成体・主要型向け。発生期の前駆細胞などは自前マーカーDBを推奨(→ 手動アノテーションで使った既知マーカーを流用)。
– クラスタ単位の割当:scType はクラスタ単位で最高スコアの型を付けます。1クラスタに2型が混ざると粗くなるので、resolution を調整します。
マーカーDB型の主なツール
scType 以外にも同系統のツールが複数あります。Python で完結できるのは scType(移植版)・decoupler・SCSA です。
| ツール | 言語 | 手法 | 既定DB | ひとこと |
|---|---|---|---|---|
| scType | R / Python移植 | 正負マーカーの特異性重み付きスコア | ScTypeDB(内蔵) | 超高速・参照不要・カスタムDB可(本記事) |
| decoupler | Python | 機能エンリッチメント(ORA / AUCell) | PanglaoDB ほか | scanpy ネイティブでクリーン |
| SCSA | Python | DEG×DB信頼度のスコアモデル | CellMarker v2 | rank_genes_groups 出力を入力にできる |
| CellAssign | Python(TF) | 確率モデルで割当 | ユーザー定義マーカー | バッチを考慮した確率的割当 |
| SCINA | R | 半教師あり(EM) | マーカーリスト | シンプル・マーカー必須 |
| AUCell | R | gene-set の AUC(細胞単位) | カスタム | SCENIC の一部 |
| Garnett | R | マーカーで分類器を学習 | マーカーファイル | 階層・学習型 |
| scCATCH | R | evidence-based スコア | CellMatch | 組織特異の証拠重み |
💡 Python派へのおすすめ:scType を使うなら移植版、よりクリーンに済ませたいなら decoupler(PanglaoDB のマーカーで ORA)、DEG をすでに出しているなら SCSA が手早いです。
マーカーデータベース
マーカーDB型の精度は、使うDBの質で大きく変わります。代表的なDBは次のとおりです。
| データベース | 対応種 | 特徴 |
|---|---|---|
| CellMarker 2.0(Hu et al., 2022) | ヒト/マウス | 手動キュレーション・大規模(SCSA が利用) |
| PanglaoDB(Franzén et al., 2019) | ヒト/マウス | 広く使われる(decoupler が利用) |
| ScTypeDB | ヒト/マウス | scType 内蔵 |
| CellMatch | ヒト/マウス | scCATCH 用 |
迷わないための地図:自動アノテーション主要ツール早見
「自動アノテーション」を調べると多数のツールが出てきます。どれも5系統のどこかに属します。下表で位置づけを確認し、各系統の詳細は個別記事へ進んでください(本記事は①)。
| 系統 | 代表ツール | 言語 | 参照/DB | 性格・詳細記事 |
|---|---|---|---|---|
| ① マーカーDB | scType, decoupler, SCSA, CellAssign, SCINA | R/Py | マーカーDB | 参照不要・根拠が明確(本記事) |
| ② 参照相関 | SingleR, scmap, CHETAH, Clustifyr | R | 注釈済み参照 | 相関で割当(→ 記事②) |
| ③ 教師あり/マッピング | CellTypist, Azimuth, scPred, scANVI, scArches | Py/R | 参照/事前学習 | ラベル転写(→ 記事③) |
| ④ 深層学習/基盤モデル | scGPT, Geneformer, UCE, scimilarity | Py | 事前学習 | 巨大アトラス活用(→ 記事④) |
| ⑤ LLM | GPTCelltype, CASSIA, scExtract | Py/API | 不要 | マーカーから推定(→ 記事⑤) |
💡 迷ったときの一言:参照データが無いなら①(本記事)か⑤。良い参照があるなら②か③。大規模・GPUがあるなら④。詳しい選び方は アノテーション手法の全体像のフローを参照。
どれを使えばよいか(この系統の選び方)
- 参照データが手元に無い/まず素早く当たりを付けたい → マーカーDB型(本記事)。
- Python で完結させたい → scType 移植版・decoupler・SCSA。
- マウス・発生期など特殊な系 → 内蔵DBに頼らず、自前のマーカーDB(手動記事で使った既知マーカー)を渡す。
- いずれの場合も、結果は手動アノテーションで検証します。
落とし穴(全系統共通)
⚠️ 自動アノテーションは「下書き」。必ず手動で検証
– マーカーDB型はDBに無い細胞型・状態は当てられません。
– マウスや発生期はヒト成体中心のDBが効きにくいので、自前マーカーDBを優先します。
– 付いたラベルは、既知マーカーの発現で確認してから採用します(具体的な手順は次節)。
付いたラベルは 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・ダブレットの検出の記事)のが安全です。
まとめ
- マーカーDB型は、各クラスタの発現をマーカーDBと照合して細胞型を割り当てる。参照不要・根拠が明確。
- 代表は scType(正負マーカーのスコア、Python 移植版あり)。自前マーカーDBを渡せるのが強み。Python では decoupler / SCSA も実用的。
- 自動アノテーションの多数のツールは5系統のどこかに属する。本記事は①。参照の有無・言語・規模で選ぶ。
- どの自動結果も手動で検証してから採用する。
次の記事:参照データとの相関による自動アノテーション(SingleR) — 注釈済み参照データとの相関で割り当てる方法に進みます。
関連記事
- 📖 細胞型アノテーション手法の全体像 … 手動・自動の地図(編のハブ)
- 📖 手動アノテーション(前の記事)/ 📖 参照相関型(SingleR)(次の記事)
- 📖 自動アノテーション残りの系統:③CellTypist・Azimuth/④scGPT・Geneformer/⑤GPTCelltype(LLM)
- 📖 品質管理(QC) / 📖 ダブレット検出(scrublet・SOLO)/ 📖 AnnDataのデータ構造
参考文献
- Ianevski, A., Giri, A. K., & Aittokallio, T. (2022). Fully-automated and ultra-fast cell-type identification using specific marker combinations from single-cell transcriptomic data. Nature Communications, 13, 1246. doi:10.1038/s41467-022-28803-w
- Hu, C., Li, T., Xu, Y., et al. (2023). CellMarker 2.0: an updated database of manually curated cell markers in human/mouse and web tools based on scRNA-seq data. Nucleic Acids Research, 51(D1), D870–D876. doi:10.1093/nar/gkac947
- Franzén, O., Gan, L.-M., & Björkegren, J. L. M. (2019). PanglaoDB: a web server for exploration of mouse and human single-cell RNA sequencing data. Database, 2019, baz046. doi:10.1093/database/baz046
- Cao, Y., Wang, X., & Peng, G. (2020). SCSA: A Cell Type Annotation Tool for Single-Cell RNA-seq Data. Frontiers in Genetics, 11, 490. doi:10.3389/fgene.2020.00490
- Badia-i-Mompel, P., Vélez Santiago, J., Braunger, J., et al. (2022). decoupleR: ensemble of computational methods to infer biological activities from omics data. Bioinformatics Advances, 2(1), vbac016. doi:10.1093/bioadv/vbac016
- Zhang, A. W., O’Flanagan, C., Chavez, E. A., et al. (2019). Probabilistic cell-type assignment of single-cell RNA-seq for tumor microenvironment profiling. Nature Methods, 16, 1007–1015. doi:10.1038/s41592-019-0529-1
- 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


コメント