シーケンス型 空間トランスクリプトーム:空間 CNV と腫瘍微小環境

Spatial transcriptome
📚 この記事について
コピー数の変化を空間データから推定し、腫瘍とその周囲の関係を読む工程を扱います。混合が推定に何をもたらすのか、正常の基準をどう取るのか、そしてクローンの空間分布から何が言えるのかを整理します。
🔙 前の記事:シーケンス型 空間トランスクリプトーム:パスウェイ・転写因子活性
🔜 次の記事:シーケンス型 空間トランスクリプトーム:複数スライスの統合
📌 前提scRNA-seq解析:コピー数異常(CNV)の推定cell2location 実践

空間トランスクリプトーム解析(spatial transcriptomics)のうちシーケンス型(Visium・Stereo-seq など NGS で読み出す方式)は、コピー数の変化を、scRNA-seq と同じ考え方で推定できます。染色体上で並べた遺伝子の発現を移動平均し、正常の基準と比べる、という手順です。ただし1フィーチャが混合であることが、推定の感度を直接下げます

1. 混合が、コピー数の信号を薄める


図:腫瘍と正常が混ざると、コピー数の信号が薄まる
図:腫瘍と正常が混ざると、コピー数の信号が薄まる

腫瘍細胞だけのフィーチャなら、増幅や欠失ははっきり見えます。しかし腫瘍が 3 割、正常が 7 割のフィーチャでは、同じ変化が 3 割に薄まります

💡 デコンボリューションの結果が、そのまま前処理になる
腫瘍細胞の割合が高いフィーチャに絞ってから推定すれば、感度が上がります。cell2location 実践やデコンボリューションの原理で得た割合が、ここでそのまま使えます。割合を共変量として明示的にモデルに入れる方法もあります。閾値は、残るフィーチャ数を見てから決めてください。厳しくすれば感度は上がりますが、解析対象が狭くなります。
python
import numpy as np

# 腫瘍細胞の割合が高いフィーチャに絞る
P = adata.obsm["cell_type_proportions"]
adata.obs["tumor_frac"] = P["腫瘍細胞"].values

# 割合ごとに、どれだけ残るかを確かめてから閾値を決める
for thr in [0.3, 0.5, 0.7]:
    n = int((adata.obs["tumor_frac"] >= thr).sum())
    print(thr, "->", n, "フィーチャ")

# 高い割合のフィーチャだけを、コピー数の推定に使う
tumor = adata[adata.obs["tumor_frac"] >= 0.5].copy()

# 正常の基準は、免疫細胞の割合が高いフィーチャから選ぶ
adata.obs["immune_frac"] = P[["T細胞", "B細胞", "マクロファージ"]].sum(axis=1).values
ref = adata[adata.obs["immune_frac"] >= 0.6].copy()
print("腫瘍側:", tumor.n_obs, "/ 参照側:", ref.n_obs)

2. 何を「正常」の基準にするか


図:何を「正常」の基準にするか
図:何を「正常」の基準にするか
基準の取り方 利点 注意点
同じ切片の正常領域 同じ実験条件。最も素直 腫瘍の混入がありうる
別の正常検体 混入の心配がない 実験条件の差が入る
参照を使わない(全体の平均) 手軽 腫瘍が多数派だと基準が歪む
⚠️ 基準の取り方が、推定そのものを決める
基準に腫瘍細胞が混ざっていれば、その腫瘍が持つコピー数の変化は見えなくなります。全フィーチャの平均を基準にする方法は手軽ですが、腫瘍が組織の多数を占める検体では、基準そのものが腫瘍寄りになります。免疫細胞の割合が高いフィーチャを参照に選ぶのが、実務的です。デコンボリューションの結果から、そのまま選べます。

3. クローンの空間分布を読む


推定したコピー数のプロファイルでクラスタリングすると、クローンが分かれます。そして空間データなら、そのクローンがどこにいるかまで分かります。

python
import scanpy as sc
import squidpy as sq

# コピー数のプロファイルでクラスタリングすると、クローンが分かれる
#   cnv_mat は「フィーチャ × 染色体区間」の推定コピー数とする
cl = sc.AnnData(cnv_mat)
cl.obs_names = tumor.obs_names
sc.pp.pca(cl, n_comps=20)
sc.pp.neighbors(cl)
sc.tl.leiden(cl, resolution=0.5, key_added="clone", flavor="igraph")

# クローンを組織の上に描く。空間的にまとまっているかを見る
adata.obs["clone"] = cl.obs["clone"].reindex(adata.obs_names)
sq.pl.spatial_scatter(adata, color="clone")
# まとまっているなら、その場で増えた可能性がある
# 散らばっているなら、推定のノイズを疑う
💡 空間的にまとまっているかが、検証になる
クローンが組織の中でまとまった領域を作っているなら、それはその場で増えた集団である可能性が高い。逆に組織全体に散らばっているなら、推定のノイズがクラスタを作っただけかもしれません。空間的なまとまりは、コピー数推定が意味のある信号を捉えている証拠になります。これは scRNA-seq ではできない検証です。

