利用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包更多参数介绍见详细文档文献

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,968评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,601评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,220评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,416评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,425评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,144评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,432评论 3 401
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,088评论 0 261
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,586评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,028评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,137评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,783评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,343评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,333评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,559评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,595评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,901评论 2 345

推荐阅读更多精彩内容