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

相关文章
|
数据挖掘 数据格式
跟着Cell学作图 | 6.时间序列分析(Mfuzz包)
这篇2020年发表在cell上关于新冠的组学文章里面有大量的生信内容。今天带大家复现其中的一个Supplemental Figure:时间序列分析图。
1750 0
跟着Cell学作图 | 6.时间序列分析(Mfuzz包)
|
PyTorch 算法框架/工具 芯片
新手入门:DGL在昇腾上的安装问题
本文介绍了在aarch64架构和Python 3.10环境下安装DGL(Deep Graph Library)的过程。首先通过`uname -a`确认硬件架构,接着使用`python --version`检查Python版本。为确保兼容性,从指定链接下载适合的whl包或通过pip安装dgl。过程中遇到了torchdata版本不兼容的问题,通过降级torchdata至0.7.1版本解决。此外,针对NPU芯片适配,重新安装了与CANN 8.0.RC2兼容的torch和torch_npu组件。最终成功导入dgl包并准备进行模型训练验证。
1742 14
|
机器学习/深度学习 人工智能 分布式计算
算法金 | 最难的来了:超参数网格搜索、贝叶斯优化、遗传算法、模型特异化、Hyperopt、Optuna、多目标优化、异步并行优化
机器学习中的超参数调优是提升模型性能的关键步骤,包括网格搜索、随机搜索、贝叶斯优化和遗传算法等方法。网格搜索通过穷举所有可能的超参数组合找到最优,但计算成本高;随机搜索则在预设范围内随机采样,降低计算成本;贝叶斯优化使用代理模型智能选择超参数,效率高且适应性强;遗传算法模拟生物进化,全局搜索能力强。此外,还有多目标优化、异步并行优化等高级技术,以及Hyperopt、Optuna等优化库来提升调优效率。实践中,应结合模型类型、数据规模和计算资源选择合适的调优策略。
1453 0
算法金 | 最难的来了:超参数网格搜索、贝叶斯优化、遗传算法、模型特异化、Hyperopt、Optuna、多目标优化、异步并行优化
|
存储 Linux 网络安全
|
并行计算 算法 数据可视化
r语言中对LASSO回归,Ridge岭回归和弹性网络Elastic Net模型实现1
r语言中对LASSO回归,Ridge岭回归和弹性网络Elastic Net模型实现
r语言中对LASSO回归,Ridge岭回归和弹性网络Elastic Net模型实现1
|
数据可视化
R实战 | OPLS-DA(正交偏最小二乘判别分析)筛选差异变量(VIP)及其可视化
R实战 | OPLS-DA(正交偏最小二乘判别分析)筛选差异变量(VIP)及其可视化
5256 0
R实战 | OPLS-DA(正交偏最小二乘判别分析)筛选差异变量(VIP)及其可视化
|
数据挖掘 atlas 数据库
TCGA数据挖掘 | Xena - TCGA数据下载
TCGA数据挖掘 | Xena - TCGA数据下载
1678 1
|
数据可视化 数据挖掘 Python
|
数据可视化 数据挖掘 Python
跟着Nature Communications学数据分析:基因组水平的比对鉴定结构变异
跟着Nature Communications学数据分析:基因组水平的比对鉴定结构变异
|
存储
【NI Multisim 14.0虚拟仪器设计——放置虚拟仪器仪表(函数发生器)】
🍍放置虚拟仪器仪表 NI Multisim 14.0 提供了多种仪器仪表,存储在集成库中,供用户选择使用。下面详细介绍常用的仪器仪表。 🍉函数发生器 函数发生器是可提供正弦波、三角波、方波3种不同波形的信号的电压信号源,如图所示为函数发生器图标。 选择菜单栏中的“仿真”→“仪器”→“函数发生器”命令,或单击“仪器”工具栏中的“函数发生器”按钮,放置函数发生器图标,双击该图标,弹出函数发生器的面板,如图所示。 该对话框的各个部分的功能如下所示。 (1)“波形”选项组下的3个按钮用于选择输出波形,分别为正弦波、三角波和方波。 (2)“信号选项”选项组,内容如下。 频率:设置输出信号的频率。
1555 0
【NI Multisim 14.0虚拟仪器设计——放置虚拟仪器仪表(函数发生器)】