MultiVI でペアデータを統合 ─ 10x Multiome を共通の潜在空間へ

Multiomics
📚 この記事について
統合スポークの1本目です。前処理済みのペアデータ(10x Multiome)を MultiVI で1つの共通の潜在空間へ統合し、可視化・クラスタリングまで進めます。専門用語はその都度説明します。
🔙 前の記事scATAC-seq 側の前処理 ─ 統合に向けて(前の記事)
🔜 次の記事:「scGLUE で非ペアデータを統合
📌 前提:前処理済みの MuData(RNA・ATAC の生カウントを .layers に保持)。scvi-tools の基礎。

シングルセル・マルチオミクス(single-cell multiomics/scRNA-seq と scATAC-seq の統合解析)は、前処理を終えたら統合に進みます。この記事では、ペア(同一細胞計測)のデータを MultiVI で共通の潜在空間へまとめます。

1. MultiVI とは ─ 共通の潜在空間へ


MultiVI は、ペア(同一細胞計測)の RNA と ATAC を1つの共通の潜在空間にまとめる深層生成モデル(VAE)です(Ashuach et al., Nat. Methods, 2023)。scVI(RNA;Lopez et al., 2018)と PeakVI(ATAC;Ashuach et al., 2022)を土台に、両モダリティを1つのモデルで扱います。

図:MultiVI の構造。RNA(生カウント)と ATAC(ピーク生カウント)を共有エンコーダで1つの潜在空間 z に写し、そこから各モダリティを復元するよう学習する。片方だけの細胞(欠損)も混ぜられる。
図:MultiVI の構造。RNA(生カウント)と ATAC(ピーク生カウント)を共有エンコーダで1つの潜在空間 z に写し、そこから各モダリティを復元するよう学習する。片方だけの細胞(欠損)も混ぜられる。
💡 MultiVI の考え方
両モダリティを共有エンコーダで1つの潜在空間 zに写し、そこから各モダリティを復元するよう学習します。ペアデータでは同一細胞なので、RNA と ATAC は同じ点に統合されます。さらに、片方しか測っていない細胞(欠損)も一緒に扱える(モザイク統合)のが強みです。前処理で述べたとおり、入力は生カウントです。

2. 入力データを整える(生カウントで結合)


MultiVI は、遺伝子とピークを1つの AnnData に、遺伝子 → ピークの順で結合した形を入力に取ります。前処理で .layers[‘counts’] に退避しておいた生カウントを使います。

python
import scanpy as sc
import anndata as ad
import scvi

# 前処理済み MuData から、生カウントで RNA・ATAC を取り出す
rna = mdata["rna"].copy();   rna.X = rna.layers["counts"].copy()
atac = mdata["atac"].copy(); atac.X = atac.layers["counts"].copy()

# 遺伝子 → ピークの順に1つの AnnData へ結合(同じ細胞・ペア)
adata_mvi = ad.concat([rna, atac], axis=1, merge="same")
adata_mvi.var["modality"] = (
    ["Gene Expression"] * rna.n_vars + ["Peaks"] * atac.n_vars
)
adata_mvi.obs["modality"] = "paired"     # 全細胞がペア由来
⚠️ 注意点:生カウント・特徴の順序
MultiVI に渡すのは生カウントです(正規化した .X ではありません)。また特徴は遺伝子が先、ピークが後の順に並べる必要があります。var の modality 列で「Gene Expression」「Peaks」を区別し、この順序と個数を次のステップで指定します。

3. MultiVI を設定して学習する


入力ができたら、setup_anndata でモデルに登録し、遺伝子数(n_genes)とピーク数(n_regions)を指定して MultiVI を作り、学習します。

図:MultiVI の流れ。前処理済み MuData の生カウントを1つの AnnData に結合し、MULTIVI を設定・学習して、共通の潜在空間を取得。以降は近傍グラフ → UMAP → クラスタリングと進む。
図:MultiVI の流れ。前処理済み MuData の生カウントを1つの AnnData に結合し、MULTIVI を設定・学習して、共通の潜在空間を取得。以降は近傍グラフ → UMAP → クラスタリングと進む。
python
# 低頻度の特徴を除く(ごく少数の細胞にしか出ない遺伝子・ピーク)
sc.pp.filter_genes(adata_mvi, min_cells=int(adata_mvi.n_obs * 0.01))

# batch_key は「モダリティ由来」を指す(MultiVI の要件)
scvi.model.MULTIVI.setup_anndata(adata_mvi, batch_key="modality")

