scGLUE で非ペアデータを統合 ─ guidance graph で橋渡し

Multiomics
📚 この記事について
統合スポークの2本目です。非ペア(RNA と ATAC を別々の細胞集団で測ったデータ)を scGLUE で共通の潜在空間へ統合します。guidance graph が橋渡しの鍵です。専門用語はその都度説明します。
🔙 前の記事MultiVI でペアデータを統合(前の記事)
🔜 次の記事:「SCENIC+ でエンハンサー駆動 GRN」(GRN スポーク)
📌 前提:前処理済みの RNA(生カウント+PCA+HVG)と ATAC(LSI+HVG)。scGLUE のインストール。

シングルセル・マルチオミクス(single-cell multiomics/scRNA-seq と scATAC-seq の統合解析)は、同じ細胞から両方を測っていない「非ペア」でも統合できます。この記事では、別々の細胞で測った RNA と ATAC を scGLUE で共通の潜在空間へまとめます。

1. scGLUE とは ─ guidance graph で橋渡し


scGLUE(GLUE=graph-linked unified embedding)は、非ペア(RNA と ATAC を別々の細胞集団で測ったデータ)を1つの共通の潜在空間にまとめる手法です(Cao & Gao, Nat. Biotechnol., 2022)。ペアと違って同じ細胞の対応がないため、特徴どうし(遺伝子とピーク)を結ぶ guidance graph で橋渡しします。

図:scGLUE の構造。RNA・ATAC それぞれを VAE で潜在空間に写し、遺伝子↔ピークの guidance graph でデコーダを結ぶことで空間の向きをそろえ、判別器がモダリティを混ぜて整列させる。
図:scGLUE の構造。RNA・ATAC それぞれを VAE で潜在空間に写し、遺伝子↔ピークの guidance graph でデコーダを結ぶことで空間の向きをそろえ、判別器がモダリティを混ぜて整列させる。
💡 scGLUE の考え方
各モダリティを別々の VAE で潜在空間に写しますが、細胞の対応がないので、そのままでは2つの空間の向きがそろいません。そこで、遺伝子↔ピークの guidance graph をグラフ VAE で埋め込み、それを各デコーダの重みに使うことで空間の向きをそろえ、さらにモダリティ判別器(敵対的学習)で RNA 細胞と ATAC 細胞を混ぜます。入力は RNA が生カウント、ATAC はピーク特徴です。

2. guidance graph をつくる


最初に、遺伝子とピークを結ぶ guidance graph を作ります。標準はゲノム上の近さで、あるピークが遺伝子の近く(遺伝子体やプロモーター)にあれば、その遺伝子とエッジで結びます。そのために、特徴にゲノム座標を付けておきます。

図:guidance graph。遺伝子(teal)とピーク(amber)をノードとし、ピークが遺伝子の近くにあればエッジを張る。このグラフが、細胞の対応がない非ペアの橋渡しになる。
図:guidance graph。遺伝子(teal)とピーク(amber)をノードとし、ピークが遺伝子の近くにあればエッジを張る。このグラフが、細胞の対応がない非ペアの橋渡しになる。
python
import anndata as ad
import scanpy as sc
import scglue

# 前処理済みの非ペアデータ(別々の細胞)を用意
#   rna : layers["counts"], obsm["X_pca"], HVG 済み
#   atac: obsm["X_lsi"], HVG 済み

# 特徴にゲノム座標を付ける(遺伝子は GTF、ピークは interval から)
scglue.data.get_gene_annotation(rna, gtf="gencode.gtf.gz", gtf_by="gene_name")
coords = atac.var_names.str.split(r"[:-]")
atac.var["chrom"]      = coords.map(lambda x: x[0])
atac.var["chromStart"] = coords.map(lambda x: int(x[1]))
atac.var["chromEnd"]   = coords.map(lambda x: int(x[2]))

# 遺伝子 ↔ ピークの guidance graph(近さで結ぶ)
guidance = scglue.genomics.rna_anchored_guidance_graph(rna, atac)
scglue.graph.check_graph(guidance, [rna, atac])
💡 guidance graph のエッジの意味
エッジは「この遺伝子とこのピークは制御的に関係しそう」という事前知識です。既定ではゲノム座標の近さ(重なり・プロモーター距離)で張られ、距離に応じて重みが減衰します。この事前知識が、細胞の対応がない非ペアで両モダリティを結ぶ「のりしろ」になります。

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


次に、各モダリティの入力を configure_dataset で設定します。RNA は生カウント+PCA、ATAC はLSIを使います(前処理で用意したもの。LSI は Cusanovich et al., Science, 2015)。HVG だけの部分グラフを取り出し、GLUE を学習します。

