空間トランスクリプトーム解析(spatial transcriptomics)のうちシーケンス型(Visium・Stereo-seq など NGS で読み出す方式)は、パスウェイや転写因子の活性を、scRNA-seq と同じ道具で推定できます。行列の形が同じだからです。ただし、行が細胞ではなく場所であることが、推定される活性の意味を変えます。
1. フィーチャ単位の活性は、混合の平均

1つのフィーチャの発現は、そこにいる細胞たちの足し合わせです。そこから推定される活性も、混ざった細胞の平均になります。
⚠️ 「高い細胞がいた」のか「全体が中くらいだった」のか、区別できない
活性が中間的な値になったとき、2つの可能性があります。活性の非常に高い細胞が少数いたのか、全体がほどほどに活性化していたのか。フィーチャ単位の計算では、この区別がつきません。とくに、希少な細胞型の活性は、まわりの多数派に埋もれます。
活性が中間的な値になったとき、2つの可能性があります。活性の非常に高い細胞が少数いたのか、全体がほどほどに活性化していたのか。フィーチャ単位の計算では、この区別がつきません。とくに、希少な細胞型の活性は、まわりの多数派に埋もれます。
python
import decoupler as dc
import scanpy as sc
# 転写因子の制御対象(レギュロン)を取ってくる
net = dc.get_collectri(organism="human", split_complexes=False)
# 各フィーチャで、転写因子の活性を推定する
dc.run_ulm(mat=adata, net=net,
source="source", target="target", weight="weight", use_raw=False)
# 活性は obsm に入る。obs に移すと、そのまま空間プロットできる
acts = dc.get_acts(adata, obsm_key="ulm_estimate")
print(acts.shape) # (フィーチャ数, 転写因子の数)
decoupleR(Badia-i-Mompel et al., Bioinformatics Advances, 2022)は、事前知識のリソースと推定手法を統一的な枠組みで扱えるパッケージです。転写因子の活性なら CollecTRI(Müller-Dott et al., Nucleic Acids Research, 2023)のようなレギュロンのリソースと組み合わせます。
2. 何を単位に計算するか

| 単位 | 得られるもの | 限界 |
|---|---|---|
| フィーチャ単位 | 活性の空間分布が地図になる | 混合の平均になる |
| ドメイン単位 | 統計が安定する | 領域内の違いは見えない |
| 細胞型で重み付け | 細胞型ごとの活性に近づく | デコンボリューションの誤差を引き継ぐ |
python
import squidpy as sq
import numpy as np
# 単位1:フィーチャ単位。活性の空間分布が地図になる
acts.obsm["spatial"] = adata.obsm["spatial"]
sq.pl.spatial_scatter(acts, color=["MYC", "STAT1", "TP53"], ncols=3)
# 単位2:ドメイン単位。統計が安定する
acts.obs["domain"] = adata.obs["domain"].values
mean_by_dom = dc.rank_sources_groups(acts, groupby="domain", reference="rest", method="t-test_overestim_var")
print(mean_by_dom.head(10))
# 単位3:細胞型の割合で重み付ける
# 活性を、割合で説明できるかを回帰で見る
from sklearn.linear_model import LinearRegression
P = adata.obsm["cell_type_proportions"].to_numpy()
A = acts[:, "STAT1"].X.ravel()
m = LinearRegression().fit(P, A)
print("割合で説明できる割合:", round(m.score(P, A), 3))
print("型ごとの寄与:", dict(zip(adata.obsm["cell_type_proportions"].columns, m.coef_.round(2))))
💡 問いによって、正しい単位が変わる
「どこで活性が高いか」を問うならフィーチャ単位で十分です。地図を描くのが目的だからです。「どの細胞型で高いか」を問うなら、重み付けが要ります。活性を細胞型の割合で回帰し、係数を見れば、どの型がその活性に寄与しているかの見当がつきます。問いを先に決めてから、単位を選んでください。
「どこで活性が高いか」を問うならフィーチャ単位で十分です。地図を描くのが目的だからです。「どの細胞型で高いか」を問うなら、重み付けが要ります。活性を細胞型の割合で回帰し、係数を見れば、どの型がその活性に寄与しているかの見当がつきます。問いを先に決めてから、単位を選んでください。
⚠️ 正規化のやり方が、ここにも効く
活性の推定は、遺伝子セットの発現をまとめる操作です。だから正規化のやり方が、そのまま活性の値に伝わります。総カウントを強く補正すれば、細胞密度の情報が消えるぶん、活性の空間パターンも弱まります。ドメイン同定や空間可変遺伝子の検出と、同じ判断がここでも要ります。
活性の推定は、遺伝子セットの発現をまとめる操作です。だから正規化のやり方が、そのまま活性の値に伝わります。総カウントを強く補正すれば、細胞密度の情報が消えるぶん、活性の空間パターンも弱まります。ドメイン同定や空間可変遺伝子の検出と、同じ判断がここでも要ります。
3. 活性を、地図として読む

