Contents

Compiled date: 2024-05-01

Last edited: 2022-01-12

License: GPL-3

1 Installation

Run the following code to install the Bioconductor version of the package.

# install.packages("BiocManager")
BiocManager::install("fobitools")

2 Load fobitools

library(fobitools)

You can also load some additional packages that will be very useful in this vignette.

library(dplyr)
library(kableExtra)

3 metaboliteUniverse and metaboliteList

In microarrays, for example, we can study almost all the genes of an organism in our sample, so it makes sense to perform an over representation analysis (ORA) considering all the genes present in Gene Ontology (GO). Since most of the GO pathways would be represented by some gene in the microarray.

This is different in nutrimetabolomics. Targeted nutrimetabolomics studies sets of about 200-500 diet-related metabolites, so it would not make sense to use all known metabolites (for example in HMDB or CHEBI) in an ORA, as most of them would not have been quantified in the study.

In nutrimetabolomic studies it may be interesting to study enriched or over represented foods/food groups by the metabolites resulting from the study statistical analysis, rather than the enriched metabolic pathways, as would make more sense in genomics or other metabolomics studies.

The Food-Biomarker Ontology (FOBI) provides a biological knowledge for conducting these enrichment analyses in nutrimetabolomic studies, as FOBI provides the relationships between several foods and their associated dietary metabolites (Castellano-Escuder et al. 2020).

Accordingly, to perform an ORA with the fobitools package, it is necessary to provide a metabolite universe (all metabolites included in the statistical analysis) and a list of selected metabolites (selected metabolites according to a statistical criterion).

Here is an example:

# select 300 random metabolites from FOBI
idx_universe <- sample(nrow(fobitools::idmap), 300, replace = FALSE)
metaboliteUniverse <- fobitools::idmap %>%
  dplyr::slice(idx_universe) %>%
  pull(FOBI)

# select 10 random metabolites from metaboliteUniverse that are associated with 'Red meat' (FOBI:0193), 
# 'Lean meat' (FOBI:0185) , 'egg food product' (FOODON:00001274), 
# or 'grape (whole, raw)' (FOODON:03301702)
fobi_subset <- fobitools::fobi %>% # equivalent to `parse_fobi()`
  filter(FOBI %in% metaboliteUniverse) %>%
  filter(id_BiomarkerOf %in% c("FOBI:0193", "FOBI:0185", "FOODON:00001274", "FOODON:03301702")) %>%
  dplyr::slice(sample(nrow(.), 10, replace = FALSE))

metaboliteList <- fobi_subset %>%
  pull(FOBI)
fobitools::ora(metaboliteList = metaboliteList, 
               metaboliteUniverse = metaboliteUniverse, 
               subOntology = "food", 
               pvalCutoff = 0.01)