python
# 各モダリティの入力を設定(RNA=生カウント+PCA、ATAC=LSI)
scglue.models.configure_dataset(
    rna, "NB", use_highly_variable=True, use_layer="counts", use_rep="X_pca"
)
scglue.models.configure_dataset(
    atac, "NB", use_highly_variable=True, use_rep="X_lsi"
)

# HVG だけの部分グラフを取り出す
from itertools import chain
guidance_hvf = guidance.subgraph(chain(
    rna.var.query("highly_variable").index,
    atac.var.query("highly_variable").index,
)).copy()

# GLUE を学習
glue = scglue.models.fit_SCGLUE(
    {"rna": rna, "atac": atac}, guidance_hvf, fit_kws={"directory": "glue"}
)
⚠️ 注意点:モダリティごとに入力が違う
RNA は生カウント(use_layer=”counts”)と PCA(use_rep=”X_pca”)、ATAC は LSI(use_rep=”X_lsi”)を指定します。前処理記事で RNA の生カウントを .layers に残し、ATAC の LSI を obsm に入れておいたのはこのためです。学習には GPU が実質必要で、数十分かかります。

4. 潜在空間へ埋め込んで可視化する


学習が済んだら、各モダリティを共通の潜在空間 X_glue へ埋め込み、RNA と ATAC の細胞を1つに結合して可視化します。

python
# 各モダリティを共通の潜在空間へ埋め込む
rna.obsm["X_glue"] = glue.encode_data("rna", rna)
atac.obsm["X_glue"] = glue.encode_data("atac", atac)

# RNA と ATAC の細胞を1つに結合して可視化
combined = ad.concat([rna, atac])
sc.pp.neighbors(combined, use_rep="X_glue")
sc.tl.umap(combined)
sc.tl.leiden(combined)
図:統合前後。統合前はモダリティごとに分かれるが、統合後は細胞型でまとまり、RNA 細胞(○)と ATAC 細胞(△)が混ざるのが理想。
図:統合前後。統合前はモダリティごとに分かれるが、統合後は細胞型でまとまり、RNA 細胞(○)と ATAC 細胞(△)が混ざるのが理想。
💡 うまく統合できたか
統合前はモダリティごとに分かれていた細胞が、統合後は細胞型でまとまり、RNA 細胞と ATAC 細胞が混ざるのが理想です(クラスタリングは Leiden;Traag et al., Sci. Rep., 2019)。分かれたままなら、guidance graph の質・HVG・学習を見直します。scGLUE には統合の一貫性を測る指標もあります。

5. MultiVI との使い分け・注意点


ペア(MultiVI)と非ペア(scGLUE)は入口が違うだけで、行き着く先は共通の潜在空間です。ここから先の解析 ─ アノテーション、GRN 推論、摂動 ─ は、経路によらず共通の手続きになります(Argelaguet et al., 2021)。

💡 MultiVI と scGLUE の使い分け
同じ細胞から両方を測った(ペア)なら MultiVI(Ashuach et al., 2023)。別々の細胞で測った(非ペア)なら scGLUE。ペアが一部だけ混じるモザイクは MultiVI が扱えます。手元のデータがどちらかを見分けることが、統合の最初の分岐です。

これで統合の2つの型(ペア・非ペア)が揃いました。次のブロックからは、統合された潜在空間を使って遺伝子制御ネットワーク(GRN)を組み立てます。

まとめ


  • scGLUE は、非ペア(別々の細胞の RNA・ATAC)を共通の潜在空間にまとめる手法。
  • 細胞の対応がない代わりに、遺伝子↔ピークの guidance graph(ゲノムの近さ)で橋渡しする。
  • configure_dataset で RNA=生カウント+PCA、ATAC=LSI を指定 → HVG 部分グラフ → fit_SCGLUE。
  • encode_data で X_glue を得て結合 → neighbors(use_rep) → UMAP。細胞型で混ざれば成功。
  • ペアは MultiVI、非ペアは scGLUE。統合後の下流は経路によらず共通。次は GRN 推論へ。

関連記事


参考文献


  • Cao, Z.-J., & Gao, G. (2022). Multi-omics single-cell data integration and regulatory inference with graph-linked embedding. Nature Biotechnology, 40(10), 1458–1466. doi:10.1038/s41587-022-01284-4
  • 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
  • Cusanovich, D. A., Daza, R., Adey, A., et al. (2015). Multiplex single-cell profiling of chromatin accessibility by combinatorial cellular indexing. Science, 348(6237), 910–914. doi:10.1126/science.aab1601
  • 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
  • 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をコピーしました