シーケンス型 空間トランスクリプトーム:Visium HD のビン→細胞再構成 ─ 組み立てた細胞に、どう型を付けるか

Spatial transcriptome
📚 この記事について
2 µm ビンを細胞に組み立てたあと、その細胞にどう細胞型を割り当てるかを扱います。再構成した細胞はきれいな単一細胞ではないため、アノテーションとデコンボリューションのどちらを使うべきか、そして混入した細胞をどう見つけるかが問題になります。
🔙 前の記事:シーケンス型 空間トランスクリプトーム:Curio Seeker と doublet モード
🔜 次の記事:シーケンス型 空間トランスクリプトーム:Stereo-seq の bin と cellbin
📌 前提scRNA-seq解析:細胞型アノテーション手法の全体像解析単位の決め方

空間トランスクリプトーム解析(spatial transcriptomics)のうちシーケンス型(Visium・Stereo-seq など NGS で読み出す方式)は、Visium HD の 2 µm ビンでは、1個の細胞が何十ものビンに割れています。解析単位の決め方で見たように、bin2cell などで細胞に組み立て直すことができます。問題はその先です。組み立てた細胞に、どうやって細胞型を割り当てるのか。ここで多くの人が「もう1細胞なのだから、scRNA-seq と同じでいい」と考えますが、それは正確ではありません。この記事では、その理由と、正しい進め方を示します。

1. 再構成した細胞は、きれいな単一細胞ではない


図:再構成した細胞は、隣の細胞の転写産物を拾う
図:再構成した細胞は、隣の細胞の転写産物を拾う

scRNA-seq では、1個の細胞をまるごと回収して配列を読みます。得られるのは、その細胞だけの発現です。

bin2cell(Polański et al., Bioinformatics, 2024)がやるのは、核を見つけて、そこから外へ膨張させ、範囲に入ったビンを1細胞としてまとめることです。この膨張の縁で、隣の細胞の転写産物が混ざり込みます。

混ざる原因は1つではありません。境界での取り違え、セグメンテーションの誤差、細胞が密に詰まった領域、そして透過処理中の転写産物の側方拡散。核を膨張させて細胞を作る以上、この混入(partial volume 効果)は必ず一定量起きます

⚠️ 「再構成した=混入は終わった」ではない
細胞に組み立てると、達成感から「もう scRNA-seq と同じ」と思いたくなります。しかし実際には、多くの細胞は1細胞(singlet)でも、一部は2細胞ぶんが混ざったままです。この「一部」を見つけて適切に扱うことが、アノテーションの質を決めます。細胞に組み立てても、細胞型を割り当てる(全体像)で触れた混入の問題は、まだ終わっていません。

2. 中心の問い ─ アノテーションか、デコンボリューションか


再構成した細胞に型を付ける道は、2つあります。

  • アノテーション:1細胞に1つのラベルを付ける。参照 scRNA-seq からのラベル転移。scRNA-seq と同じやり方。
  • デコンボリューション:混入を割合として明示的に扱う。RCTD の doublet モードや cell2location。
図:再構成した細胞を、どう型付けするか
図:再構成した細胞を、どう型付けするか

結論から言うと、多くの場合はアノテーションが素直です。理由は、再構成した細胞の大半が実際に単一細胞だからです。

💡 「約75%はsinglet」という経験則
8 µm ビンに RCTD の doublet モードを当てると、おおよそ 75% のビンが singlet(単一の細胞型)と判定される、という報告があります。bin2cell で再構成した細胞についても、多数が単一の細胞型に支配されているという観察が、開発側から共有されています。大半が単一細胞なら、1細胞に1ラベルを付けるアノテーションのほうが自然です。混入を割合に分解するデコンボリューションは、この場合むしろ過剰です。

大腸がんの Visium HD を詳細に解析した研究(Oliveira et al., Nature Genetics, 2025)は、この再構成+アノテーションのアプローチで、免疫細胞集団を高精細に地図化できることを示した代表例です。

3. では、デコンボリューションはいつ使うのか


デコンボリューションを捨てるわけではありません。使いどころは、混入した細胞を洗い出す道具としてです。

