scATAC-seq のアノテーション① 遺伝子活性スコア ─ 開閉を発現の代わりに使う

scATAC-seq
📚 この記事について
アノテーションの最も基本のルートです。遺伝子まわりの開閉を「発現の代わり」にして、RNAと同じ作法で細胞型を付けます。
🔙 前の記事scATAC-seq のアノテーション全体像
🔜 次の記事RNA参照からのラベル転移
📌 前提:クラスタリングまでの前処理が済んでいること

scATAC-seq(single-cell ATAC-seq/核を使う場合は snATAC-seq)は発現を測っていないため、マーカー遺伝子がそのまま使えません。この記事では、開閉を発現の代わりにする「遺伝子活性スコア」で細胞型を付ける方法を、実際のコードと検証手順とともに押さえます。

1. 遺伝子活性スコアとは


ATAC は発現を測っていないので、マーカー遺伝子がそのまま使えません。そこで、遺伝子まわりの開閉を「発現の代わり」にするのが遺伝子活性スコアです。遺伝子の制御領域(TSS 周辺、必要なら遺伝子body全体)にある Tn5 挿入を数え、その遺伝子の活性とします。

図1:遺伝子活性スコアの作り方(制御領域の挿入を数える)
図1:遺伝子活性スコアの作り方(制御領域の挿入を数える)

開いていれば発現できるという近似で、疑似的な「細胞×遺伝子」行列を作ります。これができれば、あとは scRNA-seq同じマーカー・同じ作法でアノテーションできます。

2. 作り方(コード)


SnapATAC2 の make_gene_matrix で行列を作り、あとは Scanpy に渡します。この遺伝子活性スコアをまとめた行列は疎なので、MAGICという処理 で平滑化すると見やすくなります(MAGIC:van Dijk et al., Cell, 2018)。MAGICはScanpyに実装されているので、以下のプログラムで実行可能です。

python
import snapatac2 as snap, scanpy as sc

# 1. 遺伝子活性行列(細胞×遺伝子)を作る
gene_mat = snap.pp.make_gene_matrix(data, gene_anno=snap.genome.hg38)

# 2. RNAと同じ前処理(フィルタ・正規化・対数化)
sc.pp.filter_genes(gene_mat, min_cells=5)
sc.pp.normalize_total(gene_mat)
sc.pp.log1p(gene_mat)

# 3. 疎なのでMAGICで平滑化(要 pip install magic-impute)
sc.external.pp.magic(gene_mat, solver="approximate")

# 4. 可視化用に本体のUMAP座標とクラスタを移す
gene_mat.obsm["X_umap"] = data.obsm["X_umap"]
gene_mat.obs["leiden"] = data.obs["leiden"]

3. マーカーで細胞型を決め、UMAPで検証する


マーカー遺伝子の活性を UMAP に投影し、どのクラスタがどの細胞型かを判断します。

python
# マーカー遺伝子の活性をUMAPに投影(例:T細胞・B細胞・単球・NK)
markers = ["CD3D", "MS4A1", "CD14", "NKG7"]
sc.pl.umap(gene_mat, color=markers)

このとき、ただ色を見るだけでなく必ず次の3点を確認します。dotplot だけでなく、この UMAP 投影も合わせて行うのが本サイトの方針です。

図2:マーカーをUMAPに投影して検証(良い例/怪しい例)
図2:マーカーをUMAPに投影して検証(良い例/怪しい例)
💡 マーカー投影で確認する3点
そのマーカーが目的のクラスタだけに出ているか(他クラスタにも出ていないか)。 クラスタ内の全細胞に出ているか、一部だけか、低くないか。 複数クラスタにまたがって出ていないか。良い例(左図)のように1クラスタに集中していれば信頼できます。

4. 検証で異常が出たら


⚠️ ありえない細胞型にマーカーが出たら、前処理を疑う
もし組織学的にありえない細胞型にマーカーが出ている場合は、アノテーションを疑う前に QC不良ダブレット混入を疑ってください。マーカーが複数クラスタに散らばる(右図)ときも同様です。その場合は前処理(QC・ダブレット除去)に戻って見直すのが正解です。

5. 注意点


  • あくまで近似:開いていても発現しない遺伝子(準備状態=poised)もあります。活性スコアは RNA そのものよりぼやけます。crisp でなくても不思議ではありません。
  • MAGICは諸刃:平滑化で見やすくなる一方、過度にかけると陽性を広げすぎます。判断は元の分布も併せて。
  • プロモーターが開いていない遺伝子:遺伝子body主体で発現する遺伝子は、TSS中心の既定設定だと拾いにくいことがあります(include_gene_body で調整)。

まとめ


  • 遺伝子活性スコア=制御領域の開閉を発現の代わりにする近似。RNA風の行列になる。
  • make_gene_matrix → 正規化 → MAGIC → マーカーを UMAP 投影。
  • 付けた型は必ず3点で検証。ありえない型に出たら前処理を疑う。

関連記事


参考文献


  • van Dijk, D., Sharma, R., Nainys, J., et al. (2018). Recovering Gene Interactions from Single-Cell Data Using Data Diffusion. Cell, 174(3), 716–729. doi:10.1016/j.cell.2018.05.061
  • 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をコピーしました