FELLA:代谢组学富集分析软件介绍

image

导读

通路富集分析技术对于理解代谢组学数据背后的潜在生物学意义是非常有用的,它们的目的是根据代谢途径中所包含的先验知识,为受影响的代谢物提供上下游关系。然而,对广义代谢通路的解释仍然具有挑战性,因为路径之间会有重叠和交叉。

文献介绍

  • 原标题:FELLA: an R package to enrich metabolomics data
  • 译名:FELLA,一个代谢组学富集分析的R包
  • 期刊:《BMC Bioinformatics》
  • 作者:Sergio Picart-Armada(一作),Alexandre Perera Lluna(通讯作者)
  • 实验室主页:B2SLab
  • 单位:加泰罗尼亚理工大学等
  • 领域: 混合生物信息学&生物工程学、心血管疾病、代谢组学数据处理、软件开发应用

主要成果

本篇文章主要介绍了一个R包FELLA,基于前期分析得到的差异代谢物来构建基于网络的富集分析。结果包括代谢通路、模块、酶、反应及代谢物。那么除了能够提供通路列表,FELLA还能够生成输入代谢物相关的中间物质(如模块、酶、反应)。可以反映特定研究条件下代谢通路之间的交集以及靶向潜在的酶和代谢物。

工作流程

下面这幅图高度概括了该软件的一个使用流程

图1 R包FELLA的设计思路。「Ⅰ选择物种和数据库;Ⅱ代谢物list输入和算法的选择;Ⅲ结果的生成导出」
  1. Block Ⅰ:本地数据库
  2. Block Ⅱ:富集分析
  3. Block Ⅲ:结果导出

那么FELLA同时通过shiny包又具备了可交互的工作模式

包的下载及演示

包的下载


# 该包位于bioinformatics网站上

if (!requireNamespace("BiocManager", quietly = TRUE))
    install.packages("BiocManager")
BiocManager::install("FELLA", version = "3.8")

library(FELLA)  ##加载包

加载数据库

# 第一部分就是创建数据库,这里加载已经创建好的

data("FELLA.sample")
class(FELLA.sample)
## [1] "FELLA.DATA"
## attr(,"package")
## [1] "FELLA"
show(FELLA.sample)
## General data:
## - KEGG graph:
##   * Nodes:  670 
##   * Edges:  1677 
##   * Density:  0.003741383 
##   * Categories:
##     + pathway [2]
##     + module [6]
##     + enzyme [58]
##     + reaction [279]
##     + compound [325]
##   * Size:  366.9 Kb 
## - KEGG names are ready.
## -----------------------------
## Hypergeometric test:
## - Matrix is ready
##   * Dim:  325 x 2 
##   * Size:  25 Kb
## -----------------------------
## Heat diffusion:
## - Matrix not loaded.
## - RowSums are ready.
## -----------------------------
## PageRank:
## - Matrix not loaded.
## - RowSums are ready.
  • 这里需要注意的是,FELLA.DATA只需要通过函数buildGraphFromKEGGRESTbuildDataFromGraph创建一次即可,并且后期不允许认为修改

加载演示数据

# 第二部分就是加载数据集,也就是前面说的输入分析得到对结果有影响的代谢物list

data("input.sample")
input.full <- c(input.sample, paste0("intruder", 1:10))

show(input.full)
##  [1] "C00143"     "C00546"     "C04225"     "C16328"     "C00091"    
##  [6] "C15979"     "C16333"     "C05264"     "C05258"     "C00011"    
## [11] "C00083"     "C00044"     "C05266"     "C00479"     "C05280"    
## [16] "C01352"     "C05268"     "C16329"     "C00334"     "C05275"    
## [21] "C14145"     "C00081"     "C04253"     "C00027"     "C00111"    
## [26] "C00332"     "C00003"     "C00288"     "C05467"     "C00164"    
## [31] "intruder1"  "intruder2"  "intruder3"  "intruder4"  "intruder5" 
## [36] "intruder6"  "intruder7"  "intruder8"  "intruder9"  "intruder10"

# 下面就是通过函数`defineCompounds`来看下有哪些物质是与数据库匹配上的

myAnalysis <- defineCompounds(
    compounds = input.full, 
    data = FELLA.sample)

# 要注意的是有些你前期分析鉴定出的化合物可能并不一定能比对上KEGG数据库收集的化合物,那么这些比对失败的化合物就需要通过函数`getExcluded`排除,而比对上的代谢物用`getInput`函数

getInput(myAnalysis)
##  [1] "C00003" "C00011" "C00027" "C00044" "C00081" "C00083" "C00091" "C00111"
##  [9] "C00143" "C00164" "C00288" "C00332" "C00334" "C00479" "C00546" "C01352"
## [17] "C04225" "C04253" "C05258" "C05264" "C05266" "C05268" "C05275" "C05280"
## [25] "C05467" "C14145" "C15979" "C16328" "C16329" "C16333"