RCTD の doublet モードを走らせて、singlet と判定された細胞と、doublet と判定された細胞を分けます。doublet が多く出る細胞型は、混入が起きやすい場所にあると分かります。アノテーションで付けたラベルを、この判定で検証するのです。

💡 デコンボリューションは、細胞ではなくビンに対して行う
再構成した1つ1つの細胞に対してデコンボリューションを走らせるのは、計算コストが高くつきます。実務では、8 µm ビンに対してデコンボリューションを行うのが現実的です。8 µm ビンは、1細胞ぶんに近いカウントを持ちつつ、細胞数が細胞単位より少なくて済みます。de Oliveira らの解析でも、RCTD は 8 µm ビンに対して doublet モードで適用されています。

そして、この singlet の割合そのものが、再構成の質の指標になります。70〜75% が単一型に出るなら、再構成はうまくいっています。singlet の割合が極端に低いなら、セグメンテーションがうまくいっていないか、参照が組織に合っていない可能性があります。

4. パイプライン ─ 再構成から検証まで


図:再構成した細胞を型付けし、検証するまで
図:再構成した細胞を型付けし、検証するまで

順番に見ていきます。まず再構成です。手順の詳細は解析単位の決め方で扱ったので、ここでは要点だけを示します。

python
import bin2cell as b2c
import scanpy as sc

# 2 µm ビンを読み、縞を補正し、核から細胞を組み立てる
# (手順の詳細は「解析単位の決め方」を参照。ここでは要点だけ)
adata = b2c.read_visium("data/square_002um", source_image_path="data/tissue.btf")
adata.var_names_make_unique()
b2c.destripe(adata)                       # 行・列の縞を補正
b2c.scaled_he_image(adata, mpp=0.3, save_path="he.tiff")
b2c.stardist(image_path="he.tiff", labels_npz_path="he.npz",
             stardist_model="2D_versatile_he", prob_thresh=0.01)
b2c.insert_labels(adata, labels_npz_path="he.npz", mpp=0.3, labels_key="labels_he")
b2c.expand_labels(adata, labels_key="labels_he",
                 expanded_labels_key="labels_he_expanded")

# ビンを細胞にまとめる。ここで初めて「細胞 × 遺伝子」になる
cdata = b2c.bin_to_cell(adata, labels_key="labels_he_expanded")
print(cdata.shape)                        # (細胞数, 遺伝子数)

5. 細胞側の QC ─ ここは scRNA-seq に近い


組み立てた細胞に対する QC は、scRNA-seq の QCに近づきます。ただし、空間データ特有の指標が1つ増えます。細胞の面積(=まとめられたビンの数)です。

python
import numpy as np

# 細胞側の QC。ここは scRNA-seq に近い
sc.pp.calculate_qc_metrics(cdata, inplace=True, log1p=False)

# 1. 細胞の面積(=まとめたビンの数)。膨張しすぎた細胞を外す
hi = np.quantile(cdata.obs["bin_count"], 0.99)
cdata = cdata[cdata.obs["bin_count"] <= hi].copy()

# 2. カウントと遺伝子数が極端に低い細胞を外す
cdata = cdata[cdata.obs["total_counts"] >= 100].copy()

# 3. 生カウントを残す(デコンボリューションで使う)
cdata.layers["counts"] = cdata.X.copy()
確認すること 見るもの おかしい場合
細胞の面積 bin_count(まとめたビン数) 極端に大きい細胞は、膨張しすぎ。複数細胞が融合している疑い
カウント total_counts 極端に低い細胞は、核だけ拾って周りを取れていない
遺伝子数 n_genes_by_counts 低い細胞は、型付けに耐えない
細胞数 8 µm ビン数と比較 ビン数より極端に多いなら、核の過剰検出

6. アノテーション ─ 参照からラベルを転移する


再構成した細胞は、位置情報つきの単一細胞データに近いので、scRNA-seq のアノテーション手法がそのまま使えます。自動アノテーションなら CellTypist、深層生成モデルを使うなら scANVI(Xu et al., Molecular Systems Biology, 2021)が候補です。

python
import celltypist
from celltypist import models