className classSize overlap pval padj overlapMetabolites
Red meat 14 6 0.0000006 0.0000876 FOBI:08823 , FOBI:030708, FOBI:08826 , FOBI:030461, FOBI:050240, FOBI:050243
dairy food product 10 4 0.0001208 0.0025471 FOBI:08823 , FOBI:030697, FOBI:030695, FOBI:08826
avocado (whole, raw) 5 3 0.0002599 0.0025471 FOBI:030461, FOBI:050240, FOBI:050243
banana (whole, ripe) 5 3 0.0002599 0.0025471 FOBI:030461, FOBI:050240, FOBI:050243
beetroot 5 3 0.0002599 0.0025471 FOBI:030461, FOBI:050240, FOBI:050243
blackberry (whole, raw) 5 3 0.0002599 0.0025471 FOBI:030461, FOBI:050240, FOBI:050243
blueberry (whole, raw) 5 3 0.0002599 0.0025471 FOBI:030461, FOBI:050240, FOBI:050243
cucumber (whole, raw) 5 3 0.0002599 0.0025471 FOBI:030461, FOBI:050240, FOBI:050243
fig (whole) 5 3 0.0002599 0.0025471 FOBI:030461, FOBI:050240, FOBI:050243
hazelnut 5 3 0.0002599 0.0025471 FOBI:030461, FOBI:050240, FOBI:050243
kiwi 5 3 0.0002599 0.0025471 FOBI:030461, FOBI:050240, FOBI:050243
pea (whole) 5 3 0.0002599 0.0025471 FOBI:030461, FOBI:050240, FOBI:050243
pineapple (whole, raw) 5 3 0.0002599 0.0025471 FOBI:030461, FOBI:050240, FOBI:050243
potato (whole, raw) 5 3 0.0002599 0.0025471 FOBI:030461, FOBI:050240, FOBI:050243
white sugar 5 3 0.0002599 0.0025471 FOBI:030461, FOBI:050240, FOBI:050243
carrot root (whole, raw) 6 3 0.0005106 0.0037529 FOBI:030461, FOBI:050240, FOBI:050243
cauliflower (whole, raw) 6 3 0.0005106 0.0037529 FOBI:030461, FOBI:050240, FOBI:050243
chocolate 6 3 0.0005106 0.0037529 FOBI:030461, FOBI:050240, FOBI:050243
peach (whole, raw) 6 3 0.0005106 0.0037529 FOBI:030461, FOBI:050240, FOBI:050243
pomegranate (whole, raw) 6 3 0.0005106 0.0037529 FOBI:030461, FOBI:050240, FOBI:050243
apple juice 7 3 0.0008777 0.0038814 FOBI:030461, FOBI:050242, FOBI:050243
bell pepper 7 3 0.0008777 0.0038814 FOBI:030461, FOBI:050240, FOBI:050243
black pepper food product 7 3 0.0008777 0.0038814 FOBI:030461, FOBI:050240, FOBI:050243
cabbage (whole, raw) 7 3 0.0008777 0.0038814 FOBI:030461, FOBI:050240, FOBI:050243
hot pepper vegetable food product 7 3 0.0008777 0.0038814 FOBI:030461, FOBI:050240, FOBI:050243
orange juice 7 3 0.0008777 0.0038814 FOBI:030461, FOBI:050242, FOBI:050243
pear (whole, raw) 7 3 0.0008777 0.0038814 FOBI:030461, FOBI:050240, FOBI:050243
yellow bell pepper (whole, raw) 7 3 0.0008777 0.0038814 FOBI:030461, FOBI:050240, FOBI:050243
orange (whole, raw) 16 4 0.0009474 0.0038814 FOBI:030461, FOBI:050240, FOBI:050242, FOBI:050243
chickpea (whole) 2 2 0.0010033 0.0038814 FOBI:030461, FOBI:050240
eggplant (whole, raw) 2 2 0.0010033 0.0038814 FOBI:030461, FOBI:050240
Lean meat 2 2 0.0010033 0.0038814 FOBI:030708, FOBI:030690
mango (whole, raw) 2 2 0.0010033 0.0038814 FOBI:030461, FOBI:050240
melon (raw) 2 2 0.0010033 0.0038814 FOBI:030461, FOBI:050240
nectarine (whole, raw) 2 2 0.0010033 0.0038814 FOBI:030461, FOBI:050240
rhubarb stalk (whole, raw) 2 2 0.0010033 0.0038814 FOBI:030461, FOBI:050240
sugar 2 2 0.0010033 0.0038814 FOBI:030461, FOBI:050240
zucchini plant 2 2 0.0010033 0.0038814 FOBI:030461, FOBI:050240
almond (whole, raw) 8 3 0.0013793 0.0049454 FOBI:030461, FOBI:050240, FOBI:050243
apricot (whole, raw) 8 3 0.0013793 0.0049454 FOBI:030461, FOBI:050240, FOBI:050243
raspberry (whole, raw) 8 3 0.0013793 0.0049454 FOBI:030461, FOBI:050240, FOBI:050243
black currant (whole, raw) 9 3 0.0020322 0.0060965 FOBI:030461, FOBI:050240, FOBI:050243
coffee (liquid drink) 9 3 0.0020322 0.0060965 FOBI:030461, FOBI:050240, FOBI:050243
green tea leaf (dry) 9 3 0.0020322 0.0060965 FOBI:030461, FOBI:050240, FOBI:050243
lettuce vegetable food product 9 3 0.0020322 0.0060965 FOBI:030461, FOBI:050240, FOBI:050243
peanut (whole, raw) 9 3 0.0020322 0.0060965 FOBI:030461, FOBI:050240, FOBI:050243
plum (whole, raw) 9 3 0.0020322 0.0060965 FOBI:030461, FOBI:050240, FOBI:050243
red tea 9 3 0.0020322 0.0060965 FOBI:030461, FOBI:050240, FOBI:050243
red velvet 9 3 0.0020322 0.0060965 FOBI:030461, FOBI:050240, FOBI:050243
sweet potato vegetable food product 10 3 0.0028513 0.0080473 FOBI:030461, FOBI:050240, FOBI:050243
beer 21 4 0.0028638 0.0080473 FOBI:030461, FOBI:050240, FOBI:050242, FOBI:050243
bread food product 3 2 0.0029562 0.0080473 FOBI:030461, FOBI:050240
lentil (whole) 3 2 0.0029562 0.0080473 FOBI:030461, FOBI:050240
whole bread 3 2 0.0029562 0.0080473 FOBI:030461, FOBI:050240
broccoli floret (whole, raw) 11 3 0.0038505 0.0101076 FOBI:030461, FOBI:050240, FOBI:050243
strawberry (whole, raw) 11 3 0.0038505 0.0101076 FOBI:030461, FOBI:050240, FOBI:050243
wine (food product) 24 4 0.0048318 0.0124609 FOBI:030461, FOBI:050240, FOBI:050242, FOBI:050243
milk product (fermented) 12 3 0.0050422 0.0125628 FOBI:030461, FOBI:050240, FOBI:050243
tea food product 12 3 0.0050422 0.0125628 FOBI:030461, FOBI:050240, FOBI:050243
wheat 4 2 0.0058065 0.0142259 FOBI:030461, FOBI:050240
bean (whole) 14 3 0.0080462 0.0190774 FOBI:030461, FOBI:050240, FOBI:050243
cherry (whole, raw) 14 3 0.0080462 0.0190774 FOBI:030461, FOBI:050240, FOBI:050243
grain plant 5 2 0.0095042 0.0211685 FOBI:030461, FOBI:050240
grain product 5 2 0.0095042 0.0211685 FOBI:030461, FOBI:050240
prune food product 5 2 0.0095042 0.0211685 FOBI:030461, FOBI:050243
raisin (whole) 5 2 0.0095042 0.0211685 FOBI:030461, FOBI:050243
tomato (whole, raw) 15 3 0.0098772 0.0216708 FOBI:030461, FOBI:050240, FOBI:050243