4. 腫瘍と免疫細胞の位置関係


図:腫瘍と免疫細胞の位置関係を読む
図:腫瘍と免疫細胞の位置関係を読む

腫瘍の縁からの距離を軸にすると、免疫細胞の分布を連続的な変化として読めます。

python
import scipy.spatial as sps

# 腫瘍の縁からの距離を計算する
is_tumor = adata.obs["tumor_frac"] >= 0.5
xy = adata.obsm["spatial"]
tree = sps.cKDTree(xy[is_tumor])
d, _ = tree.query(xy)
adata.obs["dist_tumor"] = np.where(is_tumor, 0, d)

# 距離ごとに、免疫細胞の割合を並べる
bins = np.digitize(adata.obs["dist_tumor"], [0, 100, 250, 500, 1000])
print(adata.obs.groupby(bins)["immune_frac"].mean().round(3))

# 腫瘍の中で高いなら浸潤、外にだけ多いなら排除されている

# クローンごとに、まわりの免疫細胞を比べる
near = adata.obs["dist_tumor"] < 200
print(adata.obs[near].groupby("clone")["immune_frac"].mean().round(3))
観察 解釈
腫瘍の中でも免疫細胞の割合が高い 浸潤している
腫瘍の外にだけ多く、中では低い 排除されている
縁に集まり、中には入らない 境界で止められている
クローンごとに周囲の免疫細胞が違う クローンによって免疫の反応が違う
💡 クローンごとに、まわりを比べる
コピー数でクローンを分けたあと、クローンごとに、まわりの免疫細胞の割合を比べてください。同じ腫瘍の中でも、クローンによって免疫の反応が違うことがあります。これは「どの遺伝的変化が、免疫の排除と結びついているか」という問いにつながります。空間情報とコピー数を組み合わせて初めて立てられる問いです。
⚠️ 割合の制約を、ここでも忘れない
免疫細胞の割合が腫瘍領域で低いのは、腫瘍細胞の割合が高いからかもしれません。割合は合計が 1 になるので、この関係は定義から生じます。「排除されている」と結論する前に、絶対量(推定された細胞数)でも同じ傾向が出るかを確かめてください。ニッチ・近傍解析で扱った、組成データの注意点がそのまま当てはまります。

5. チェックリスト


  • 腫瘍細胞の割合でフィーチャを絞ったか
  • 閾値ごとに、残るフィーチャ数を確かめてから決めたか
  • 正常の基準を、免疫細胞の割合が高いフィーチャから選んだか
  • 基準に腫瘍が混ざっていないかを確認したか
  • クローンが空間的にまとまっているかを見たか
  • 腫瘍の縁からの距離を軸に、免疫細胞の分布を読んだか
  • 絶対量でも同じ傾向が出るかを確かめたか
  • クローンごとに、まわりの免疫細胞を比べたか

まとめ


  • 混合が、コピー数の信号を直接薄める。腫瘍の割合に比例して弱まる。
  • デコンボリューションの結果が、そのまま前処理になる。腫瘍細胞の割合が高いフィーチャに絞る。
  • 基準の取り方が、推定そのものを決める。基準に腫瘍が混ざれば、その変化は見えなくなる。
  • 免疫細胞の割合が高いフィーチャを参照に選ぶのが実務的。
  • クローンが空間的にまとまっているかが、推定の検証になる。これは scRNA-seq ではできない。
  • 腫瘍の縁からの距離を軸にすると、浸潤か排除かを連続的な変化として読める。
  • クローンごとにまわりを比べると、遺伝的変化と免疫の反応の結びつきを問える。
  • 割合の合計 1 の制約を忘れない。絶対量でも確かめる。

関連記事


参考文献


  • 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
  • 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
  • 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
  • Schürch, C. M., Bhate, S. S., Barlow, G. L., et al. (2020). Coordinated cellular neighborhoods orchestrate antitumoral immunity at the colorectal cancer invasive front. Cell, 182(5), 1341–1359.e19. doi:10.1016/j.cell.2020.07.005
  • Singhal, V., Chou, N., Lee, J., et al. (2024). BANKSY unifies cell typing and tissue domain segmentation for scalable spatial omics data analysis. Nature Genetics, 56(3), 431–441. doi:10.1038/s41588-024-01664-3
  • Bhuva, D. D., Tan, C. W., Salim, A., et al. (2024). Library size confounds biology in spatial transcriptomics data. Genome Biology, 25, 99. doi:10.1186/s13059-024-03241-7
  • 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
  • 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
  • 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をコピーしました