シーケンス型 空間トランスクリプトーム:Curio Seeker と doublet モード ─ 準単一細胞レジームの扱い

Spatial transcriptome
📚 この記事について
Curio Seeker(Slide-seq)や Stereo-seq の bin20 のような、1フィーチャに 1〜2 細胞しか入らないデータの扱いを説明します。なぜ doublet モードなのか、スパース性にどう対処するか、返ってくる判定をどう読むかを整理します。
🔙 前の記事:シーケンス型 空間トランスクリプトーム:手法比較(CARD・RCTD・Tangram)
🔜 次の記事:シーケンス型 空間トランスクリプトーム:Visium HD のビン→細胞再構成
📌 前提デコンボリューションの原理と手法分類scRNA-seq解析:ダブレット検出の基本

空間トランスクリプトーム解析(spatial transcriptomics)のうちシーケンス型(Visium・Stereo-seq など NGS で読み出す方式)は、プラットフォームによって、1フィーチャに入る細胞の数が大きく違います。Curio Seeker(Slide-seq 由来)の 10 µm ビーズや、Stereo-seq の bin20 では、1フィーチャに 1〜2 個の細胞しか入りません。これは Visium の 55 µm スポット(1〜10 細胞)とも、Visium HD の 2 µm ビン(1 細胞が複数ビンに割れる)とも違う、第3のレジームです。扱い方も変わります。

1. Curio Seeker とは


Curio Seeker は、Slide-seq(Rodriques et al., Science, 2019)を製品化したものです。Broad Institute と Harvard で開発され、Curio Bioscience が販売しています。

項目 内容
1フィーチャ 直径 10 µm のビーズ
捕捉 poly-A(新鮮凍結が前提)
遺伝子 全転写産物
タイル 3 × 3 mm または 10 × 10 mm
読み出し NGS(顕微鏡は不要)
バーコード座標 製造時に決定され、データファイルとして提供される

ビーズはタイル上にランダムに敷き詰められています。Visium HD のような規則的な格子ではありません。「10 µm 解像度で実質的に単一細胞」と説明されますが、この「実質的に単一細胞」という言葉には注意が要ります。

2. なぜ Visium とは問題が違うのか


10 µm というビーズの大きさは、哺乳類の細胞(10〜30 µm)とほぼ同じか、少し小さいくらいです。だから1つのビーズには、1個、多くて2個の細胞のRNAしか乗りません。

図:ビーズの格子は、細胞の境界と一致しない
図:ビーズの格子は、細胞の境界と一致しない

ここが Visium との決定的な違いです。Visium の 55 µm スポットには 1〜10 個の細胞が混ざるので、「T細胞 0.4、腫瘍 0.3、…」という割合に分解するのが仕事でした。Curio Seeker のビーズは 1〜2 細胞なので、「このビーズは T細胞、あるいは T細胞 と マクロファージ」と振り分けるのが仕事になります。

💡 これは、scRNA-seq のダブレット問題に似ている
1つの観測に、最大2つの細胞が混ざっている。これは scRNA-seq のダブレットと同じ構図です。ただし目的が逆です。scRNA-seq ではダブレットを見つけて捨てるのに対し、空間データではビーズを捨てられません(その場所の情報が失われる)。だから、2つの細胞型を両方とも同定することを目指します。

この「最大2細胞型」という構造を、そのままモデルにするのが RCTD の doublet モードです。

3. もう1つの壁 ─ スパース性


ビーズが小さいということは、捕まえられる転写産物も少ないということです。1ビーズあたりのカウントは、Visium のスポットより桁違いに少なくなります

図:1ビーズあたりのカウントは、極端に少ない
図:1ビーズあたりのカウントは、極端に少ない
python
import spatialdata_io as sdio
import scanpy as sc
import numpy as np

# Curio Seeker の出力を読む
sdata = sdio.curio("data/curio_run")
adata = sdata["table"]

# まず、1ビーズあたりのカウントの薄さを直視する
sc.pp.calculate_qc_metrics(adata, inplace=True, log1p=False)
print(np.percentile(adata.obs["total_counts"], [10, 25, 50, 75, 90]))
# 中央値が数百のオーダーなら、Visium の感覚は通用しない

カウントが薄いと、多くの遺伝子が「0 回」になります。その細胞型のマーカーが検出されなければ、細胞型を決めようがありません。そもそも判定できるだけの情報がないビーズが、一定の割合で出てきます。

