研究に役立つ!enrichplotでGO解析を視覚化する方法【其の参】

皆様、調子はいかがでしょうか。アメリエフ解析チームのkutsuyです。
enrichplot を用いたGO解析結果の可視化について今回が最後の記事になります。

enrichplotでGO解析を視覚化する方法【其の壱】
enrichplotでGO解析を視覚化する方法【其の弐】
enrichplotでGO解析を視覚化する方法【其の参】←本記事

多くのプロットを紹介して参りましたが、「もっと早く知っていれば!」と痛感しております。
このGO解析記事は昔の自分にプレゼントするつもりで、バイオインフォマティクスを学ぶ途上にある皆様の為に書きました。 少しでも皆様のお役に立てればと願いつつ、今回も進めて参ります。 以下のサイトを引用しております。

動作環境

  • R version 4.3.0
    • DOSE v3.26.2
    • enrichplot v1.20.3
    • dplyr v1.1.4
    • ggupset v0.4.1
    • europepmc v0.4.3
    • cowplot v1.2.0

Upset plot の出力

つづきは、Upset plot からですね。こちらは1行だけのコマンドになっています。

> upsetplot(edo)

はい、いきなりエラーが出ました。。

Error in loadNamespace(x) : 
   ‘ggupset’ という名前のパッケージはありません 

ggupset というパッケージが必要なようです(書いておいてほしい)。 気を取り直してインストールとライブラリの読み込みです。

> install.packages("ggupset")
> library(ggupset)

再度、upsetplot 関数を実行してみましょう。

> upsetplot(edo)

Upset plot

元記事にもあるように、Cnet plot の代替として使えそうな図になっています。 有意なタームが複数あって、その中で遺伝子がどれくらい重複しているかを表しています。 また、後述のGSEA解析の結果を図示することも可能なようです。
元記事では、upsetplot(kk2) 、というコマンドを実行していますが、kk2 というオブジェクトはこれまで登場していないので、 皆様のお手元でもエラーになるかと思います(元記事の別項目で生成している可能性はありますが未確認です)。

ridgeline plot の出力

次は、ridgeline plot を作成してみましょう。 こちらも1行のコマンドで実行可能なようです。

> ridgeplot(edo2)

ridgeline plot

縦軸にGOタームが並び、横軸には enrichment score や遺伝子の logFC が該当します。 曲線は遺伝子のスコア分布を表す密度曲線となっています(ヒストグラムの滑らかなバージョンと考えるとわかりやすいです)。

gsea plot の出力

次は、gsea plot を作成してみましょう。 複数の図のうち、例として1つだけ作図してみます。

> gseaplot(edo2, geneSetID = 1, by = "runningScore", title = edo2$Description[1])

gsea plot

この図では、エンリッチメント解析で最も統計的に有意だった「tuberculosis」というタームに着目しています(元記事と異なるタームが表示されているのは、ツールのバージョンの違いによる可能性があります)。
GSEA解析の利点は、発現変動の有無にかかわらず、全遺伝子の情報を用いて解析できる点です。 横軸にはランク付けされた遺伝子が並び、縦軸はその遺伝子セットに対する累積エンリッチメントスコア(running score)を示しています。
この図からは、「tuberculosis に関連する遺伝子が、発現変動の大きい領域に偏って分布している」ことが示唆されます。

上記の図は gseaplot 関数で実行されていますが、gseaplot2 関数を使用して複数のタームの結果を同じ図に描画することもできますのでぜひトライしてみてください。 一例のコマンドを掲載しておきます。

> gseaplot2(edo2, geneSetID = 1:3)

gsea plot 2

遺伝子セット(GOターム)ごとに色合いが変わって非常に見やすい図かと思いました。
このような図を見ながらこの図が何を示しているのか、この図から何がわかって何がわからないのか、他の人に説明できるくらい自分の中で咀嚼することが重要です。
GSEA解析については改めて別記事にまとめようと考えておりますので、そちらもぜひご覧いただければ幸いです。

Pmcplot の出力

ついに、最後のプロットになりました。ここまで時には粘り強く読んでいただきありがとうございます。
Pmcplot です。 pmc は PubMed Central (PMC) のことで、PMCに登録されている論文数の傾向を可視化するためのツールです。

