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細胞ぶん(=ダブレット)の証拠になります。
この「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()
AMULET 本家は Java+Python のコマンドラインですが、R の scDblFinder に AMULET を再実装した
amulet() 関数があり、フラグメントファイルを渡すだけで同等以上の結果が得られます(Germain et al., 2021)。R を併用できる環境ならこちらが簡単です。比較検証では、ArchR のダブレット検出は他手法より精度が劣るという報告があります。フレームワークにArchRを使う場合でも、ダブレット検出は SnapATAC2(scrublet)や scDblFinder、AMULET を使う方が無難です。
まとめ
- ダブレットは偽のクラスタ・軌道を作るので除く。
- ATAC固有の手がかり=1位置に最大2本。3本以上が多い細胞はダブレット(AMULETの原理)。
- 本サイトは SnapATAC2 の scrublet を既定に。厳密にやるなら AMULET を併用。
関連記事
- scATAC-seq の QC
- scATAC-seq のピークコール
- scATAC-seq の次元削減とクラスタリング
- scATAC-seq 前処理の全体像
- scRNA-seq解析:ダブレット(2細胞)の検出 ― scrublet
参考文献
- 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


コメント