⚠️ Visium の QC 感覚を、そのまま持ち込まない
Visium なら「総カウント 500 未満は壊れた細胞」と考えられました。Curio Seeker では、中央値そのものが数百のオーダーです。ここで Visium の閾値を当てると、ほとんどのビーズが消えます。閾値は、このプラットフォームのカウント分布を見てから決めてください(QC の記事の原則は同じで、分布を見てから閾値を決める)。

4. スパース性への対処 ─ 近傍をまとめる


カウントが足りないビーズが多いときの、現実的な対処は2つです。

  • 近傍のビーズをまとめる:物理的に近いビーズのカウントを足し合わせて、擬似的な「メタビーズ」を作る。解像度は落ちるが、細胞型を決められるだけの情報が得られる。
  • reject されたビーズは、無理に解釈しない:後述の doublet モードが「判定できない」と返したビーズは、除外する。
python
import squidpy as sq

# カウントが薄すぎるときは、近傍のビーズをまとめて底上げする
# ビーズはランダムに並ぶので、格子ではなく generic な近傍を使う
sq.gr.spatial_neighbors(adata, coord_type="generic", n_neighs=6)

# 近傍のビーズのカウントを足し合わせて、擬似的なメタビーズを作る
# (解像度は落ちるが、細胞型を決められるだけの情報が得られる)
W = adata.obsp["spatial_connectivities"]
pooled = W @ adata.layers["counts"] + adata.layers["counts"]

# 何倍まとめれば十分なカウントになるか、まず分布を見てから決める
print("元の中央値:", int(np.median(adata.obs["total_counts"])))
print("まとめた後:", int(np.median(np.asarray(pooled.sum(axis=1)))))
⚠️ まとめることは、レジームを1つ左に動かす
近傍のビーズをまとめると、1つのメタビーズに複数の細胞が入るようになります。つまり、準単一細胞レジームから、マルチセルレジームへ移動するということです。十分にまとめれば、今度は デコンボリューション(full モードや cell2location)のほうが適切になります。「どこまでまとめるか」は、細胞型を決められるカウント保ちたい解像度のトレードオフで決めます。

5. RCTD doublet モードを走らせる


doublet モードは、手法比較で触れたとおり、1フィーチャあたり最大2つの細胞型に制約します。この制約が、まさに準単一細胞レジームに合っています。RCTD の原論文でも、Slide-seq では3種類以上の細胞型が混ざるケースが稀だったため、2つへの制約が過適合を抑えると述べられています(Cable et al., Nature Biotechnology, 2022)。

r
library(spacexr)
library(SpatialExperiment)

# 準単一細胞レジームなので、doublet モードを使う
#   1ビーズに最大2細胞型まで、という制約が効く
rctd_data <- createRctd(bead_spe, reference_se, cell_type_col = "cell_type")
res <- runRctd(rctd_data, rctd_mode = "doublet", max_cores = 4)

# 各ビーズの判定を取り出す
df <- res@results$results_df
table(df$spot_class)
#   singlet  doublet_certain  doublet_uncertain  reject

# reject の割合を確認する。多ければ、そもそも解けていない
mean(df$spot_class == "reject")

6. 出力を読む ─ 4つの判定


doublet モードは、各ビーズに spot_class という判定を付けます。これが4種類あり、それぞれ扱いが違います。

図:doublet モードの出力 ─ 4つの判定
図:doublet モードの出力 ─ 4つの判定
spot_class 意味 使えるもの 扱い
singlet 1つの細胞型 first_type 信頼できる。そのまま使う
doublet_certain 2つの細胞型(両方とも確信) first_type + second_type 両方とも信頼できる
doublet_uncertain 2つの細胞型(片方だけ確信) first_type のみ second_type は疑ってかかる
reject 判定できない なし 情報不足。除外する
python
import pandas as pd

# R の結果を Python 側に持ってきたとする(df に spot_class / first_type / second_type)
# 判定ごとに、扱いを変える

# singlet と doublet_certain は、そのまま信頼してよい
trust = df[df["spot_class"].isin(["singlet", "doublet_certain"])]

# doublet_uncertain は、first_type だけ使う(second_type は捨てる)
uncertain = df[df["spot_class"] == "doublet_uncertain"]
# uncertain の second_type を参照した解析はしない

# reject は解析から外す
df_use = df[df["spot_class"] != "reject"].copy()

# 各ビーズを first_type で塗って、組織の上に描く
adata.obs["cell_type"] = df_use["first_type"]
sq.pl.spatial_scatter(adata, color="cell_type", shape=None)
⚠️ reject の割合を、必ず確認する
reject や doublet_uncertain が多いのは、危険信号です。考えられる原因は2つ。(1) カウントが足りない(近傍をまとめる、または解析単位を粗くする)。(2) 参照が組織に合っていない(参照に無い細胞型が多い、または参照の細胞型どうしが区別できていない)。半分以上が reject や uncertain なら、doublet モードが適していない兆候です。近傍をまとめてマルチセルレジームに移し、full モードや cell2location を試してください。

