この記事のゴール
条件間の細胞組成の差を、組成性(compositionality)の問題を踏まえて正しく検定できること。クラスタ単位の scCODA と、近傍単位の Milo を使い分けます。
何を問うか
「WT と KO で、ある細胞型が増えた/減ったか」――発生・疾患・遺伝子改変では、細胞組成の変化そのものが重要な表現型になります。
組成性の罠
細胞型の割合は合計が 100% に拘束されます。そのため、ある細胞型が増えると、他の細胞型は絶対数が変わらなくても割合が下がって見えます。素朴に「各細胞型の割合」を個別に検定すると、この見かけの変化を拾って偽陽性を出します。
💡 だから専用の方法が要る
組成性を無視した検定(各細胞型を独立に割合比較)は偽陽性を生みます。組成性を考慮する scCODA か、近傍ベースで頑健に検定する Milo を使います。
2つの主要アプローチ
- scCODA:クラスタ(細胞型)単位。ベイズモデル(Dirichlet-multinomial)で組成性を考慮。参照細胞型を基準に「どの型が有意に変化したか」を出す。離散的な細胞型が定義できるときに向く。
- Milo:近傍単位(離散クラスタ不要)。k-NN グラフ上の部分的に重なる近傍ごとに細胞数を GLM で検定し、重み付き FDR で補正。連続的・遷移的な状態の変化に強い。
scCODA ― クラスタ単位・組成性を考慮
pythonimport pertpy as pt
# 細胞型×サンプルのカウントを集計し、組成データを作る
sccoda = pt.tl.Sccoda()
mdata = sccoda.load(
adata, type="cell_level", generate_sample_level=True,
cell_type_identifier="cell_type", sample_identifier="sample",
covariate_obs=["condition"],
)
# 参照細胞型を指定してモデルを定義(組成性のため)→ サンプリング → 要約
mdata = sccoda.prepare(mdata, formula="condition", reference_cell_type="automatic")
sccoda.run_nuts(mdata)
sccoda.summary(mdata) # credible effects(有意な変化)を確認
🔧 環境メモ:pip install pertpy。scCODA は参照細胞型の選び方で結果が変わります("automatic" か、変化しないと考えられる型を指定)。有意性は p 値ではなくcredible effect(事後確率に基づく)で判断します。
Milo ― 近傍単位・連続状態に強い
pythonimport pertpy as pt
import scanpy as sc
milo = pt.tl.Milo()
mdata = milo.load(adata)
# 統合表現上で近傍グラフ → 近傍を構成 → 近傍×サンプルのカウント
sc.pp.neighbors(mdata["rna"], use_rep="X_scVI", n_neighbors=15)
milo.make_nhoods(mdata["rna"])
milo.count_nhoods(mdata, sample_col="sample")
# GLM で差次的存在量(DA)を検定(重み付き FDR)
milo.da_nhoods(mdata, design="~condition")
🔧 環境メモ:Milo は内部で R(edgeR)を使う実装があり、pertpy[de] か rpy2 等が要ります。離散クラスタを前提にしないため、細胞型ラベルが曖昧でも適用でき、連続的な遷移状態の偏りを捉えられます。近傍グラフの基盤となる use_rep="X_scVI" はscVI によるサンプル統合・バッチ補正で得た統合表現です。API はバージョンで変わるため公式チュートリアル参照。
ツール早見表
| ツール | 言語 | 単位 | 特徴 |
|---|---|---|---|
| scCODA | Python(pertpy) | クラスタ | ベイズで組成性を考慮・参照細胞型が必要 |
| Milo | Python(pertpy, R backend) | 近傍 | 離散クラスタ不要・連続/遷移状態に強い |
| MELD | Python | 細胞 | 条件らしさの密度推定 |
| DA-seq | Python/R | 近傍 | 2条件のペア比較向き |
| propeller (speckle) / DCATS | R | クラスタ | 割合の検定(補正あり) |
落とし穴
⚠️ つまずきやすい点
– 組成性:素朴な割合検定は偽陽性。scCODA / Milo を使う。
– 生物学的反復が必須:条件ごとに複数個体。1個体ずつでは検定できない。
– 参照細胞型(scCODA):選び方で結論が変わる。変化しないと考えられる型か "automatic"。
– クラスタ vs 近傍:明確な細胞型なら scCODA、連続/遷移状態や曖昧なラベルなら Milo。
– バッチ・交絡:条件と技術要因が混ざらないように。design に含める。
– 絶対数 vs 割合:scRNA-seq は絶対数を直接は測れない。あくまで相対組成の変化を見ている点に注意。
まとめ
- 細胞組成の差は、割合が合計100%に拘束される(組成性)ため、素朴な割合検定では偽陽性が出る。
- scCODA(クラスタ単位・ベイズ・参照細胞型)か Milo(近傍単位・連続状態に強い)を使う。
- 生物学的反復が必須。明確な細胞型なら scCODA、連続/遷移状態なら Milo。
- scRNA-seq が見ているのは相対組成であり、絶対数の変化とは限らない点に注意。
次の記事:軌道・擬時間と RNA velocity の全体像 — 「順序・方向・運命」をどう捉えるか、3つの解析の関係を整理します。
関連記事
下流解析の地図と前後
- 📖 差次的発現(DE):細胞型“内”の発現変化(本記事は細胞型“の割合”の変化)
- 📖 軌道・擬時間と RNA velocity の全体像:連続的な状態変化を捉える次の主題(次の記事)
- 📖 下流解析の全体像:下流解析全体の地図
解析の基盤
- 📖 scVI によるサンプル統合・バッチ補正:Milo の近傍グラフが使う
X_scVI統合表現の作り方
参考文献
- Dann, E., Henderson, N. C., Teichmann, S. A., Morgan, M. D., & Marioni, J. C. (2022). Differential abundance testing on single-cell data using k-nearest neighbor graphs. Nature Biotechnology, 40, 245–253. doi:10.1038/s41587-021-01033-z
- Büttner, M., Ostner, J., Müller, C. L., Theis, F. J., & Schubert, B. (2021). scCODA is a Bayesian model for compositional single-cell data analysis. Nature Communications, 12, 6876. doi:10.1038/s41467-021-27150-6
- Burkhardt, D. B., Stanley, J. S., Tong, A., et al. (2021). Quantifying the effect of experimental perturbations at single-cell resolution. Nature Biotechnology, 39, 619–629. doi:10.1038/s41587-020-00803-5
- Heumos, L., Schaar, A. C., Lance, C., et al. (2023). Best practices for single-cell analysis across modalities. Nature Reviews Genetics, 24, 550–572. doi:10.1038/s41576-023-00586-w


コメント