この記事のゴール
DE 遺伝子を生物学的な言葉(経路・機能・転写因子)に翻訳する3つのアプローチ――ORA/GSEA/活性推定――の違いと使い分け、Python での実行を理解すること。
なぜエンリッチメントが必要か
DE で「変化した遺伝子のリスト」が出ても、それだけでは「生物学的に何が起きたか」は分かりません。そこで、既知の遺伝子セット(GO、KEGG/Reactome 経路、転写因子の標的群など)に照らし、「どの機能・経路がまとまって動いたか」を読み取ります。これが機能エンリッチメントです。
3つのアプローチ ― 入力が違う
エンリッチメントには大きく3系統があり、必要な入力が異なります。
- (a) ORA(過剰代表解析):有意 DE 遺伝子のリストが、ある遺伝子セットに偏って含まれるかをFisher検定。しきい値で区切ったリストが必要。
- (b) GSEA(遺伝子セット濃縮解析):全遺伝子を統計量で順位づけし、セットがランキングの上位/下位に偏るかを見る。しきい値が不要。
- (c) 活性推定(フットプリント):重み付きの応答シグネチャ(経路は PROGENy、TF は CollecTRI/DoRothEA)を使い、経路・転写因子の活性を推定。単一細胞ごとにも出せる。
(a) ORA ― 遺伝子リストの過剰代表
有意 DE 遺伝子のリストを、GO/KEGG などに照らします。背景(universe)の選び方が結果を左右します。
pythonimport gseapy as gp
# 有意な DE 遺伝子(前記事の res から:上方制御の例)
sig_genes = res[(res["padj"] < 0.05) & (res["log2FoldChange"] > 1.0)].index.tolist()
# 背景=その細胞型で「発現していた」全遺伝子(重要:全ゲノムではない)
background = res.index.tolist()
enr = gp.enrichr(
gene_list=sig_genes,
gene_sets=["GO_Biological_Process_2023", "KEGG_2021_Mouse"],
background=background,
outdir=None,
)
enr.results.head() # Term, Adjusted P-value, Overlap, Genes ...
⚠️ 背景は「発現遺伝子」にする
背景に全ゲノムを使うと、「そもそもこの細胞で発現する遺伝子」の偏りを拾って偽の有意が出ます。背景はその文脈で発現していた遺伝子に揃えます。
(b) GSEA ― 順位づけ全体を使う
しきい値で区切らず、全遺伝子を統計量で順位づけして使います。弱い変化が多数集まる経路を拾えるのが利点です。
pythonimport gseapy as gp
# 全遺伝子を統計量で順位づけ(cutoff 不要)。例:DESeq2 の Wald 統計量 stat
rnk = res[["stat"]].dropna().sort_values("stat", ascending=False)
pre = gp.prerank(
rnk=rnk,
gene_sets="MSigDB_Hallmark_2020",
min_size=15, max_size=500, permutation_num=1000,
)
pre.res2d.head() # Term, NES, FDR q-val ...
💡 順位づけの量が肝
GSEA は「並び」に意味を持たせる必要があります。方向と強さを反映する量(Wald 統計量や符号付き −log10 p)で並べます。log2FC のみだと分散の大きい遺伝子に引っ張られることがあります。
(c) 活性推定 ― 経路・転写因子の活性
遺伝子セットの「重なり」ではなく、重み付きの応答シグネチャで活性を推定します。単一細胞ごとに経路・TF 活性を出せるため、scRNA-seq と相性が良い方法です。
pythonimport decoupler as dc
# 経路活性:PROGENy(応答遺伝子に重みづけしたシグネチャ)
progeny = dc.get_progeny(organism="mouse", top=500)
dc.run_mlm(mat=adata, net=progeny)
adata.obsm["mlm_estimate"] # 細胞ごとの経路活性
# 転写因子活性:CollecTRI(高信頼の TF–標的)
collectri = dc.get_collectri(organism="mouse")
dc.run_ulm(mat=adata, net=collectri)
adata.obsm["ulm_estimate"] # 細胞ごとの TF 活性
🔧 環境メモ:pip install gseapy decoupler。gseapy は Enrichr/MSigDB のライブラリ名を指定します(生物種に注意:上記は Mouse 版)。decoupler の関数名(get_progeny / get_collectri / run_mlm / run_ulm)はバージョンで変わることがあるため、公式チュートリアルに合わせてください。pseudobulk の統計量を入力にすればサンプルレベルの活性も出せます。転写因子活性をさらに掘り下げるなら 遺伝子制御ネットワーク・転写因子活性(GRN/TF activity) も参照。
遺伝子セット資源とツールの早見表
| データリソース | 内容 | 主な用途 |
|---|---|---|
| MSigDB(Hallmark/C2/C5…) | 厳選された遺伝子セット(GO/KEGG/Reactome 含む) | ORA・GSEA |
| GO(BP/MF/CC) | 遺伝子オントロジー | ORA・GSEA |
| KEGG / Reactome | 代謝・シグナル経路 | ORA・GSEA |
| PROGENy | 経路の「応答遺伝子」シグネチャ(重みつき) | 活性推定(経路) |
| CollecTRI / DoRothEA | 転写因子–標的(重みつき) | 活性推定(TF) |
| ツール | 言語 | 手法 |
|---|---|---|
| GSEApy | Python | ORA(enrichr)・GSEA(prerank) |
| decoupler | Python | 活性推定(PROGENy/CollecTRI ほか) |
| g:Profiler | Python/Web | ORA |
| fgsea | R | GSEA |
落とし穴
⚠️ つまずきやすい点
– ORA の背景(universe):全ゲノムではなく発現遺伝子を背景に。ここを誤ると結論が変わる。
– GSEA の順位づけ:方向と強さを反映する量で並べる(Wald 統計量など)。
– 多重比較:多数の遺伝子セットを試すので FDR 補正必須。
– 遺伝子セットの偏り:よく研究された遺伝子・経路に偏る。GO は階層で冗長になりやすい。
– エンリッチメント ≠ 因果:有意でも、その経路が原因とは限らない。
まとめ
- DE 遺伝子は、既知の遺伝子セットに照らして生物学的に解釈する。
- 3アプローチ:(a) ORA(リスト+背景・過剰代表)、(b) GSEA(順位づけ全体・しきい値不要)、(c) 活性推定(重み付きシグネチャで経路・TF 活性、単一細胞ごとも可)。
- Python では GSEApy(ORA/GSEA)と decoupler(活性推定)が中心。
- 注意:ORA の背景は発現遺伝子、GSEA は意味のある順位づけ、多重比較補正、マウス/ヒトのオーソログ、エンリッチメント≠因果。
次の記事:細胞組成の差(differential abundance) — 条件間で細胞型の割合が変わるかを、Milo / scCODA で検定する方法に進みます。
関連記事
下流解析の地図と前後
- 📖 差次的発現(DE):エンリッチメントの入力となる DE 遺伝子の出し方(前の記事)
- 📖 細胞組成の差(differential abundance):細胞型の割合の変化を検定(次の記事)
- 📖 下流解析の全体像:下流解析全体の地図
活性推定の発展先
- 📖 遺伝子制御ネットワーク・転写因子活性(GRN/TF activity):(c) の TF 活性をネットワークとして掘り下げる
参考文献
- Subramanian, A., Tamayo, P., Mootha, V. K., et al. (2005). Gene set enrichment analysis: A knowledge-based approach for interpreting genome-wide expression profiles. PNAS, 102, 15545–15550. doi:10.1073/pnas.0506580102
- Liberzon, A., Birger, C., Thorvaldsdóttir, H., et al. (2015). The Molecular Signatures Database (MSigDB) hallmark gene set collection. Cell Systems, 1, 417–425. doi:10.1016/j.cels.2015.12.004
- Fang, Z., Liu, X., & Peltz, G. (2023). GSEApy: a comprehensive package for performing gene set enrichment analysis in Python. Bioinformatics, 39, btac757. doi:10.1093/bioinformatics/btac757
- Kuleshov, M. V., Jones, M. R., Rouillard, A. D., et al. (2016). Enrichr: a comprehensive gene set enrichment analysis web server 2016 update. Nucleic Acids Research, 44, W90–W97. doi:10.1093/nar/gkw377
- Badia-i-Mompel, P., Vélez Santiago, J., Braunger, J., et al. (2022). decoupleR: ensemble of computational methods to infer biological activities from omics data. Bioinformatics Advances, 2, vbac016. doi:10.1093/bioadv/vbac016
- Schubert, M., Klinger, B., Klünemann, M., et al. (2018). Perturbation-response genes reveal signaling footprints in cancer gene expression. Nature Communications, 9, 20. doi:10.1038/s41467-017-02391-6
- Müller-Dott, S., Tsirvouli, E., Vázquez, M., et al. (2023). Expanding the coverage of regulons from high-confidence prior knowledge for accurate estimation of transcription factor activities. Nucleic Acids Research, 51, 10934–10949. doi:10.1093/nar/gkad841


コメント