scRNA-seq解析:ダブレット(2細胞)の検出 ― SOLO(GPU必須のAIを使った手法)

scRNA-seq

📚 この記事について:「scRNA-seq解析 実践シリーズ(前処理編)」の記事です。全体像と手法比較は 前処理の全体像とツール選択 を参照。本記事はダブレット検出の AI 手法 SOLO(scVI を土台にする)を扱います。各ステップで「何のために」を先に説明します。

🖥 動作環境GPU 必須(Google Colab などの GPU ランタイム推奨。scVI を内部で使います)。

🔀 対になる手法:CPU で完結する古典手法 ダブレット検出:scrublet。どちらか一方(または併用)を選びます。

🔙 前の記事サンプル統合:scVI / 🔜 次の記事正規化・特徴選択・次元削減・クラスタリング

🧩 前提「統合:scVI」の記事で scVI モデルを学習済みであること(SOLO がそれを使う)/GPU 環境/Python の基本。


この記事のゴール

1つの液滴に2細胞が入って「1個の細胞」として記録されたダブレットを、scVI を土台にした SOLO で見つけて除くこと。統合で scVI を使っているなら、その学習済みモデルをそのまま活かせます。


0. ダブレットとは/なぜ問題なのか

10x などの液滴法では、確率的に2細胞以上が同じ液滴に入ることがあります(ダブレット/マルチプレット)。2細胞の発現が1つのバーコードに混ざって記録されます。

たとえば T細胞と B細胞が混ざると、両方のマーカー遺伝子を持つ細胞ができます。これは実在しないのに、クラスタリングで「新しい細胞型」として現れ、細胞型アノテーションや差次的発現遺伝子(DEG、differentially expressed genes)解析を歪めます。

💡 見つけやすい・見つけにくいダブレット
違う細胞型どうし(ヘテロタイプ)は混ざるとプロファイルが大きく変わるので見つけやすい。同じ細胞型どうし(ホモタイプ)は1細胞とほぼ同じプロファイルになり、区別する手がかりが無いので取りこぼします。「全部は除けない」前提で使います。

⚠️ 原則:検出はサンプル(バッチ)ごと
ダブレットは各サンプルの中で起きる現象です。混ぜずに、バッチごとに検出します(Heumos et al., 2023)。SOLO は後述の restrict_to_batch でこれを担保します。


1. SOLO の前提と仕組み

📖 関連:土台の scVI のモデル全体像は scvi-tools の全体像、統合での使い方は サンプル統合:scVI を参照。本記事は SOLO の仕組みと、統合パイプラインでの使い方(オプション・落とし穴・scrublet との比較)を扱います。

仕組み

SOLO は、学習済みの scVI を土台に、「単一細胞かダブレットか」を見分ける分類器(ニューラルネット)を追加で学習させる手法です(Bernstein et al., 2020)。手順は次のとおりです。

  1. 観測細胞に加えて、カウント空間で人工的なダブレットを生成する(2細胞のカウントを足し合わせる)
  2. それらを学習済み scVI の潜在表現に写像する(バッチ補正済みの特徴空間)
  3. その潜在表現を入力に、シングレット vs ダブレットを判別する分類器を学習する
  4. 各細胞にダブレット確率が付き、閾値で判定する

scrublet との違いは、単純な距離(k近傍)ではなく、scVI が学習した潜在表現と専用の分類器を使う点です。潜在空間では、ダブレットは元になった細胞型の中間に位置しやすく、分類器はその領域を学習します。scVI を土台にするため GPU が前提です。

SOLO の仕組み。学習済み scVI の潜在表現(バッチ補正済み)を特徴空間として使い、観測細胞と人工ダブレットをそこに写像する。潜在空間ではダブレットが細胞型クラスタの中間に位置しやすく、分類器(ニューラルネット)が単一細胞とダブレットを見分けてダブレット確率を出す。
SOLO の仕組み。学習済み scVI の潜在表現(バッチ補正済み)を特徴空間として使い、観測細胞と人工ダブレットをそこに写像する。潜在空間ではダブレットが細胞型クラスタの中間に位置しやすく、分類器(ニューラルネット)が単一細胞とダブレットを見分けてダブレット確率を出す。

