シーケンス型 空間トランスクリプトーム:Stereo-seq の bin と cellbin ─ どの単位で細胞型を決めるか

Spatial transcriptome
📚 この記事について
Stereo-seq のデータを、どの解析単位で扱い、どうやって細胞型を割り当てるかを説明します。bin の階層がレジームにどう対応するのか、cellbin はどう作られるのか、そして画像の品質がなぜ上限を決めるのかを整理します。
🔙 前の記事:シーケンス型 空間トランスクリプトーム:Visium HD のビン→細胞再構成
🔜 次の記事:シーケンス型 空間トランスクリプトーム:segmentation-free 解析
📌 前提解析単位の決め方scRNA-seq解析:細胞型アノテーション手法の全体像

空間トランスクリプトーム解析(spatial transcriptomics)のうちシーケンス型(Visium・Stereo-seq など NGS で読み出す方式)は、プラットフォームごとに解析単位の自由度が違います。その中で Stereo-seq(Chen et al., Cell, 2022)は特殊で、bin1 から bin200 まで連続して単位を選べるうえ、細胞単位(cellbin)にもできます。選択肢が多いということは、判断を自分でしなければならないということです。この記事では、その判断の基準と、cellbin がどう作られるのかを見ていきます。

1. Stereo-seq が他と違うところ


項目 内容
1スポット 直径 220 nm・中心間 500 nm の DNA ナノボール
捕捉 poly-A(プローブに縛られない)
遺伝子 全転写産物
捕捉面積 1 × 1 cm、1 × 2 cm など。切片まるごとが載る
解析単位 bin1〜bin200 の連続した選択肢、または cellbin
画像 ssDNA または DAPI の核染色(cellbin に必須)

捕捉面積の大きさは実際に効きます。マウス胚のような組織を一枚で、しかもサブセル解像度のまま扱えるのは、この技術の大きな利点です。その代わり、データ量も桁違いに大きくなります

2. bin の階層と、レジームの対応


図:bin の大きさは連続して選べる ─ どれがどのレジームか
図:bin の大きさは連続して選べる ─ どれがどのレジームか
単位 一辺 レジーム 細胞型を決める方法
bin1〜bin10 0.5〜5 µm サブセル(1細胞が複数のビンに割れる) 集約、または segmentation-free
bin20 10 µm 準単一細胞(哺乳類の細胞とほぼ同じ) ダブレット分離(RCTD の doublet モード)
bin50 ・ bin100 25 ・ 50 µm マルチセル デコンボリューション
bin200 100 µm 出力をひとまず眺めるための単位
cellbin 細胞ごと 単一細胞(+混入) 参照ベースのアノテーション
💡 bin50 と bin100 も、実際によく使われる
「解像度は高いほど良い」と考えると bin20 や cellbin を選びたくなりますが、実務では bin50 や bin100 が使われる場面が多くあります。カウントが安定し、クラスタリングが素直に効くからです。SAW の HTML レポートも、bin20 と bin50 の両方のクラスタリングと UMAP を表示します。まず bin50 で全体像をつかんでから、細かい単位に降りるのが現実的な進め方です。

3. cellbin へ進めるかの判断


STOmics が示している目安は明確です。bin20 あたりの遺伝子数の中央値が 200 を超え、かつ核染色画像の品質が良いとき、細胞単位(cellbin)での解析が勧められます。遺伝子の捕捉が不十分なら、bin50 や bin100 といった大きな単位を使います。

python
import numpy as np
import scanpy as sc

# bin20 の遺伝子数中央値が、cellbin へ進めるかの目安になる
ad20 = sc.read_h5ad("stereo_bin20.h5ad")
sc.pp.calculate_qc_metrics(ad20, inplace=True, log1p=False)
med = np.median(ad20.obs["n_genes_by_counts"])
print("bin20 の遺伝子数中央値:", int(med))

# 判断は2条件の AND。片方でも欠けたら、細胞単位には進まない
if med > 200 and image_is_good:
    print("cellbin へ進める")
