clusterProfiler — R でエンリッチメント解析
https://bioconductor.org/packages/release/bioc/html/clusterProfiler.html
::install("clusterProfiler")
BiocManagerlibrary(clusterProfiler)
エンリッチメント解析には大きく二つの方法がある:
- Over Representation Analysis
- 何らかの解析をして得られた興味のある遺伝子群にどんな機能が濃縮しているかをみる。
- 興味のある遺伝子/ない遺伝子が明確に二分できるとき
- Gene Set Enrichment Analysis
- 何らかの解析をした結果、全遺伝子に P 値などのスコアがつく場合、 そのスコアの順に遺伝子を並べて上位/下位の遺伝子にどんな機能が濃縮しているかをみる。
-
「
p < 0.05
で切ってもいいけどp = 0.051
の遺伝子は本当に無関係?」みたいな問題に対処
GO enrichment analysis
GO (Gene Ontology) は、ある遺伝子がどんな機能を持っているかを共通の語彙でタグづけしたもの。 もっとも大きく分けて以下の3つの分類がある:
- Biological Process (BP)
- 遺伝子産物がどんな生物学的機能やパスウェイに属するか
- Cellular Component (CC)
- 遺伝子産物が細胞内のどこに局在するか
- Molecular Function (MF)
- 遺伝子産物が分子としてどういう機能をもつか
GO の情報は別途ダウンロードする。例えばヒトなら:
::install("org.Hs.eg.db")
BiocManagerlibrary(org.Hs.eg.db)
GO over-representation analysis
data(geneList, package = "DOSE") # サンプルデータ
= names(geneList)[abs(geneList) > 2]
gene
= enrichGO(
ego
gene,OrgDb = org.Hs.eg.db,
keyType = "ENTREZID",
ont = "MF",
pvalueCutoff = 0.05,
pAdjustMethod = "BH",
universe,qvalueCutoff = 0.2,
minGSSize = 10,
maxGSSize = 500,
readable = FALSE,
pool = FALSE
)= ego@result
ego_result View(ego_result)
ont
-
"BP"
,"CC"
,"MF"
,"ALL"
から選ぶ pvalueCutoff
,qvalueCutoff
- それぞれ与えた P 値、Q 値以下の GO を表示する。
-
ここで設定してもいいけど、ここはとりあえず
1
にしておいて、ego@result
を格納してから|> dplyr::filter(qvalue < 0.1)
とかする方が柔軟では。 universe
- バックグラウンドの遺伝子ベクタ
-
指定しないときは
OrgDb
の全遺伝子が使われる。 minGSSize
,maxGSSize
- いくつ以上/以下の遺伝子が紐づく GO までを使う。
readable
-
TRUE
にすると ENTREZID を遺伝子シンボルに変換する。
GO Gene Set Enrichment Analysis
data(geneList, package = "DOSE")
# 渡す `geneList` はスコアの降順で並んでいる必要がある。
= gseGO(
ego
geneList,ont = "BP",
OrgDb = org.Hs.eg.db,
keyType = "ENTREZID",
exponent = 1,
minGSSize = 10,
maxGSSize = 500,
eps = 1e-10,
pvalueCutoff = 0.05,
pAdjustMethod = "BH",
verbose = TRUE,
seed = FALSE,
by = "fgsea",
scoreType = "pos"
)= ego@result
ego_result View(ego_result)
scoreType
-
"pos"
ならソートした上位、"neg"
なら下位に濃縮する GO をみる。 (ドキュメントには載ってない?)
KEGG enrichment analysis
KEGG (Kyoto Encyclopedia of Genes and Genomes) は、 主にモデル生物における遺伝子やタンパク質の分子間ネットワークに関する情報を体系化したデータベース。
利用可能な生物種を探す:
search_kegg_organism('hsa', by = 'kegg_code')
search_kegg_organism('Homo sapiens', by = 'scientific_name')
KEGG Organisms のページから探してもいい。
GO エンリッチメント解析と同様に、 興味のある遺伝子/ない遺伝子で区切る解析 (over-representation) と、 なんらかのスコアに基づいてソートした時に上位に濃縮するパスウェイを調べる解析 (gene set enrichment) がサポートされている。
KEGG pathway over-representation analysis
data(geneList, package = "DOSE") # サンプルデータ
<- names(geneList)[abs(geneList) > 2]
gene
<- enrichKEGG(
kk
gene,organism = "hsa",
keyType = "kegg",
pvalueCutoff = 0.05,
pAdjustMethod = "BH",
universe = geneList,
minGSSize = 10,
maxGSSize = 500,
qvalueCutoff = 0.2,
use_internal_data = FALSE
)= kk@result
kk_result View(kk_result)
KEGG pathway gene set enrichment analysis
data(geneList, package = "DOSE")
<- gseKEGG(
kk
geneList,organism = "hsa",
keyType = "kegg",
exponent = 1,
minGSSize = 10,
maxGSSize = 500,
eps = 1e-10,
pvalueCutoff = 0.05,
pAdjustMethod = "BH",
verbose = FALSE,
use_internal_data = FALSE,
seed = FALSE,
by = "fgsea",
scoreType = "pos"
)= kk@result
kk_result View(kk_result)
setReadable
enrichGO()
以外の関数には readable
オプションがない。
ENTREZID のままだとどの遺伝子か分かりにくい。 setReadable
は org.Hs.eg.db
とかから ID と gene_symbol の対応を取得して変換する。
library(org.Hs.eg.db)
= kk |> setReadable(OrgDb = org.Hs.eg.db, keyType = "ENTREZID") kk2
可視化
- https://yulab-smu.top/biomedical-knowledge-mining-book/enrichplot.html
- https://yulab-smu.top/biomedical-knowledge-mining-book/clusterprofiler-kegg.html#visualize-enriched-kegg-pathways
dotplot(kk2, showCategory = 10, title = "Enriched Pathways" , split=".sign")
# とか
cnetplot(kk2, showCategory = 5, categorySize = "pvalue")
# とか
パスウェイの図が欲しければ pathview
とか:
library("pathview")
pathview(
gene.data = geneList,
pathway.id = "hsa04110",
species = "hsa",
limit = list(gene = max(abs(geneList)), cpd = 1)
)