それでは実行してみましょう。

> terms <- edo$Description[1:5]

次の pmcplot 関数のところでエラーが出ました。

> p <- pmcplot(terms, 2010:2020)
Error in `map()`:
ℹ In index: 1.
Caused by error in `loadNamespace()`:
!  ‘europepmc’ という名前のパッケージはありません 
Run `rlang::last_trace()` to see where the error occurred.

どうやら pmcplot 関数が内部で使用している europepmc パッケージのインストールが必要らしいです(書いてほしい)。 インストールとライブラリの読み込みをします。

> install.packages("europepmc")
> library(europepmc)

先ほどのコマンドの続きから実行してみます。

> p <- pmcplot(terms, 2010:2020)
> p2 <- pmcplot(terms, 2010:2020, proportion=FALSE)

ここで、plot_grid 関数にかかるエラーが出ました。

> plot_grid(p, p2, ncol=2)
Error in plot_grid(p, p2, ncol = 2) : could not find function "plot_grid"

plot_grid 関数をこれまで使用していなかったので、すでに使用されていた方は経験されていたかもしれません。 これまで同様にインストールとライブラリの読み込みをします。 その後に、最後のコマンドも実行しておきます。

> install.packages("cowplot")
> library(cowplot)

> plot_grid(p, p2, ncol=2)

Pmc plot

ほぼ同等の図が無事に出力されました。見た目はかなり ggplot2 のデフォルトの折れ線グラフに近い気がします。
pmcplot 関数の引数の年:年の部分を近年に変更すると、最近のトレンドがわかりそうですね。

以上で第三回にわたり確認してきた enrichplot の概要については終了となります。
丁寧に実行を写経していただいた皆様、大変お疲れ様でした。
これまでの内容を簡単にまとめたいと思います。

🧩 構成

第1回 enrichDGN によるエンリッチメント解析の実行と barplot ⇒ barplot()

第2回 enrichplot による多様な可視化とエラー対処 ⇒ dotplot(), cnetplot(), heatplot(), treeplot(), emapplot()

第3回 補足的な可視化と生物学的背景の紹介 ⇒ upsetplot(), ridgeplot(), gseaplot(), pmcplot()

🎯 学びのポイント

  • enrichplot は ggplot2 ベースで柔軟な可視化が可能。

  • 各プロットにはそれぞれの意味があり、図を読む力=考察力が重要。

  • エラーや再現性の問題は、環境やバージョンの違いによることが多い。

  • 作図は手段であり、目的は生物学的な知見の発見。

皆様の enrichplot に対する解像度が上がりましたら幸いでございます。

ところで、急に話題は変わりますが、最近は気温が上がってきたせいか、蚊の姿を目にするようになりました。 実は私は蚊に狙われやすい体質なので、蚊にまつわるゲノムのお話をご紹介します(ご存じの方もいらっしゃると思います)。

世界の熱帯地域、特にアフリカではマラリアという病気が根絶しておらず、年間2億人が感染していると言われています。 マラリアはハマダラカという蚊によって媒介されます、つまりマラリア原虫を含む血液を保有する蚊に刺されることにより感染します。 マラリア原虫は体内で増殖し、赤血球に侵入して破壊・増殖を繰り返すことで病原性を持ちます。

一方で鎌状赤血球症という病気がありまして、こちらはヘモグロビン遺伝子の1塩基置換によって引き起こされます。 正常の赤血球の形(楕円形)ではなく不完全な鎌状の赤血球が体内で生成され、酸素運搬能力が低いため酸欠となります。 ホモ型の場合は重症な酸欠となり致命的なのですが、ヘテロ型の場合は生存することが可能であり、マラリアに対して耐性をもつことが知られています。

つまり、不完全な赤血球ではマラリアが発育できないので感染しにくいということになります。 よってマラリアが流行する地域では上記の1塩基置換が自然選択により保存されやすくなっていると理解されています。

バイオインフォのお仕事をしていて、つくづくゲノムって奥が深いなあと思う今日この頃でございます。

また気になる話題がありましたらブログを更新したいと思っております。
それでは皆様ごきげんよう。