利用massdatabase包提取物种KEGG通路与基因/化合物对应信息

最近手头处理一批代谢组数据, 想基于几十个关键差异代谢物代谢物进行下KEGG富集,能想到有两种方式解决,一种常用方式就是基于MetaboAnalyst在线富集,另一种就是解析出该物种的通路与代谢物的对应关系文件,然后用Y叔叔的Clusterprofiler包富集。经一番搜索,massdatabase包可帮我们轻松获得这个文件。

一、MetaboAnalysis

网站功能是基于R语言实现,也有同名的R包可供使用。

网址:https://www.metaboanalyst.ca/

image-20221202150612635
image-20221202151547209
image-20221202151731009

这种方式比较简单粗暴,支持的ID类型有化合物名称, HMDB ID, KEGG ID, PubChem CID等等,但其弊端是富集分析基于的通路为人类的代谢通路,因此最后可能会富集到一些奇怪的结果。

二、massdatabase包

image-20221202162609872

massDatabase一共支持12个在线数据库, 支持下载物种的化合物/通路数据库并将它们转换为特定的数据结构,然后我们结合clusterprofiler包从而非常方便的进行代谢物富集分析。这里以研究物种—弓形虫(Toxoplasma gondii,缩写为tgo)的代谢通路和化合物数据库为例。

KEGG Organisms缩写查询:https://www.genome.jp/kegg/catalog/org_list.html

下载tgo的kegg通路数据库

主要利用3个函数功能 :1. download_kegg_pathway 2. read_kegg_pathway 3. convert_kegg2metpath ,分别进行下载,读取和转换作用。

#安装R包
remotes::install_github("tidymass/massdatabase", dependencies = TRUE)

## 下载tgo的通路代谢物关系
download_kegg_pathway(path = "kegg_tgo_pathway",
                      sleep = 1,
                      organism = "tgo")
                      
## 然后读取所下载的数据    
tgo_data <- 
  read_kegg_pathway(path = "kegg_tgo_pathway")
class(tgo_data)

## 转变数据库形式
kegg_pathway_database <-
  convert_kegg2metpath(data = tgo_data, path = ".")
  
  ##查看有多少通路
 length(unlist(kegg_pathway_database@pathway_name))
[1] 104

观察一下kegg_pathway_database的结果,共有104个通路,我们只需要关注这5个内容即可,一个最简单的思路就是通过for循环遍历将各个通路的信息提取出来,当然也可以用lapply等函数解析列表。

image

但是要注意一个细节,就是有的通路是没有gene或者compound对应, 也没有前两层级的KEGG信息,因此这部分需要我们for循环中多添加一个条件,如果遍历到这几行,我们赋值为None。

image

提取通路与gene对应信息

path_num <- c(68:76)  ## 排除没有对应gene的几个通路
## 提取1到67 77 到104的通路
result1 <- NULL
for (i in 1:104) {
  a <-  tgo_data[[i]]$pathway_id  # 提取id
  b <- tgo_data[[i]]$pathway_name # 提取名称
  e <- tgo_data[[i]]$gene_list # 提取gene对应关系
 
 c <- tgo_data[[i]]$describtion
 if ( i %in% path_num){
   d <-  'None;None'
 }else {
    d <- tgo_data[[i]]$pathway_class  # 提取前两层级注释
    Pathway_re <- e%>% mutate(pathway_id = a,
                              pathway_name = b,
                              pathway_class= d) %>%
      separate(pathway_class,into =c("Pathway1","Pathway2"),sep = ';',remove = FALSE)  ##前两层分开
      result1 <- rbind(result1,Pathway_re)}
}
write.table(result1, 'tgo_KEGG_path.tsv', sep = '\t',row.names = FALSE,quote = FALSE)

gene、注释及前几层通路信息如下:

image-20221202160712792

提取通路与化合物对应信息

result2 <- NULL
com_num <- c(38,68:76,78:94,96,98,103)  ## 排除没有对应化合物的几个通路
for (i in 1:104) {
  a <-  tgo_data[[i]]$pathway_id  # 提取id
  b <- tgo_data[[i]]$pathway_name # 提取名称
  f <- tgo_data[[i]]$compound_list # 提取化合物对应关系
  # c <- tgo_data[[i]]$describtion
  if ( i %in% com_num){
    d <-  'None;None'
  }else {
    d <- tgo_data[[i]]$pathway_class
  Compound_re <- f %>% mutate(pathway_id = a,
                             pathway_name = b,
                             pathway_class= d)%>%
    separate(pathway_class,into =c("Pathway1","Pathway2"),sep = ';',remove = FALSE)
  result2 <- rbind(result2,Compound_re)
  }
}
write.table(result2, 'tgo_KEGG_com.tsv', sep = '\t',row.names = FALSE,quote = FALSE)

化合物、名称及通路对应信息如下:

image-20221202160655558

代谢物富集分析

有了上面的compound对应信息,我们只需提取其中几列作为背景文件轻松用clusterprofiler包进行富集。

library(clusterProfiler)
##制作背景文件
com_ano <- result2 %>% select(KEGG.ID,pathway_id,pathway_name)
## 富集ID
gene_select <- sample(com_ano$KEGG.ID,100)

#KEGG 富集分析
#默认以所有注释到 KEGG 的基因为背景集,也可通过 universe 参数指定其中的一个子集作为背景集
#默认以 p<0.05 为标准,Benjamini 方法校正 p 值,q 值阈值 0.2
#默认输出 top500 富集结果
kegg_rich <- enricher(gene = gene_select,
                      TERM2GENE = com_ano[c('pathway_id', 'KEGG.ID')], 
                      TERM2NAME = com_ano[c('pathway_id', 'pathway_name')],
                      pvalueCutoff = 0.05, 
                      pAdjustMethod = 'BH', 
                      qvalueCutoff = 1, 
                      maxGSSize = 500)
dotplot(kegg_rich)  #富集气泡图 
cnetplot(kegg_rich) #网络图展示富集功能和基因的包含关系
emapplot(kegg_rich) #网络图展示各富集功能之间共有基因关系
heatplot(kegg_rich)
image

massdatabase包更多参数介绍见详细文档及文献

你可能感兴趣的:(利用massdatabase包提取物种KEGG通路与基因/化合物对应信息)