model = scvi.model.MULTIVI(
    adata_mvi,
    n_genes=(adata_mvi.var["modality"] == "Gene Expression").sum(),
    n_regions=(adata_mvi.var["modality"] == "Peaks").sum(),
)
model.train()
💡 n_genes / n_regions と batch_key
MultiVI は「先頭 n_genes 個が遺伝子、続く n_regions 個がピーク」と仮定するので、この2つの指定が必須です。batch_key はモダリティ由来(ペア/RNA のみ/ATAC のみ)を指し、サンプルやドナーのバッチは categorical_covariate_keys で別に渡します(scvi-tools;Gayoso et al., 2022)。学習は GPU があると快適です。

4. 潜在空間を取得して可視化する


学習が済んだら、共通の潜在空間を取り出し、その上で近傍グラフ・UMAP・クラスタリングを行います。ここから先は、単一モダリティの解析と同じ手続きです。

python
# 共通の潜在空間を取得
adata_mvi.obsm["X_multivi"] = model.get_latent_representation()

# 潜在空間の上で近傍グラフ → UMAP → クラスタリング
sc.pp.neighbors(adata_mvi, use_rep="X_multivi")
sc.tl.umap(adata_mvi)
sc.tl.leiden(adata_mvi)
図:統合後の共通の潜在空間(UMAP)。ペアデータでは RNA と ATAC が同一細胞なので1点に統合され、細胞型ごとにまとまる。
図:統合後の共通の潜在空間(UMAP)。ペアデータでは RNA と ATAC が同一細胞なので1点に統合され、細胞型ごとにまとまる。
💡 以降は潜在空間を使う
neighbors では use_rep=’X_multivi’ を指定し、PCA ではなく MultiVI の潜在空間を使います。得られた UMAP・Leiden クラスタは、RNA と ATAC の両方の情報を反映した統合的な細胞集団です(クラスタリングは Leiden;Traag et al., Sci. Rep., 2019)。アノテーションもこの上で行います。

5. 得られるもの・注意点・非ペアへの広がり


MultiVI からは潜在空間のほかに、正規化した発現・アクセシビリティや、欠損モダリティの補完(imputation)も得られます。統合後は、ペアと非ペアの区別なく共通の下流(アノテーション・GRN・摂動)へ進めます。

💡 ペア以外への広がり
MultiVI はペア+片方だけ(モザイク)を1つのモデルで扱えます。一方、完全に非ペア(共有細胞がまったくなく特徴も噛み合わない)ケースは、guidance graph を使う scGLUE が向きます(次の記事)。手元のデータがペアか非ペアかで、まず入口が決まります(Argelaguet et al., Nat. Biotechnol., 2021)。

次回は、非ペアデータを scGLUE で統合します。統合された潜在空間から先は、どちらの経路でも共通です。

まとめ


  • MultiVI は、ペアの RNA・ATAC を1つの共通の潜在空間にまとめる VAE(scVI + PeakVI が土台)。
  • 入力は生カウント。遺伝子 → ピークの順で1つの AnnData に結合する。
  • setup_anndata(batch_key=”modality”) → MULTIVI(n_genes, n_regions) → train
  • 潜在空間 X_multivi の上で neighbors(use_rep) → UMAP → Leiden。以降は単一モダリティと同じ。
  • モザイク(片方欠損)も可。完全な非ペアは scGLUE(次回)。統合後の下流は経路によらず共通。

関連記事


参考文献


  • Argelaguet, R., Cuomo, A. S. E., Stegle, O., & Marioni, J. C. (2021). Computational principles and challenges in single-cell data integration. Nature Biotechnology, 39(10), 1202–1215. doi:10.1038/s41587-021-00895-7
  • Lopez, R., Regier, J., Cole, M. B., Jordan, M. I., & Yosef, N. (2018). Deep generative modeling for single-cell transcriptomics. Nature Methods, 15(12), 1053–1058. doi:10.1038/s41592-018-0229-2
  • Ashuach, T., Reidenbach, D. A., Gayoso, A., & Yosef, N. (2022). PeakVI: A deep generative model for single-cell chromatin accessibility analysis. Cell Reports Methods, 2(3), 100182. doi:10.1016/j.crmeth.2022.100182
  • Ashuach, T., Gabitto, M. I., Koodli, R. V., et al. (2023). MultiVI: deep generative model for the integration of multimodal data. Nature Methods, 20(8), 1222–1231. doi:10.1038/s41592-023-01909-9
  • Gayoso, A., Lopez, R., Xing, G., et al. (2022). A Python library for probabilistic analysis of single-cell omics data. Nature Biotechnology, 40(2), 163–166. doi:10.1038/s41587-021-01206-w
  • Traag, V. A., Waltman, L., & van Eck, N. J. (2019). From Louvain to Leiden: guaranteeing well-connected communities. Scientific Reports, 9, 5233. doi:10.1038/s41598-019-41695-z

コメント

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