else:
    print("bin50 または bin100 に下げる")
⚠️ 2つの条件は AND であって OR ではない
カウントが十分でも、核が写っていなければ細胞にはできません。逆に画像がきれいでも、1細胞あたりのカウントが薄ければ、細胞単位にした瞬間に発現プロファイルがノイズだらけになります。どちらか一方でも欠けたら、bin を粗くするのが正しい判断です。

4. cellbin はどう作られるのか


cellbin は、SAW に組み込まれた CellBin パイプラインが作ります(Li et al., bioRxiv, 2023)。5つの段階を経ます。

図:cellbin ができるまで ─ 画像処理の5段階
図:cellbin ができるまで ─ 画像処理の5段階
⚠️ トラックラインが見えないと、そこで止まる
Stereo-seq のチップには、幅 1.5 µm の細い無プローブ帯が縦横に周期的に刻まれています。これがトラックラインです。画像と発現マップを重ねる(レジストレーション)ときの手がかりになります。この線が画像にはっきり写っていないと、自動での重ね合わせが失敗し、その先の工程がすべて成り立ちません。画像 QC はこのために存在する工程であり、StereoMap のツールで確認します。顕微鏡の設定を含めて、実験の段階で決まってしまう部分です。

核の検出には U-Net による深層学習モデルが使われます。このモデルはマウスの各臓器(脳・腎・肺・心など)、ヒト組織(胚・血管・リンパ節・膵がん・肝がんなど)、さらにラット脳、ゼブラフィッシュ心臓、マカク脳、ブタ子宮といった幅広い検体で検証されています。学習データに近い形態の組織では、結果はおおむね良好です。

💡 分子の割り当ては、単純な膨張だけではない
核の輪郭が決まったあと、その周りの分子をどの細胞に渡すかを決める必要があります。SAW の標準は、核から一定距離だけ膨張させて細胞の範囲とする方法です。CellBin の論文はこれに加えて MLCG という手法を提示しています。核マスクの中の分子に混合ガウスモデルをあてはめ、周囲の分子を最も確からしい細胞に確率的に割り当てるものです。一定距離で機械的に切るより、単一細胞プロファイルの S/N が上がると報告されています。

5. 結果が不自然なとき ─ 別のセグメンテーションを試す


組織の形態が学習データと大きく違う場合、内蔵モデルの結果が期待どおりにならないことがあります。STOmics 自身も、そのときは他の手法を試すことを勧めています。

図:画像とカウントの質が、進める道を決める
図:画像とカウントの質が、進める道を決める

STOmics の研究チームは CellBinDB というベンチマークデータセットを作り、8つのセグメンテーション手法を DAPI・ssDNA・H&E・mIF の4つの染色条件で比較しています。重要なのは、染色の種類によって最適な手法が変わるという結果です。「この手法が常に最良」という答えはありません。

状況 試すもの
内蔵モデルの結果が不自然 Cellpose(Stringer et al., 2021)、StarDist(Schmidt et al., 2018)など
手動で直したい StereoMap の画像処理モジュールで登録・分割をやり直す
外部ツールの結果を使いたい StereoMap に読み込ませて SAW を再実行する
画像の品質が悪い / 染色がない bin を粗くする、または segmentation-free
💡 画像が使えないときの第3の道
核染色の画像が無い、あるいは品質が悪いとき、STOmics は FICTURE(Si et al., Nature Methods, 2024)と Sainsc を挙げています。どちらも細胞の境界を決めずに、分子の空間分布から直接、組織の構造を取り出す手法です。bin1(0.5 µm)というネイティブ解像度のまま働けます。マウス脳での比較では、教師なしクラスタリングの性能で cellbin や bin20 を上回ったと報告されています。詳しくは segmentation-free 解析で扱います。

6. データ形式 ─ GEF と GEM


SAW の出力は GEF という独自のバイナリ形式です。そのままでは Scanpy に渡せないので、変換します。

