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

简介: 最近手头处理一批代谢组数据, 想基于几十个关键差异代谢物代谢物进行下KEGG富集,能想到有两种方式解决,一种常用方式就是基于MetaboAnalyst在线富集,另一种就是解析出该物种的通路与代谢物的对应关系文件,然后用Y叔叔的Clusterprofiler包富集。经一番搜索,massdatabase包可帮我们轻松获得这个文件。作者:凯凯何_Boy链接:https://www.jianshu.com/p/654784925903来源:简书著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

一、MetaboAnalysis

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

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

fed9c8ceac5b7851ec4b7088c99f565.png

acafaf0629cc0eab926dc816983c07f.png

8e33dcfea35fbb31c94cbc53b5071b1.png

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

二、massdatabase包

5d2be0106150e0e7a915c9b8ec5dbb6.png

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等函数解析列表。

df83513795da1a7c130bbc1ba0f1091.png

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

b1bb151411e7398aefd386f996a85b0.png

提取通路与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、注释及前几层通路信息如下:

0241039ff4e4890d83a08c4449c05af.png

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

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)

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

6b8c8e57d9b399a691592e174700631.png

代谢物富集分析

有了上面的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)

6020c7879a468d806c689490a972188.png

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

相关文章
|
1月前
|
存储 算法 数据可视化
单细胞分析 | Cicero+Signac 寻找顺式共可及网络
单细胞分析 | Cicero+Signac 寻找顺式共可及网络
25 0
|
6月前
|
数据可视化
数量生态学冗余分析(RDA)分析植物多样性物种数据结果可视化|数据分享
数量生态学冗余分析(RDA)分析植物多样性物种数据结果可视化|数据分享
|
数据可视化
WGCNA 简明指南|2. 模块与性状关联分析并识别重要基因
WGCNA 简明指南|2. 模块与性状关联分析并识别重要基因
1307 0
WGCNA 简明指南|2. 模块与性状关联分析并识别重要基因
|
传感器 编解码 算法
【航空和卫星图像中检测建筑物】使用gabor特征和概率的城市区域和建筑物检测研究(Matlab代码实现)
【航空和卫星图像中检测建筑物】使用gabor特征和概率的城市区域和建筑物检测研究(Matlab代码实现)
105 0
|
机器学习/深度学习 算法 智慧交通
智慧交通day04-特定目标车辆追踪02:Siamese网络+单样本学习
Siamese network就是“连体的神经网络”,神经网络的“连体”是通过共享权值来实现的,如下图所示。共享权值意味着两边的网络权重矩阵一模一样,甚至可以是同一个网络。
142 0
智慧交通day04-特定目标车辆追踪02:Siamese网络+单样本学习
|
数据可视化 数据库 Python
scRNA分析 | 解决可能的报错,从0开始教你完成细胞通讯分析-cellphoneDB
scRNA分析 | 解决可能的报错,从0开始教你完成细胞通讯分析-cellphoneDB
642 0
|
存储 数据可视化 Shell
单细胞免疫组库VDJ|从数据下载开始完成cellranger vdj分析(1)
单细胞免疫组库VDJ|从数据下载开始完成cellranger vdj分析(1)
466 0
|
算法 数据可视化
跟NBT学Scissor| bulk RNA + scRNA鉴定与目标表型相关的细胞亚群
跟NBT学Scissor| bulk RNA + scRNA鉴定与目标表型相关的细胞亚群
337 0
|
数据挖掘 数据库 网络可视化
SFINX: 一个基于Shiny部署的鉴定蛋白互作关系平台
目前研究蛋白质互作方法有很多,传统的方法是将天然蛋白免疫沉淀与质谱检测结合(CoIP-MS),另外流行的还有亲和纯化/质谱法(AP-MS),与CO-IP类似,它使用感兴趣的诱饵蛋白(bait proteins)上的表位标签和捕获探针来识别协同的猎物蛋白,不需要为每个新的诱饵蛋白购买或者开发特定抗体,得到的融合蛋白可以用链霉亲和素(strep)磁珠来亲和纯化,用生物素洗脱最终得到蛋白复合物。
138 0
|
机器学习/深度学习
差异基因通路富集分析的统计学假设-个人见解分享
本文主要分享了学习 “差异基因通路富集中使用的 超几何检验方法背后意义” 的个人见解
281 0