4 Network visualization of metaboliteList terms

Then, with the fobi_graph function we can visualize the metaboliteList terms with their corresponding FOBI relationships.

terms <- fobi_subset %>%
  pull(id_code)

# create the associated graph
fobitools::fobi_graph(terms = terms, 
                      get = "anc",
                      labels = TRUE,
                      legend = TRUE)

5 Session Information

sessionInfo()
#> R version 4.4.0 alpha (2024-03-27 r86216)
#> Platform: aarch64-apple-darwin20
#> Running under: macOS Ventura 13.6.5
#> 
#> Matrix products: default
#> BLAS:   /Library/Frameworks/R.framework/Versions/4.4-arm64/Resources/lib/libRblas.0.dylib 
#> LAPACK: /Library/Frameworks/R.framework/Versions/4.4-arm64/Resources/lib/libRlapack.dylib;  LAPACK version 3.12.0
#> 
#> locale:
#> [1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
#> 
#> time zone: America/New_York
#> tzcode source: internal
#> 
#> attached base packages:
#> [1] stats     graphics  grDevices utils     datasets  methods   base     
#> 
#> other attached packages:
#>  [1] kableExtra_1.4.0 lubridate_1.9.3  forcats_1.0.0    stringr_1.5.1   
#>  [5] dplyr_1.1.4      purrr_1.0.2      readr_2.1.5      tidyr_1.3.1     
#>  [9] tibble_3.2.1     ggplot2_3.5.0    tidyverse_2.0.0  fobitools_1.12.0
#> [13] BiocStyle_2.32.0
#> 
#> loaded via a namespace (and not attached):
#>   [1] DBI_1.2.2              ada_2.0-5              qdapRegex_0.7.8       
#>   [4] gridExtra_2.3          rlang_1.1.3            magrittr_2.0.3        
#>   [7] e1071_1.7-14           compiler_4.4.0         RSQLite_2.3.5         
#>  [10] systemfonts_1.0.6      vctrs_0.6.5            pkgconfig_2.0.3       
#>  [13] crayon_1.5.2           fastmap_1.1.1          magick_2.8.3          
#>  [16] labeling_0.4.3         ggraph_2.2.1           utf8_1.2.4            
#>  [19] rmarkdown_2.26         prodlim_2023.08.28     tzdb_0.4.0            
#>  [22] bit_4.0.5              xfun_0.43              cachem_1.0.8          
#>  [25] jsonlite_1.8.8         blob_1.2.4             highr_0.10            
#>  [28] tictoc_1.2.1           BiocParallel_1.38.0    tweenr_2.0.3          
#>  [31] syuzhet_1.0.7          parallel_4.4.0         R6_2.5.1              
#>  [34] bslib_0.6.2            stringi_1.8.3          textclean_0.9.3       
#>  [37] parallelly_1.37.1      rpart_4.1.23           jquerylib_0.1.4       
#>  [40] Rcpp_1.0.12            bookdown_0.38          knitr_1.45            
#>  [43] future.apply_1.11.2    clisymbols_1.2.0       Matrix_1.7-0          
#>  [46] splines_4.4.0          nnet_7.3-19            igraph_2.0.3          
#>  [49] timechange_0.3.0       tidyselect_1.2.1       rstudioapi_0.16.0     
#>  [52] yaml_2.3.8             viridis_0.6.5          codetools_0.2-19      
#>  [55] listenv_0.9.1          lattice_0.22-6         withr_3.0.0           
#>  [58] evaluate_0.23          ontologyIndex_2.12     future_1.33.2         
#>  [61] survival_3.5-8         proxy_0.4-27           polyclip_1.10-6       
#>  [64] xml2_1.3.6             pillar_1.9.0           BiocManager_1.30.22   
#>  [67] lexicon_1.2.1          generics_0.1.3         vroom_1.6.5           
#>  [70] hms_1.1.3              munsell_0.5.0          scales_1.3.0          
#>  [73] ff_4.0.12              globals_0.16.3         xtable_1.8-4          
#>  [76] class_7.3-22           glue_1.7.0             RecordLinkage_0.4-12.4
#>  [79] tools_4.4.0            data.table_1.15.4      fgsea_1.30.0          
#>  [82] graphlayouts_1.1.1     fastmatch_1.1-4        tidygraph_1.3.1       
#>  [85] cowplot_1.1.3          grid_4.4.0             ipred_0.9-14          
#>  [88] colorspace_2.1-0       ggforce_0.4.2          cli_3.6.2             
#>  [91] evd_2.3-6.1            fansi_1.0.6            viridisLite_0.4.2     
#>  [94] svglite_2.1.3          lava_1.8.0             gtable_0.3.4          
#>  [97] sass_0.4.9             digest_0.6.35          ggrepel_0.9.5         
#> [100] farver_2.1.1           memoise_2.0.1          htmltools_0.5.8       
#> [103] lifecycle_1.0.4        bit64_4.0.5            MASS_7.3-60.2

References

Castellano-Escuder, Pol, Raúl González-Domı́nguez, David S Wishart, Cristina Andrés-Lacueva, and Alex Sánchez-Pla. 2020. “FOBI: An Ontology to Represent Food Intake Data and Associate It with Metabolomic Data.” Database 2020.