scATAC-seq のダブレット検出 ─ 2つの考え方と AMULET

scATAC-seq
📚 この記事について
scATAC-seq 前処理の任意ステップ、ダブレット(2細胞の混ざり)の検出です。ATAC 固有の原理と、2つの手法を扱います。
🔙 前の記事scATAC-seq の QC
🔜 次の記事scATAC-seq のピークコール
📌 前提タイル行列の作成と特徴選択(select_features)が済んでいること

scATAC-seq(single-cell ATAC-seq/核を使う場合は snATAC-seq)のダブレット検出では、2つの細胞が混ざったノイズを除きます。ここでは ATAC ならではの検出原理と、性質の異なる2つの手法を押さえます。

1. ダブレットとは


ダブレットとは、2つの細胞が1つの液滴に入ってしまい、1細胞として計測されたものです。プロファイルが2細胞ぶん混ざるため、放置すると偽のクラスタ偽の軌道を作り、解析を歪めます。QCの一環として除きます。

2. ATAC ならではの検出原理


ATAC には、RNAには無い強力な手がかりがあります。二倍体の細胞は、ゲノム上の各位置にコピーを2つ(2アレル)しか持ちません。つまり1つの位置に重なるフラグメントは、単一細胞なら最大2本です。もし3本以上重なる位置が多ければ、それは2細胞ぶん(=ダブレット)の証拠になります。

図:ダブレット検出の原理(1細胞は1か所に最大2コピー)
図:ダブレット検出の原理(1細胞は1か所に最大2コピー)
💡 これがカバレッジ型(AMULET)の考え方
この「3本以上重なる位置の多さ」を数えてダブレットを見つけるのが AMULET です(Thibodeau et al., Genome Biology, 2021)。RNAには無い、ATAC固有のアプローチです。

3. 2つの考え方を比べる


ダブレット検出には、原理の異なる2系統があります。どちらが優れているというより、捕まえるダブレットが違うのがポイントです。

シミュレーション型 カバレッジ型(AMULET)
代表 scrublet(SnapATAC2内蔵)・scDblFinder AMULET
原理 人工ダブレットを作り、似た実細胞を探す 1位置に3本以上重なる細胞を数える
得意 異なる細胞型の混ざり(heterotypic) 同じ細胞型の混ざりも検出できる
本サイトでの扱い 既定(framework内蔵で手軽) 厳密にやるとき併用
💡 なぜ「同じ細胞型の混ざり」が問題か
同じ細胞型どうしのダブレット(homotypic)は、プロファイルが本物の単一細胞とよく似るため、シミュレーション型では見逃しやすいです。AMULET はコピー数の物理的な制約を使うので、こうしたダブレットも捕まえられます。だから両者は補い合う関係です。

4. コード:SnapATAC2(シミュレーション型)


本サイトの既定は、SnapATAC2 内蔵の scrublet 系です。人工ダブレットを作って確率を出し、しきい値で除去します(scrublet 原理:Wolock et al., Cell Systems, 2019)。

python
# 前提:add_tile_matrix → select_features 済み(scrublet は選択特徴を使う)

# 1. シミュレーション型でダブレット確率を計算
snap.pp.scrublet(data)

# 2. 確率 > 0.5 のダブレットを除去
snap.pp.filter_doublets(data, probability_threshold=0.5)
⚠️ 実行順に注意
scrublet は選択済みの特徴量を使うため、add_tile_matrix → select_features → scrublet → filter_doublets の順で、次元削減(spectral)よりに行います。順番を間違えるとエラーや不正確な結果になります。probability_threshold を下げるほど多く除去されます(過剰除去に注意)。

5. より厳密にやるなら AMULET を併用


scrublet と scDblFinder(どちらもシミュレーション型)は結果が近く、実用上は十分です。ただし homotypic ダブレットまで厳密に落としたい場合は、カバレッジ型の AMULET を併用するのが最良です。AMULET は SnapATAC2 とは別のツール(コマンドライン)で、フラグメントファイルから直接ダブレットを検出します(十分な深度=おおむね1細胞あたり1万〜1.5万リード以上が必要です)。

bash
# AMULET(別ツール):フラグメントファイルから直接ダブレットを検出
#   入力:fragments.tsv.gz / バーコード対応表 / 染色体リスト / 反復配列BED
AMULET.sh \
    fragments.tsv.gz \
    singlecell.csv \
    human_autosomes.txt \
    blacklist_repeats.bed \
    amulet_out/ \
    /path/to/AMULET/
# → amulet_out/MultipletBarcodes_01.txt にダブレットのバーコードが出る

出力された MultipletBarcodes_01.txt のバーコードを、scrublet の結果と合わせて(和集合で)除きます。

python
# AMULET が出したダブレットのバーコードを読み込む
with open("amulet_out/MultipletBarcodes_01.txt") as fh:
    amulet_bc = set(line.strip() for line in fh)

# scrublet(シミュレーション型)と AMULET(カバレッジ型)の和集合を除く
#   ※ scrublet の filter_doublets を済ませた data に対して実行
is_amulet = data.obs_names.isin(amulet_bc)
data = data[~is_amulet].copy()
💡 R が使えるなら scDblFinder が手軽
AMULET 本家は Java+Python のコマンドラインですが、R の scDblFinder に AMULET を再実装した amulet() 関数があり、フラグメントファイルを渡すだけで同等以上の結果が得られます(Germain et al., 2021)。R を併用できる環境ならこちらが簡単です。
⚠️ ArchR のダブレット検出には注意
比較検証では、ArchR のダブレット検出は他手法より精度が劣るという報告があります。フレームワークにArchRを使う場合でも、ダブレット検出は SnapATAC2(scrublet)や scDblFinder、AMULET を使う方が無難です。

まとめ


  • ダブレットは偽のクラスタ・軌道を作るので除く。
  • ATAC固有の手がかり=1位置に最大2本。3本以上が多い細胞はダブレット(AMULETの原理)。
  • 本サイトは SnapATAC2 の scrublet を既定に。厳密にやるなら AMULET を併用

関連記事


参考文献


  • Thibodeau, A., Eroglu, A., McGinnis, C. S., et al. (2021). AMULET: a novel read count-based method for effective multiplet detection from single nucleus ATAC-seq data. Genome Biology, 22, 252. doi:10.1186/s13059-021-02469-x
  • Wolock, S. L., Lopez, R., & Klein, A. M. (2019). Scrublet: Computational Identification of Cell Doublets in Single-Cell Transcriptomic Data. Cell Systems, 8(4), 281–291. doi:10.1016/j.cels.2018.11.005
  • Germain, P.-L., Lun, A., Garcia Meixide, C., Macnair, W., & Robinson, M. D. (2021). Doublet identification in single-cell sequencing data using scDblFinder. F1000Research, 10, 979. doi:10.12688/f1000research.73600.2
  • Zhang, K., Zemke, N. R., Armand, E. J., & Ren, B. (2024). A fast, scalable and versatile tool for analysis of single-cell omics data. Nature Methods, 21(2), 217–227. doi:10.1038/s41592-023-02139-9

コメント

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