形式 中身 使いどころ
GEF 階層構造を持つバイナリ Stereopy が直接読める。容量が小さい
GEM テキスト 中身を目で見る。pandas で処理する
cellbin GEM GEM + cellID 列 どの分子がどの細胞に属するかが分かる
h5ad AnnData Scanpy・Squidpy に渡す
bash
# SAW の出力は GEF(バイナリ)。Scanpy に渡すには h5ad に変換する
saw convert gef2h5ad --gef cellbin.gef --h5ad cellbin.h5ad

# テキストで中身を見たいときは GEM に変換する
saw convert gef2gem --gef cellbin.gef --gem cellbin.gem

# cellbin の GEM には cellID の列が増えている
head -n 5 cellbin.gem
# geneID  x  y  MIDCount  cellID
python
import scanpy as sc
import squidpy as sq

# 変換した h5ad を読む。ここから先は通常の単一細胞解析と同じ土台
cdata = sc.read_h5ad("cellbin.h5ad")
print(cdata.shape)                  # (細胞数, 遺伝子数)
print(cdata.obsm["spatial"].shape)   # 各細胞の重心座標

# 生カウントは必ず残す
cdata.layers["counts"] = cdata.X.copy()

h5ad にしてしまえば、あとは AnnData として扱えます。scRNA-seq の手順がそのまま使えます。

7. cellbin の QC ─ 面積を見る


cellbin に対する QC は、scRNA-seq の QCに近づきます。ただし、細胞の面積という指標が加わります。

python
# cellbin 特有の QC 指標:細胞の面積
sc.pp.calculate_qc_metrics(cdata, inplace=True, log1p=False)

# 1. 面積が極端に大きい細胞は、複数細胞が融合している
hi = np.quantile(cdata.obs["area"], 0.99)
cdata = cdata[cdata.obs["area"] <= hi].copy()

# 2. 分子数が極端に少ない細胞は、核だけ拾って周りを取れていない
cdata = cdata[cdata.obs["total_counts"] >= 50].copy()

# 3. 細胞数を bin20 のビン数と比べる
print("cellbin 細胞数:", cdata.n_obs, "/ bin20 ビン数:", ad20.n_obs)
#    細胞数がビン数を大きく超えるなら、核を過剰に検出している
確認すること おかしい場合
細胞の面積 極端に大きいなら、複数の細胞が融合している
細胞あたりの分子数 極端に少ないなら、核だけ拾って周りを取れていない
細胞の数 bin20 のビン数を大きく超えるなら、核を過剰に検出している
クラスタと組織像 対応しないなら、セグメンテーションかレジストレーションの失敗

8. 細胞型を割り当てる


どの単位を選んだかで、方法が決まります。ここまでの記事で扱った内容が、そのまま当てはまります。

単位 方法 参照記事
bin50 ・ bin100 デコンボリューション(cell2location、RCTD の full モード) デコンボリューションの原理
bin20 ダブレット分離(RCTD の doublet モード) 1スポットに細胞が1〜2個のとき
cellbin 参照ベースのアノテーション 細胞型アノテーションの全体像
bin1〜bin10 segmentation-free segmentation-free 解析
⚠️ cellbin でも、混入は残る
核を膨張させて細胞を作る以上、隣の細胞の分子が混ざり込むことは避けられません。MLCG のような確率的な割り当てを使っても、境界の曖昧さが消えるわけではありません。「cellbin にしたから scRNA-seq と同じ」とは考えないでください。組織学的にありえない場所に細胞型が出たら、混入かセグメンテーションの誤りを疑い、細胞側の QC に戻ります。

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


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

python
# 通常のクラスタリング
sc.pp.normalize_total(cdata, target_sum=1e4)
sc.pp.log1p(cdata)
sc.pp.highly_variable_genes(cdata, n_top_genes=2000)
sc.pp.pca(cdata, n_comps=30)
sc.pp.neighbors(cdata)
sc.tl.umap(cdata)
sc.tl.leiden(cdata, resolution=1.0)