7. 返るのは「割合」ではなく「ラベル」─ 下流への影響


ここは見落とされがちですが、重要です。doublet モードが返すのは、フィーチャごとの細胞型のラベル(最大2つ)であって、cell2location が返すような連続的な割合や細胞数ではありません

この違いは、下流解析に響きます。

下流解析 割合ベース(Visium) ラベルベース(Curio doublet)
組成の比較 割合ベクトルをそのまま比べる 細胞型ごとのビーズ数を数える
近傍解析 割合の空間相関を見る 細胞型ラベルの近傍濃縮を見る(scRNA-seq に近い)
細胞間コミュニケーション 割合で重みづけ 隣り合うビーズの細胞型ペアを数える
💡 ラベルベースは、むしろ scRNA-seq に近い
1ビーズに1つ(または2つ)の細胞型ラベルが付くというのは、解離した細胞に細胞型を付けた scRNA-seq の状態に近い。しかも座標が付いている。つまり、Curio Seeker のデータは「位置情報つきの単一細胞データ」として扱える面があります。近傍解析やニッチ解析では、Visium のような割合ベースの手法より、細胞型ラベルを使う scRNA-seq 寄りのアプローチが素直です。

8. Stereo-seq の bin20 も同じレジーム


Stereo-seq(Chen et al., Cell, 2022)の bin20(10 µm × 10 µm)も、サイズ的には哺乳類の細胞とほぼ同じで、準単一細胞レジームに入ります。扱いは Curio Seeker と同じ考え方で進められます。

  • 1 bin に 1〜2 細胞なら、doublet モードが候補。
  • カウントが薄ければ、bin を大きくする(bin50、bin100)か、近傍をまとめる。
  • 核染色画像があって条件を満たすなら、cellbinに進んで、はっきり1細胞にする道もある。

Stereo-seq には bin1〜bin200 という連続した選択肢があるので、「どの bin サイズがどのレジームに当たるか」を、解析単位の決め方で決めてから、この記事の判断に入ってください。

9. 判断のまとめ


状況 やること
1ビーズ 1〜2 細胞、カウントが十分 RCTD doublet モード
カウントが薄く、reject が多い 近傍をまとめる → マルチセルレジームへ
まとめた結果、多数の細胞が混ざる full モード または cell2location
核染色画像があり条件を満たす(Stereo-seq) cellbin で 1 細胞にする
下流で近傍・ニッチを見る 割合ベースではなく、細胞型ラベルベースで

まとめ


  • Curio Seeker(Slide-seq)の 10 µm ビーズ、Stereo-seq の bin20 は、1フィーチャ 1〜2 細胞の準単一細胞レジーム。
  • Visium の割合への分解ではなく、最大2細胞型への振り分けが仕事。だから RCTD の doublet モードを使う。
  • スパース性が最大の壁。1ビーズあたりのカウントは Visium より桁違いに少ない。Visium の QC 閾値をそのまま当てない。
  • カウントが薄ければ近傍をまとめる。ただし、それはマルチセルレジームへの移動でもある。
  • doublet モードの出力は singlet / doublet_certain / doublet_uncertain / reject。uncertain の second_type は捨て、reject は除外する。
  • reject の割合を必ず確認。半分以上なら doublet モードが適していない。
  • 返るのは割合ではなく細胞型ラベル。下流は scRNA-seq 寄りのラベルベースで組み立てる。

関連記事


参考文献


  • Rodriques, S. G., Stickels, R. R., Goeva, A., et al. (2019). Slide-seq: A scalable technology for measuring genome-wide expression at high spatial resolution. Science, 363(6434), 1463–1467. doi:10.1126/science.aaw1219
  • Stickels, R. R., Murray, E., Kumar, P., et al. (2021). Highly sensitive spatial transcriptomics at near-cellular resolution with Slide-seqV2. Nature Biotechnology, 39(3), 313–319. doi:10.1038/s41587-020-0739-1
  • 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
  • Marshall, J. L., Noel, T., Wang, Q. S., et al. (2022). High-resolution Slide-seqV2 spatial transcriptomics enables discovery of disease-specific cell neighborhoods and pathways. iScience, 25(4), 104097. doi:10.1016/j.isci.2022.104097
  • 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
  • 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をコピーしました