scATAC-seq(single-cell ATAC-seq/核を使う場合は snATAC-seq)の次元削減では、疎で二値的な行列を低次元に圧縮してクラスタリングします。scRNA-seqではPCA→UMAPで次元削減しますが、scATAC-seqではPCAを行いません。ここでは「なぜ PCA を使わないのか」と、ツールごとの違いを正確に押さえます。
1. なぜ PCA をそのまま使わないのか
scATAC-seq の行列は値がほぼ 0/1 で極端に疎です。この形に PCA を当てると、第1軸が細胞型ではなくシーケンス深度(総フラグメント数)を拾ってしまい、さらに中心化でスパース性が壊れて計算も重くなります。そこで scATAC-seqでは、疎で二値的な行列に合った別の次元削減を使います。
2. 3ツールのアプローチは似て非なるもの
このscATAC-seqの次元削減工程は一般に「TF-IDF/LSI」と呼ばれますが、ツールごとに中身が違います。ここは正確に区別しておくと後で混乱しません。
| ツール | 重み付け | 次元削減 | 性質 |
|---|---|---|---|
| Signac | TF-IDF | SVD(=LSI) | 線形 |
| ArchR | TF-IDF | 反復LSI | 線形・反復 |
| SnapATAC2 | IDF | spectral embedding | 非線形・matrix-free |
Signac と ArchR は LSI(TF-IDF で重み付け → SVD で圧縮)系です。一方 SnapATAC2 は、IDF で重み付けした後に spectral embedding(スペクトル埋め込み) という非線形の次元削減を使います。目的は同じ(疎な行列を低次元にする)ですが、アルゴリズムが異なります(SnapATAC2:Zhang et al., Nature Methods, 2024/LSIの起源:Cusanovich et al., Science, 2015)。
セル間の類似度からグラフを作り、その構造(グラフラプラシアンの固有ベクトル)から低次元表現を得る手法です。SVDのような線形の圧縮ではなく非線形で、cosine距離を使う実装は細胞数に対して線形時間でスケールします。これが SnapATAC2 の高速・大規模の理由です。
3. 深度成分の扱いは「ツールで違う」
LSI では第1成分がシーケンス深度と強く相関しやすく、除外するのが慣例です。しかし SnapATAC2 の spectral embedding は各成分を固有値で重み付けするため、手動で第1成分を落とす操作は基本的に不要です。「第1成分を除外」を SnapATAC2 にそのまま持ち込まないよう注意してください。
4. クラスタリングまでの流れ
次元削減さえ済めば、その後は scRNA-seq とほぼ同じです。低次元表現から KNN グラフを作り、Leiden でクラスタリングし、UMAP で可視化します。
5. コード:SnapATAC2
python
# 前提:add_tile_matrix → select_features 済み
# 1. スペクトル埋め込み(次元削減)→ obsm['X_spectral']
snap.tl.spectral(data)
# 2. KNNグラフ → Leiden クラスタリング(obs['leiden'])
snap.pp.knn(data)
snap.tl.leiden(data)
# 3. UMAPで可視化
snap.tl.umap(data)
snap.pl.umap(data, color="leiden")
結果は obsm['X_spectral'](次元削減後の表現)、obs['leiden'](クラスタ)、obsm['X_umap'](可視化座標)に入ります。この leiden クラスタが、次のピークコールや細胞型アノテーションの単位になります。
6. 注意点
- select_features を先に:spectral は選択済みの特徴量を使うので、
add_tile_matrix → select_features → spectralの順で。 - クラスタの粗さは resolution で調整:
tl.leidenのresolutionを上げると細かく、下げると粗く分かれます。 - 成分数(n_comps):既定でおおむね十分ですが、大きなデータでは増やすと分離が良くなることがあります。
- UMAPは可視化専用:クラスタリングは UMAP座標ではなく、KNNグラフ(=X_spectral由来)で行います。UMAP上の見た目だけで判断しないこと。
まとめ
- ほぼ二値・超スパースなので PCAは不向き。ATAC専用の次元削減を使う。
- Signac/ArchR=LSI(線形)/SnapATAC2=spectral embedding(非線形)。目的は同じでも中身が違う。
- 「第1成分を落とす」は LSI の話。SnapATAC2 では不要。
- 次元削減後は KNN → Leiden → UMAP で、RNAとほぼ同じ。
関連記事
- scATAC-seq のデータ読み込みとデータ構造
- scATAC-seq のピークコール
- scATAC-seq の統合・バッチ補正
- scATAC-seq 前処理の全体像 ─ QC からクラスタリングまで
- scATAC-seq 解析ツールの選び方 ─ Signac・ArchR・SnapATAC2 を比較する
参考文献
- 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
- 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
- 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


コメント