空間トランスクリプトーム解析(spatial transcriptomics)のうちシーケンス型(Visium・Stereo-seq など NGS で読み出す方式)は、デコンボリューション手法が 20 以上あります。「どれがいちばん良いのか」を知りたくなりますが、大規模なベンチマークを3本読んでも、答えは一致しません。これは誰かが間違っているからではなく、測っている能力が違うからです。この記事では、その食い違いの正体を解いたうえで、手法の選び方を示します。
1. ベンチマークの結論は、一致していない

| ベンチマーク | 規模 | 上位に来た手法 |
|---|---|---|
| Li et al., Nature Methods, 2022 | 16 手法・45 実データ + 32 シミュレーション | cell2location、SpatialDWLS、RCTD |
| Li et al., Nature Communications, 2023 | 18 手法・50 データセット | CARD、cell2location、Tangram |
| Spotless(Sang-aram et al., eLife, 2023) | AUPRC と JSD で評価 | RCTD、cell2location |
3本すべてに名前が挙がっているのは cell2location だけです。RCTD は2本、CARD と Tangram は1本ずつ。「最強の手法」を探しても、見つかりません。
2. なぜ食い違うのか ─ 指標が違えば、勝者が変わる
ベンチマークは、それぞれ違う指標で「正しさ」を測っています。
| 指標 | 何を測るか | この指標で強い手法とは |
|---|---|---|
| PCC(相関) | 推定した割合が、真値と同じパターンで動くか | パターンを再現できる手法 |
| RMSE | 推定した割合が、真値からどれだけ離れているか | 絶対値が正確な手法 |
| JSD | 推定した組成の分布が、真値の分布とどれだけ近いか | 組成全体を正しく当てる手法 |
| AUPRC | 「その細胞型がいる/いない」を正しく判定できるか | 存在の検出が得意な手法 |