# 検証:マーカーを UMAP に投影する
markers = ["Snap25", "Gfap", "Mbp", "Cx3cr1", "Pdgfra"]
sc.pl.umap(cdata, color=markers + ["leiden"], ncols=3)

# 検証:同じマーカーを、組織の上にも投影する
sq.pl.spatial_scatter(cdata, color=markers, shape=None, ncols=3)

UMAP への投影で分かることは3つです。

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

空間データでは、これに加えて組織の上への投影も行います。同じマーカーが、組織像で「あるべき場所」に出ているかを見ます。

⚠️ 組織学的にありえない場所にマーカーが光ったら
たとえば、白質にしかないはずの型が灰白質のクラスタで光る。こういうときは、QC の失敗か、隣の細胞の混入(ダブレット)を疑ってください。cellbin では、核の膨張しすぎや、密に詰まった領域での取り違えが典型的な原因です。アノテーションのパラメータを触る前に、細胞側の QC(面積・分子数)とセグメンテーションの結果に戻って確認します。

10. 判断のまとめ


状況 選ぶ単位 次にやること
まず全体像を見たい bin50 クラスタリングして組織像と照合
bin20 の遺伝子数中央値 > 200 + 画像良好 cellbin アノテーション
カウントは十分だが画像が悪い bin50 / bin100 デコンボリューション
画像は良いが cellbin の結果が不自然 cellbin(別ツール) Cellpose・StarDist を試す
画像が使えず、粗い bin にも落としたくない bin1〜bin10 segmentation-free
準単一細胞の粒度で見たい bin20 RCTD の doublet モード

まとめ


  • Stereo-seq は bin1〜bin200 と cellbin から単位を選べる。選択肢が多いぶん、判断は自分でする。
  • bin20(10 µm)は準単一細胞、bin50・bin100 はマルチセル、bin1〜bin10 はサブセル。bin を変えると、解くべき問題そのものが変わる。
  • cellbin へ進む条件は bin20 の遺伝子数中央値 200 超 + 画像品質 の AND。片方でも欠けたら bin を粗くする。
  • cellbin は5段階で作られる。最初の画像 QC(トラックライン)で止まる失敗が多い。チップの 1.5 µm 無プローブ帯が写っていないと、重ね合わせができない。
  • 核の検出は U-Net。分子の割り当ては、一定距離の膨張か、MLCG(混合ガウスモデルによる確率的な割り当て)。
  • 染色の種類によって最適なセグメンテーション手法は変わる。内蔵モデルの結果が不自然なら、Cellpose や StarDist を試す。
  • 画像が使えないときは FICTURE や Sainsc という第3の道がある。
  • cellbin でも混入は残る。マーカーを UMAP と組織像の両方に投影して必ず検証する。

関連記事


参考文献


  • Chen, A., Liao, S., Cheng, M., et al. (2022). Spatiotemporal transcriptomic atlas of mouse organogenesis using DNA nanoball-patterned arrays. Cell, 185(10), 1777–1792. doi:10.1016/j.cell.2022.04.003
  • Li, M., Liu, H., Li, Y., et al. (2023). CellBin: a highly accurate single-cell gene expression processing pipeline for high-resolution spatial transcriptomics. bioRxiv(プレプリント). doi:10.1101/2023.02.28.530414
  • Si, Y., Lee, C., Hwang, Y., et al. (2024). FICTURE: scalable segmentation-free analysis of submicron-resolution spatial transcriptomics. Nature Methods, 21(10), 1843–1854. doi:10.1038/s41592-024-02415-2
  • Stringer, C., Wang, T., Michaelos, M., & Pachitariu, M. (2021). Cellpose: a generalist algorithm for cellular segmentation. Nature Methods, 18(1), 100–106. doi:10.1038/s41592-020-01018-x
  • 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
  • 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
  • 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
  • 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
  • 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

コメント

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