getExcluded(myAnalysis)
##  [1] "intruder1"  "intruder2"  "intruder3"  "intruder4"  "intruder5" 
##  [6] "intruder6"  "intruder7"  "intruder8"  "intruder9"  "intruder10"

  • 需要注意的是,这里是准确匹配的方式,所以要特别小心有空格或者tab键。

具体分析

  • 接下来就是富集分析:一旦FELLA.DATA和FELLA.USER确定下来,那么就可以很轻松的开始下一步的富集分析流程了,富集分析的方法有三种

    • 超几何检验(method = "hypergeom")
    • Diffusion(分析有意义子网络)
    • PageRank(和Diffusion类似,只不过会对网络进行排序)
  • 统计分析:对于前面DiffusionPageRank方法,提供了两种统计方法

    • Normal approximation(approx = "normality"),基于无效假设的分析的期望值和协方差矩阵的z-score计算得到得分值
    • Monte Carlo trials(approx = "simulation"),随机变量的蒙特卡罗实验计算得分值
  • 富集:方法、近似值和集成方法

    • enrich函数包括前面的defineCompoundsrunHypergeomrunDiffusionrunPagerank四种函数。一步分析法
myAnalysis <- enrich(
    compounds = input.full, 
    method = listMethods(), 
    approx = "normality", 
    data = FELLA.sample)
#No background compounds specified. Default background will be used.
#Running hypergeom...
#Starting hypergeometric p-values calculation...
#Done.
#Running diffusion...
#Computing p-scores through the specified distribution.
#Done.
#Running PageRank...
#Computing p-scores through the specified distribution.
#Using provided damping factor...
#Done.
#Warning message:
#In defineCompounds(compounds = compounds, compoundsBackground = compoundsBackground,  :
#  Some compounds were introduced as affected but they do not belong to the background. These compounds will be excluded from the analysis. Use 'getExcluded' #  to see them.
show(myAnalysis)
## Compounds in the input: 30
##  [1] "C00003" "C00011" "C00027" "C00044" "C00081" "C00083" "C00091" "C00111"
##  [9] "C00143" "C00164" "C00288" "C00332" "C00334" "C00479" "C00546" "C01352"
## [17] "C04225" "C04253" "C05258" "C05264" "C05266" "C05268" "C05275" "C05280"
## [25] "C05467" "C14145" "C15979" "C16328" "C16329" "C16333"
## Background compounds: all available compounds (default)
## -----------------------------
## Hypergeometric test: ready.
## Top 2 p-values:
##     hsa00640     hsa00010 
## 8.540386e-09 9.999888e-01 
## 
## -----------------------------
## Heat diffusion: ready.
## P-scores under 0.05:  86
## -----------------------------
## PageRank: ready.
## P-scores under 0.05:  70

可视化

  • method = "hypergeom"参数下画的图是包含top通路以及其对应的代谢物的图
plot(
    x = myAnalysis, 
    method = "hypergeom", 
    main = "My first enrichment using the hypergeometric test in FELLA", 
    threshold = 1, 
    data = FELLA.sample)
图2 hypergeom图
  • method = "diffusion"参数下画的图是包含模块、酶和生化反应途径
plot(
    x = myAnalysis, 
    method = "diffusion", 
    main = "My first enrichment using the diffusion analysis in FELLA", 
    threshold = 0.1, 
    data = FELLA.sample)
图3 diffusion图
  • method = "pagerank"参数下画的图和diffusion类似
plot(
    x = myAnalysis, 
    method = "diffusion", 
    main = "My first enrichment using the diffusion analysis in FELLA", 
    threshold = 0.1, 
    data = FELLA.sample)
图4 pagerank图

导出结果

  • 将数据(代谢通路注释的结果导出)
myTempDir <- getwd()
myExp_csv <- paste0(myTempDir, "/table.csv")
exportResults(
    format = "csv", 
    file = myExp_csv, 
    method = "pagerank", 
    threshold = 0.1, 
    object = myAnalysis, 
    data = FELLA.sample)

小结

那么整个关于FELLA软件的一般性使用方法就介绍到这里,当然软件背后的计算方法是需要更加细致的去学习和探究的。区别于网页分析软件Metaboanalyst,可以更加快速和不依赖于网络的限制,这就是我为什么更喜欢用软件的原因。

参考

[1] 文章链接:FELLA: an R package to enrich metabolomics data
[2] FELLA包链接1:FELLA
[3] FELLA包github网址链接:github

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

推荐阅读更多精彩内容