# 参照 scRNA-seq から学習したモデルで、細胞にラベルを付ける
# 自前の参照があるなら、それで train したモデルを使う
model = models.Model.load("Immune_All_Low.pkl")

# CellTypist は対数正規化した入力を前提にする(1e4 正規化 + log1p)
cdata.X = cdata.layers["counts"].copy()
sc.pp.normalize_total(cdata, target_sum=1e4)
sc.pp.log1p(cdata)

pred = celltypist.annotate(cdata, model=model, majority_voting=True)
cdata = pred.to_adata()
print(cdata.obs["majority_voting"].value_counts())
⚠️ 参照は、同じ組織・近いプラットフォームのものを
ラベル転移の質は、参照の質で決まります。組織が違えば細胞型の構成も発現も変わりますし、参照に無い細胞型は、細胞型を割り当てる(全体像)で見たとおり、いちばん近い別の型に押し込まれます。Visium HD のプローブ捕捉データに poly-A の参照を使うなら、使える遺伝子は共通部分だけになる点にも注意してください。

7. 検証 ─ マーカーを UMAP と組織像の両方に投影する


これは、細胞型アノテーションのすべての手法に共通する、省略できない工程です。自動アノテーションが返したラベルを、そのまま信じてはいけません。マーカー遺伝子の発現を、UMAP に投影して確かめます。

python
import squidpy as sq

# クラスタリングして UMAP を描く(発現空間での確認のため)
sc.pp.pca(cdata, n_comps=30)
sc.pp.neighbors(cdata, n_neighbors=15)
sc.tl.umap(cdata)

# 検証:マーカーを UMAP に投影する(型付けを鵜呑みにしない)
markers = ["EPCAM", "PTPRC", "CD3D", "CD68", "COL1A1"]
sc.pl.umap(cdata, color=markers + ["majority_voting"], ncols=3)

# 検証:同じマーカーを、今度は組織の上に投影する
sq.pl.spatial_scatter(cdata, color=markers, shape=None)
# UMAP と組織像、両方でマーカーが「あるべき場所」に出るかを見る

UMAP にマーカーを投影すると、3つのことが分かります。

  • 他のクラスタも、同じマーカーを発現していないか。T細胞マーカーが、T細胞と呼んでいないクラスタでも光っているなら、そのマーカーは特異的でないか、ラベルが間違っている。
  • そのクラスタの全体で発現しているか、一部だけか、それとも弱いか。クラスタの一部でしかマーカーが出ないなら、そのクラスタは均一でなく、さらに細かい型が混ざっている。
  • 複数のクラスタにまたがって発現しているマーカーはないか。あるなら、そのマーカーで分けようとした型は、分けられていない。

空間データでは、これに加えて組織の上への投影も行います。同じマーカーが、組織像で「あるべき場所」に出ているかを見ます。上皮マーカーが上皮の領域に、免疫マーカーが免疫浸潤の領域に出ていれば、型付けは組織構造と整合しています。

⚠️ 組織学的にありえない場所に型が光ったら
たとえば、上皮にしかないはずの型が間質に出る。免疫細胞のマーカーが、免疫細胞がいないはずの領域で光る。こういうときは、混入か QC の失敗を疑ってください。再構成した細胞では、その原因はたいてい partial volume 効果(隣の細胞の混入)か、セグメンテーションの誤りです。デコンボリューションのパラメータをいじる前に、細胞側の QC(面積・カウント)に戻り、膨張しすぎた細胞や、複数細胞が融合した細胞を外せていたかを確認してください。

8. 怪しい細胞に印を付ける


最後に、アノテーションで付けたラベルを、RCTD の doublet 判定で検証します。

r
# 8 µm ビンに対して RCTD doublet モードを走らせ、混入を洗い出す
#   (細胞ではなくビンに対して行うのが、メモリ的に現実的)
library(spacexr)
rctd_data <- createRctd(bin8_spe, reference_se, cell_type_col = "cell_type")
res <- runRctd(rctd_data, rctd_mode = "doublet", max_cores = 4)

# singlet の割合を見る。高いほど、1ビン=1細胞に近い
df <- res@results$results_df
mean(df$spot_class == "singlet")   # 目安として 0.7〜0.75 前後
# この割合が高いことが、そのまま「アノテーションで十分」の裏づけになる

