利用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包更多參數介紹見詳細文檔文獻

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容