「いる細胞型はすべて見つけるが、割合がずれる」手法と、「見つけた細胞型の割合は正確だが、稀な細胞型を見逃す」手法。この2つは、指標を変えれば順位が入れ替わります。
「この領域に T細胞はいるのか」を問いにするなら、存在の検出(AUPRC)が高い手法を選びます。「この領域の細胞組成は何対何か」を問いにするなら、組成の正確さ(JSD、RMSE)が高い手法を選びます。順位表だけを見て選ぶと、自分の問いに合わない手法を選ぶことになります。
3. もう1つの軸 ─ ロバスト性
Li et al.(Nature Communications, 2023)は、精度だけでなく条件を変えたときの安定性も評価しました。解像度、スポット数、遺伝子数を変えても性能が保たれるか、という視点です。
- CARD、cell2location、Tangram、SD2 が、条件を変えても最も安定していた。
- cell2location と DestVI は、シミュレーションでも実データでも安定して良い成績だった。
- cell2location、SpatialDecon、Tangram は、スポット数の多い大きな組織でも扱えた。
自分のデータで、どの条件が当てはまるかは事前には分かりません。特定の条件で最高性能を出すが他では崩れる手法より、どの条件でも安定して上位にいる手法のほうが、実務では信頼できます。3本のベンチマークすべてに名前が挙がる cell2location が「まず試す手法」として妥当なのは、この理由です。
4. RCTD ─ モードをレジームで選ぶ
RCTD(Cable et al., Nature Biotechnology, 2022)の特徴は、プラットフォーム効果を明示的にモデル化することと、3つのモードを持つことです。
| モード | 1フィーチャあたりの細胞型 | 使う場面 |
|---|---|---|
| doublet | 最大2つ | Visium HD、Curio Seeker(フィーチャが細胞に近い) |
| full | 制限なし | Visium の 55 µm スポット(多数の細胞が混ざる) |
| multi | 有限個(3〜4) | その中間 |
55 µm スポットには 1〜10 個の細胞が入ります。ここで doublet モード(最大2細胞型)を使うと、実際にいる細胞型を強制的に2つに押し込むことになります。逆に、10 µm ビーズに full モードを使うと、1〜2 細胞しかいない場所に多数の細胞型を割り当ててしまい、過適合します。モードは、解析単位から自動的に決まります。解析単位の決め方で決めた単位を、そのまま使ってください。
r
# RCTD は R が本家(Bioconductor の spacexr)
library(SpatialExperiment)
library(spacexr)
# 空間データと参照 scRNA-seq を、どちらも生カウントで渡す
rctd_data <- createRctd(spatial_spe, reference_se, cell_type_col = "cell_type")
# モードは、フィーチャに何個の細胞が入るかで決める
# doublet : 1フィーチャに最大2細胞型(Visium HD、Curio Seeker など)
# full : 制限なし(Visium の 55 µm スポット)
# multi : 有限個(3〜4)に制限する
res <- runRctd(rctd_data, rctd_mode = "full", max_cores = 4)
# 割合は assay に入る(行が細胞型、列がフィーチャ)
w <- assay(res, "weights")
print(dim(w))
RCTD は R が本家です。Python 中心で解析している場合は、GPU 対応の移植版があります。
bash
# Python から使いたい場合は、GPU 対応の移植版がある
pip install rctd-py
# R の spacexr と検証されており、優勢な細胞型の判定は 99% 台で一致する
# ただし本家は R 実装。結果が疑わしいときは R で確認する
5. CARD ─ 空間相関を使う
CARD(Ma & Zhou, Nature Biotechnology, 2022)の特徴は、「空間的に近い場所は、細胞型の組成も似ている」という仮定をモデルに組み込むことです。
この効果は2つあります。1つは、参照 scRNA-seq がミスマッチでも精度が保たれること。隣の場所から組成の情報を借りられるので、参照が多少ずれていても踏ん張れます。
もう1つは、測っていない位置の組成を補間できること。スポットとスポットの隙間を埋めて、元のデータより高い解像度の地図を作れます。
r
library(CARD)
# 空間相関を使うので、空間座標が必須
card_obj <- createCARDObject(
sc_count = sc_count, sc_meta = sc_meta,
spatial_count = spatial_count, spatial_location = spatial_location,
ct.varname = "cell_type", ct.select = ct_list,
sample.varname = "sample",
minCountGene = 0, minCountSpot = 0,
)
card_obj <- CARD_deconvolution(CARD_object = card_obj)
prop <- card_obj@Proportion_CARD
# 空間相関を使えるので、測っていない位置の組成を補間できる
card_obj <- CARD.imputation(card_obj, NumGrids = 2000, ineibor = 10)
createCARDObject の minCountGene と minCountSpot は、既定値のままだと遺伝子とスポットをフィルタします。自分でフィルタを済ませてある場合、ここで二重に落ちて、気づかないうちにデータが減っていることがあります。前処理を自分で管理しているなら、どちらも 0 にしておくのが安全です。
「近い場所は似ている」という仮定は、多くの組織で正しい。しかし、その仮定が破れる場所こそ、見たい場所であることがあります。腫瘍と間質の境界では、組成が急激に変わります。境界そのものを問いにするなら、空間平滑化を使わない手法(RCTD、cell2location)の結果と必ず比べてください。
6. Tangram ─ これはデコンボリューションではない
Tangram(Biancalani et al., Nature Methods, 2021)は、他の2つとはやっていることが根本的に違います。