singlet と判定された細胞は、ラベルを信頼できます。doublet と判定された細胞、とくに doublet_uncertain の細胞は、混入している可能性が高いので、慎重に扱います。特定の細胞型で doublet の割合が高いなら、その型は境界や密な領域に多く、混入を受けやすいと分かります。

9. Space Ranger v4 の自動セグメンテーションを使う場合


2025 年 6 月以降の Space Ranger v4.0 は、H&E 画像があれば核ベースの細胞セグメンテーションを自動で行い、細胞単位の出力を返します。bin2cell を自分で回さなくても、細胞×遺伝子の行列が手に入ります。

ただし、ここまで述べたことは変わりません。自動セグメンテーションで作った細胞も、partial volume 効果からは逃れられません。細胞側の QC、アノテーション、マーカーの UMAP・組織像への投影、doublet 判定による検証──この流れは、どちらの方法で細胞を作っても同じです。

💡 どちらを使うか
手軽さでは Space Ranger v4 の自動セグメンテーションです。一方 bin2cell は、解析単位の決め方で触れた destripe(2 µm ビンの縞の補正)や、総カウント画像を使った二次セグメンテーション(拾えなかった細胞の救済)を挟めます。まず Space Ranger の結果を見て、取りこぼしや過剰な膨張が気になるなら bin2cell を試す、という順序が現実的です。

10. 判断のまとめ


状況 やること
再構成した細胞に型を付けたい まずアノテーション(CellTypist / scANVI)
混入した細胞を洗い出したい 8 µm ビンに RCTD doublet モード
singlet の割合が高い(70%超) アノテーションで十分。再構成も良好
singlet の割合が低い セグメンテーションか参照を見直す
組織学的にありえない型が出た 細胞側の QC に戻る(面積・カウント)
手軽に細胞を作りたい Space Ranger v4 の自動セグメンテーション
縞や取りこぼしが気になる bin2cell(destripe・二次セグメンテーション)

まとめ


  • 再構成した細胞はきれいな単一細胞ではない。膨張の縁で隣の細胞の転写産物が混ざる(partial volume 効果)。
  • とはいえ大半は単一細胞(8 µm ビンで約 75% が singlet)。だからアノテーションが素直で、既定の第一選択になる。
  • デコンボリューションは、混入を洗い出す道具として使う。8 µm ビンに doublet モードを当て、怪しい細胞に印を付ける。
  • singlet の割合そのものが、再構成の質の指標。低ければ再構成か参照を疑う。
  • 細胞側の QC では、scRNA-seq の指標に加えて細胞の面積を見る。
  • アノテーションは必ずマーカーを UMAP と組織像の両方に投影して検証する。ありえない型が光ったら、混入か QC 失敗を疑い、細胞側の QC に戻る。
  • Space Ranger v4 の自動セグメンテーションでも、この検証の流れは同じ。

関連記事


参考文献


  • Polański, K., Bartolomé-Casado, R., Sarropoulos, I., et al. (2024). Bin2cell reconstructs cells from high resolution Visium HD data. Bioinformatics, 40(9), btae546. doi:10.1093/bioinformatics/btae546
  • Schmidt, U., Weigert, M., Broaddus, C., & Myers, G. (2018). Cell detection with star-convex polygons. In Medical Image Computing and Computer Assisted Intervention (MICCAI) 2018, 265–273. doi:10.1007/978-3-030-00934-2_30
  • 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
  • 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(6594), eabl5197. doi:10.1126/science.abl5197
  • 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
  • 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
  • Oliveira, M. F., Romero, J. P., Chung, M., et al. (2025). High-definition spatial transcriptomic profiling of immune cell populations in colorectal cancer. Nature Genetics, 57(6), 1512–1523. doi:10.1038/s41588-025-02193-3
  • Marconato, L., Palla, G., Yamauchi, K. A., et al. (2025). SpatialData: an open and universal data framework for spatial omics. Nature Methods, 22(1), 58–62. doi:10.1038/s41592-024-02212-x
  • 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
  • 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

コメント

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