コード(バッチごとに実行)

「統合:scVI」で学習済みの scVI モデルを使い、バッチごとに SOLO を回して判定を集めます。

pythonimport scvi
import pandas as pd

def detect_doublets_solo(scvi_model, batches):
    """各バッチで SOLO を学習し、singlet/doublet 予測を結合して返す。"""
    preds = []
    for b in batches:
        # ★ ダブレットはバッチ内現象なので restrict_to_batch でバッチごとに
        solo = scvi.external.SOLO.from_scvi_model(scvi_model, restrict_to_batch=b)
        solo.train()
        p = solo.predict(soft=False)                          # 'singlet' / 'doublet'
        p.index = p.index.str.replace(r"-0$", "", regex=True)  # SOLO付与のサフィックス除去
        preds.append(p)
    return pd.concat(preds)

# 「統合:scVI」の記事で学習済みの scVI モデル(model)とバッチラベルを使う
solo_pred = detect_doublets_solo(model, batches=["Ctrl", "Treat"])
adata.obs["solo"] = solo_pred[adata.obs.index]
print(adata.obs["solo"].value_counts())

# singlet のみ残す
adata = adata[adata.obs["solo"] == "singlet"].copy()
print("除去後:", adata.n_obs)

📌 除去のあとは「やり直し」が望ましい
ダブレットを除くと細胞集団が変わるため、高変動遺伝子(HVG、highly variable genes)選択や次元削減が前の結果に引きずられます生カウントから HVG → scVI を再実行すると、よりクリーンな結果が得られます。


2. GPU 環境について

SOLO は内部で scVI ベースのモデルを使うため、実用上 GPU が必須です。手元に GPU が無い場合は、統合(scVI)からこのステップまでを Google Colab(無料の GPU ランタイム)やクラウド GPU でまとめて実行するのが現実的です。GPU が使えないなら、普通のPCで完結する scrublet(別記事) を選んでください。


3. もう一方の選択肢:CPU で完結する scrublet

GPU が無い、または scVI を使わない場合は、単独で動く古典手法 scrublet(人工ダブレットを作って k近傍でスコア化)が手軽です(📖 詳しくは ダブレット検出:scrublet 記事)。統合の前に、サンプルごとに実行できます。

📌 どちらを選ぶか(詳しくは 全体像の記事
すでに scVI を組んでいる(GPU 利用)本記事の SOLO
GPU が無い・手早く・統合前に検出したいscrublet(別記事)
– 重要な解析では2手法を併用し、両方が doublet と判定した細胞だけを優先的に除く保守的な運用も有効です(Xi & Li, 2021)。


まとめ

  • SOLO は学習済み scVI の潜在表現を特徴に、分類器(ニューラルネット)でダブレットを判別する。統合で scVI を使っているなら自然に繋がるが、GPU 必須
  • restrict_to_batchバッチごとに検出。除去のあとは生カウントからやり直し(HVG → scVI 再実行)が望ましい。
  • ホモタイプは取りこぼす、除去しすぎに注意。GPU が無いなら scrublet(別記事) を。

次の記事:正規化・特徴選択・次元削減・クラスタリング — きれいな細胞集団が揃ったら、正規化・HVG・次元削減・クラスタリングを整理します。


関連記事


参考文献

  • Bernstein, N. J., Fong, N. L., Lam, I., et al. (2020). Solo: Doublet Identification in Single-Cell RNA-Seq via Semi-Supervised Deep Learning. Cell Systems, 11(1), 95–101. doi:10.1016/j.cels.2020.05.010
  • Xi, N. M., & Li, J. J. (2021). Benchmarking Computational Doublet-Detection Methods for Single-Cell RNA Sequencing Data. Cell Systems, 12(2), 176–194. doi:10.1016/j.cels.2020.11.008
  • 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

コメント

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