デコンボリューションは、観測を再現するように重みを解く問題でした。観測との誤差が、そのまま制約になります。勝手な答えは返せません。
Tangram がやるのは写像です。参照 scRNA-seq の細胞を、空間の上のどこに置けばよいかを学習します。だから単一細胞の解像度が得られますし、細胞を置いてしまえば、その細胞が持つ全遺伝子を空間に持ち込める。測っていない遺伝子の予測が得意なのは、この構造のためです。
実際、Li et al.(Nature Methods, 2022)でも、測っていない遺伝子の空間分布を予測する課題で Tangram は上位に来ました。
python
import tangram as tg
import scanpy as sc
# 学習に使う遺伝子(マーカー)を選ぶ。ここの質が結果を左右する
sc.tl.rank_genes_groups(adata_sc, groupby="cell_type", method="wilcoxon")
markers = sc.get.rank_genes_groups_df(adata_sc, group=None)
markers = markers[markers["pvals_adj"] < 0.01].groupby("group").head(100)
genes = markers["names"].unique().tolist()
# 共通遺伝子をそろえ、密度事前分布を計算する
tg.pp_adatas(adata_sc, adata_sp, genes=genes)
# mode='clusters' は、細胞型ごとに平均してから写像する(軽い)
ad_map = tg.map_cells_to_space(
adata_sc, adata_sp,
mode="clusters", cluster_label="cell_type",
density_prior="rna_count_based", device="cuda:0",
)
# 細胞型の割合を空間データへ書き戻す
tg.project_cell_annotations(ad_map, adata_sp, annotation="cell_type")
print(adata_sp.obsm["tangram_ct_pred"].head())
# 測っていない遺伝子を、空間に持ち込む(Tangram の本領)
ad_ge = tg.project_genes(ad_map, adata_sc, cluster_label="cell_type")
デコンボリューションは「観測と合うこと」が制約でした。写像は「参照の細胞を、それらしい場所に置く」ことが目的なので、観測されたカウントを厳密に再現する制約は比較的ゆるいのです。その分、人工的なバイアスが入りうる。Tangram の結果を「観測から導かれた事実」として扱うのは危険です。参照に無い細胞状態は、そもそも置きようがないことも忘れないでください。
cells は個々の細胞を写像します。メモリを食いますが、最も細かい。clusters は細胞型ごとに平均してから写像します。参照と空間が別の検体から来ている場合は、こちらが素直です。constrained は、組織像から数えた細胞数を制約として渡します。「この場所には 8 個の細胞がいる」という情報を使えるので、cell2location の N_cells_per_location と同じ発想です。核を数える手間は、ここでも報われます。
Tangram の公式チュートリアルは、次の現象を明記しています。scRNA-seq では非常にスパースなのに、空間データではそうでもない遺伝子がある。Visium のような技術は技術的ドロップアウトが起きやすいため、両者の分布が食い違うのです。こうした遺伝子では、Tangram は良い写像を見つけられません。これは プラットフォーム効果の、もう1つの現れ方です。学習に使う遺伝子(マーカー)の選び方が、結果を大きく左右します。
7. 3手法の使い分け
| RCTD | CARD | Tangram | |
|---|---|---|---|
| やること | デコンボリューション | デコンボリューション | 写像 |
| 返るもの | 割合 | 割合 | 対応づけ(+遺伝子予測) |
| 空間情報 | 使わない | 使う(空間相関) | 使わない |
| 言語 | R(Python 移植版あり) | R | Python |
| 得意なこと | プラットフォーム差への頑健さ、鋭い境界 | 参照ミスマッチへの頑健さ、高解像度への補間 | 測っていない遺伝子の予測、単一細胞解像度 |
| 注意点 | モードを解析単位に合わせる | 既定フィルタ、境界の平滑化 | 観測への制約がゆるい、遺伝子選択が効く |
8. 実務 ─ 複数走らせて、一致を見る
ベンチマークが割れる以上、1つの手法だけを信じるのは合理的ではありません。現実的なやり方は、性格の違う複数の手法を走らせて、結果を比べることです。
python
import numpy as np
import pandas as pd
# 複数手法の結果を、同じ形にそろえて比べる
methods = {"cell2location": prop_c2l, "RCTD": prop_rctd, "Tangram": prop_tg}
# 細胞型ごとに、手法間の相関を見る
for ct in prop_c2l.columns:
vals = pd.DataFrame({m: d[ct] for m, d in methods.items()})
print(ct, vals.corr().round(2).to_dict())
# 一致しないフィーチャに印を付けて、空間の上で見る
stack = np.stack([d.values for d in methods.values()])
spread = stack.std(axis=0).max(axis=1)
adata.obs["disagreement"] = spread
sq.pl.spatial_scatter(adata, color="disagreement")
# 手法が割れる場所は、境界か、参照が合っていない場所であることが多い
見るべきは、手法が一致する場所ではなく、一致しない場所です。手法が割れるフィーチャには、たいてい理由があります。
| 手法が一致しない場所 | 疑うこと |
|---|---|
| 組織の境界 | 組成が急変している。空間平滑化する手法だけがずれていないか |
| 特定の領域だけ | その領域の細胞型が参照に無い可能性 |
| カウントが低い場所 | そもそも推定できるだけの情報がない |
| 稀な細胞型で割れる | 識別可能性の問題。参照でその型が他と区別できているか |
複数の手法が同じ答えを返しても、それは「同じ参照から同じように間違えた」可能性があります。参照に細胞型が欠けていれば、どの手法も同じように、いちばん近い別の型に押し込みます。コンセンサスは不一致を見つけるための道具であって、正しさの保証ではありません。最後は、マーカーを組織の上に投影して確認してください。
まとめ
- ベンチマーク3本の結論は一致しない。3本すべてに名前が挙がるのは cell2location だけ。
- 食い違うのは、測っている能力が違うから。「存在を検出できる(AUPRC)」ことと「割合を当てる(JSD・RMSE)」ことは別。
- 自分の問いがどちらかを先に決める。順位表だけを見て選ばない。
- RCTD はモードを解析単位に合わせる。55 µm スポットなら full、細胞に近いフィーチャなら doublet。
- CARD は空間相関を使う。参照ミスマッチに強いが、鋭い境界を鈍らせる。既定のフィルタにも注意。
- Tangram はデコンボリューションではなく写像。測っていない遺伝子を予測できるが、観測を再現する制約はゆるい。
- 複数手法を走らせ、一致しない場所を見る。ただし一致は正しさの保証ではない。最後はマーカーで確認する。
関連記事
- シーケンス型 空間トランスクリプトーム:デコンボリューションの原理と手法分類
- シーケンス型 空間トランスクリプトーム:cell2location 実践
- シーケンス型 空間トランスクリプトーム:解析単位の決め方
- シーケンス型 空間トランスクリプトーム:Curio Seeker と doublet モード
- scRNA-seq解析:細胞型アノテーション手法の全体像
- scVIだけじゃない:scvi-tools の全体像
- scRNA-seq解析:データの読み込みと品質管理(QC)
- scRNA-seq解析の土台:AnnData のデータ構造をリレーショナルDBの発想で理解する
参考文献
- Li, B., Zhang, W., Guo, C., et al. (2022). Benchmarking spatial and single-cell transcriptomics integration methods for transcript distribution prediction and cell type deconvolution. Nature Methods, 19(6), 662–670. doi:10.1038/s41592-022-01480-9
- Li, H., Zhou, J., Li, Z., et al. (2023). A comprehensive benchmarking with practical guidelines for cellular deconvolution of spatial transcriptomics. Nature Communications, 14(1), 1548. doi:10.1038/s41467-023-37168-7
- Sang-aram, C., Browaeys, R., Seurinck, R., & Saeys, Y. (2023). Spotless, a reproducible pipeline for benchmarking cell type deconvolution in spatial transcriptomics. eLife, 12, RP88431. doi:10.7554/eLife.88431
- Cable, D. M., Murray, E., Zou, L. S., et al. (2022). Robust decomposition of cell type mixtures in spatial transcriptomics. Nature Biotechnology, 40(4), 517–526. doi:10.1038/s41587-021-00830-w
- Ma, Y., & Zhou, X. (2022). Spatially informed cell-type deconvolution for spatial transcriptomics. Nature Biotechnology, 40(9), 1349–1359. doi:10.1038/s41587-022-01273-7
- Biancalani, T., Scalia, G., Buffoni, L., et al. (2021). Deep learning and alignment of spatially resolved single-cell transcriptomes with Tangram. Nature Methods, 18(11), 1352–1362. doi:10.1038/s41592-021-01264-7
- Kleshchevnikov, V., Shmatko, A., Dann, E., et al. (2022). Cell2location maps fine-grained cell types in spatial transcriptomics. Nature Biotechnology, 40(5), 661–671. doi:10.1038/s41587-021-01139-4
- Lopez, R., Li, B., Keren-Shaul, H., et al. (2022). DestVI identifies continuums of cell types in spatial transcriptomics data. Nature Biotechnology, 40(9), 1360–1369. doi:10.1038/s41587-022-01272-8
- Palla, G., Spitzer, H., Klein, M., et al. (2022). Squidpy: a scalable framework for spatial omics analysis. Nature Methods, 19(2), 171–178. doi:10.1038/s41592-021-01358-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


コメント