活性の値を obs に入れてしまえば、遺伝子とまったく同じように空間統計が使えます。空間的な自己相関を調べ、活性が空間パターンを持つかを検定できます。
python
# 活性を obs に入れれば、遺伝子と同じように空間統計が使える
adata.obs["STAT1_act"] = acts[:, "STAT1"].X.ravel()
# 空間的な自己相関を調べる
sq.gr.spatial_neighbors(adata, coord_type="grid", n_neighs=6)
sq.gr.spatial_autocorr(adata, mode="moran",
attr="obs", genes=["STAT1_act"])
# 腫瘍の縁からの距離を軸にして、勾配として読む
from scipy.spatial import cKDTree
edge = adata.obsm["spatial"][adata.obs["is_tumor_edge"]]
tree = cKDTree(edge)
adata.obs["dist_to_edge"], _ = tree.query(adata.obsm["spatial"])
# 距離で区切って、活性の平均を並べる
bins = np.digitize(adata.obs["dist_to_edge"], np.arange(0, 1000, 100))
print(adata.obs.groupby(bins)["STAT1_act"].mean().round(2))
💡 距離を軸にすると、勾配が見える
腫瘍の縁からの距離を計算して、その距離ごとに活性の平均を並べてください。ドメインで区切るより、連続的な変化が見えやすくなります。「腫瘍から離れるほど活性が下がる」といったパターンは、領域ごとの比較では出てきません。空間可変遺伝子で見た2種類のパターンが、活性についても同じように現れます。
腫瘍の縁からの距離を計算して、その距離ごとに活性の平均を並べてください。ドメインで区切るより、連続的な変化が見えやすくなります。「腫瘍から離れるほど活性が下がる」といったパターンは、領域ごとの比較では出てきません。空間可変遺伝子で見た2種類のパターンが、活性についても同じように現れます。
4. 解釈するときの注意
- 活性は推定値であって、測定値ではない。下流遺伝子の発現から逆算したものです。
- リソースの偏りが結果に出る。よく研究された経路ほど、遺伝子セットが充実しています。
- 細胞型の分布と重ねる。活性の地図が、特定の細胞型の分布と同じ形なら、それは細胞型の写しかもしれません。
- 組織像と照らす。解剖学的な構造と対応するか。
⚠️ 細胞型の分布による交絡は、ここでも起きる
ある細胞型が組織の一部に集まっていれば、その細胞型で高い経路の活性も、当然その場所で高くなります。これは新しい情報ではありません。空間可変遺伝子のときと同じで、細胞型の割合で説明できるかを確かめてから解釈してください。説明できない部分にこそ、追う価値があります。
ある細胞型が組織の一部に集まっていれば、その細胞型で高い経路の活性も、当然その場所で高くなります。これは新しい情報ではありません。空間可変遺伝子のときと同じで、細胞型の割合で説明できるかを確かめてから解釈してください。説明できない部分にこそ、追う価値があります。
5. チェックリスト
- 問いに合った単位を選んだか(フィーチャ/ドメイン/重み付け)
- 活性が細胞型の割合で説明できないかを確かめたか
- 正規化を変えて、活性の空間パターンがどう変わるかを見たか
- 活性を obs に入れて、空間統計にかけたか
- 距離を軸にした勾配としても読んだか
- 活性の地図を組織像と照らしたか
まとめ
- 行列の形が同じなので、scRNA-seq の道具がそのまま使える。
- ただしフィーチャ単位の活性は、混合の平均。「高い細胞がいた」のか「全体が中くらい」なのか区別できない。
- 単位は3つ。フィーチャ/ドメイン/細胞型で重み付け。問いを先に決めてから選ぶ。
- 「どこで高いか」ならフィーチャ単位、「どの細胞型で高いか」なら重み付けが要る。
- 正規化のやり方が、活性の値にそのまま伝わる。
- 活性を obs に入れれば、遺伝子と同じように空間統計が使える。
- 距離を軸にすると、勾配が見える。領域ごとの比較では出てこないパターン。
- 細胞型の分布による交絡は、活性についても起きる。割合で説明できない部分にこそ、追う価値がある。
関連記事
- シーケンス型 空間トランスクリプトーム:空間の細胞間コミュニケーション
- シーケンス型 空間トランスクリプトーム:空間可変遺伝子(SVG)
- シーケンス型 空間トランスクリプトーム:空間ドメイン同定
- シーケンス型 空間トランスクリプトーム:空間 CNV と腫瘍微小環境
- scRNA-seq解析:機能エンリッチメント・パスウェイ解析
- scRNA-seq解析:下流解析の全体像
- RNA-seq解析:差次発現解析(DESeq2)
- scRNA-seq解析:正規化・特徴選択・次元削減・クラスタリング
- scRNA-seq解析の土台:AnnData のデータ構造をリレーショナルDBの発想で理解する
参考文献
- 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
- Müller-Dott, S., Tsirvouli, E., Vazquez, M., et al. (2023). Expanding the coverage of regulons from high-confidence prior knowledge for accurate estimation of transcription factor activities. Nucleic Acids Research, 51(20), 10934–10949. doi:10.1093/nar/gkad841
- Subramanian, A., Tamayo, P., Mootha, V. K., et al. (2005). Gene set enrichment analysis: a knowledge-based approach for interpreting genome-wide expression profiles. PNAS, 102(43), 15545–15550. doi:10.1073/pnas.0506580102
- Kanehisa, M., Furumichi, M., Sato, Y., Kawashima, M., & Ishiguro-Watanabe, M. (2023). KEGG for taxonomy-based analysis of pathways and genomes. Nucleic Acids Research, 51(D1), D587–D592. doi:10.1093/nar/gkac963
- 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
- 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
- Salim, A., Bhuva, D. D., Chen, C., et al. (2025). SpaNorm: spatially-aware normalization for spatial transcriptomics data. Genome Biology, 26, 109. doi:10.1186/s13059-025-03565-y
- 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
- 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
- Ståhl, P. L., Salmén, F., Vickovic, S., et al. (2016). Visualization and analysis of gene expression in tissue sections by spatial transcriptomics. Science, 353(6294), 78–82. doi:10.1126/science.aaf2403


コメント