Contents

Compiled date: 2024-04-30

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
grapefruit (whole, raw) 24 7 0.0000009 0.0001308 FOBI:030555, FOBI:030320, FOBI:030518, FOBI:050258, FOBI:050262, FOBI:050287, FOBI:050288
Red meat 20 6 0.0000072 0.0005328 FOBI:030706, FOBI:030555, FOBI:08824 , FOBI:030320, FOBI:030518, FOBI:050262
black pepper food product 9 4 0.0000737 0.0027448 FOBI:030555, FOBI:030320, FOBI:030518, FOBI:050262
kale leaf (raw) 9 4 0.0000737 0.0027448 FOBI:030555, FOBI:030320, FOBI:030518, FOBI:050262
broccoli floret (whole, raw) 10 4 0.0001208 0.0027819 FOBI:030555, FOBI:030518, FOBI:050258, FOBI:050262
lemon (whole, raw) 19 5 0.0001222 0.0027819 FOBI:030555, FOBI:030320, FOBI:030518, FOBI:050258, FOBI:050287
orange (whole, raw) 20 5 0.0001606 0.0027819 FOBI:030555, FOBI:030518, FOBI:050258, FOBI:050262, FOBI:050287
green tea leaf (dry) 11 4 0.0001867 0.0027819 FOBI:030555, FOBI:030320, FOBI:030518, FOBI:050262
red tea 11 4 0.0001867 0.0027819 FOBI:030555, FOBI:030320, FOBI:030518, FOBI:050262
red velvet 11 4 0.0001867 0.0027819 FOBI:030555, FOBI:030320, FOBI:030518, FOBI:050262
celery stalk (raw) 5 3 0.0002599 0.0034201 FOBI:030555, FOBI:030518, FOBI:050288
tea food product 12 4 0.0002754 0.0034201 FOBI:030555, FOBI:030518, FOBI:050258, FOBI:050262
wine (food product) 24 5 0.0004148 0.0040139 FOBI:030555, FOBI:030320, FOBI:030518, FOBI:050258, FOBI:050262
bell pepper 6 3 0.0005106 0.0040139 FOBI:030555, FOBI:030518, FOBI:050262
cabbage (whole, raw) 6 3 0.0005106 0.0040139 FOBI:030555, FOBI:030518, FOBI:050262
hot pepper vegetable food product 6 3 0.0005106 0.0040139 FOBI:030555, FOBI:030518, FOBI:050262
yellow bell pepper (whole, raw) 6 3 0.0005106 0.0040139 FOBI:030555, FOBI:030518, FOBI:050262
bean (whole) 14 4 0.0005388 0.0040139 FOBI:030555, FOBI:030320, FOBI:030518, FOBI:050262
black currant (whole, raw) 14 4 0.0005388 0.0040139 FOBI:030555, FOBI:030320, FOBI:030518, FOBI:050262
sweet potato vegetable food product 14 4 0.0005388 0.0040139 FOBI:030555, FOBI:030320, FOBI:030518, FOBI:050262
lettuce vegetable food product 7 3 0.0008777 0.0061373 FOBI:030555, FOBI:030518, FOBI:050262
apple juice 16 4 0.0009474 0.0061373 FOBI:030555, FOBI:030320, FOBI:050258, FOBI:050287
orange juice 16 4 0.0009474 0.0061373 FOBI:030555, FOBI:030320, FOBI:050258, FOBI:050287
almond (whole, raw) 8 3 0.0013793 0.0082208 FOBI:030555, FOBI:030320, FOBI:050262
black tea leaf (dry) 8 3 0.0013793 0.0082208 FOBI:030555, FOBI:030320, FOBI:030518
strawberry (whole, raw) 18 4 0.0015402 0.0088267 FOBI:030555, FOBI:030320, FOBI:030518, FOBI:050262
apricot (whole, raw) 9 3 0.0020322 0.0108140 FOBI:030555, FOBI:030518, FOBI:050262
onion (whole, raw) 9 3 0.0020322 0.0108140 FOBI:030555, FOBI:030518, FOBI:050258
blackberry (whole, raw) 10 3 0.0028513 0.0133344 FOBI:030555, FOBI:030320, FOBI:050262
carrot root (whole, raw) 10 3 0.0028513 0.0133344 FOBI:030555, FOBI:030320, FOBI:050262
plum (whole, raw) 10 3 0.0028513 0.0133344 FOBI:030555, FOBI:030518, FOBI:050262
tomato (whole, raw) 21 4 0.0028638 0.0133344 FOBI:030555, FOBI:030320, FOBI:030518, FOBI:050262
pear (whole, raw) 11 3 0.0038505 0.0168744 FOBI:030555, FOBI:030320, FOBI:050262
raspberry (whole, raw) 11 3 0.0038505 0.0168744 FOBI:030555, FOBI:030320, FOBI:030518
Dark yellow vegetables 4 2 0.0058065 0.0221838 FOBI:030555, FOBI:030518
pumpkin (whole, raw) 4 2 0.0058065 0.0221838 FOBI:030555, FOBI:050262
sauerkraut 4 2 0.0058065 0.0221838 FOBI:030555, FOBI:050262
spinach (whole, raw) 4 2 0.0058065 0.0221838 FOBI:030555, FOBI:050262
watermelon (whole, raw) 4 2 0.0058065 0.0221838 FOBI:030555, FOBI:050262
olive (whole, ripe) 13 3 0.0064375 0.0239797 FOBI:030555, FOBI:030320, FOBI:050262
coffee (liquid drink) 14 3 0.0080462 0.0292412 FOBI:030555, FOBI:030320, FOBI:050262
hazelnut 5 2 0.0095042 0.0314695 FOBI:030555, FOBI:050262
potato (whole, raw) 5 2 0.0095042 0.0314695 FOBI:030555, FOBI:050262
radish (whole, raw) 5 2 0.0095042 0.0314695 FOBI:030555, FOBI:050262
soybean oil 5 2 0.0095042 0.0314695 FOBI:030320, FOBI:050262
cherry (whole, raw) 15 3 0.0098772 0.0319934 FOBI:030555, FOBI:030320, FOBI:030518

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 beta (2024-04-15 r86425)
#> Platform: x86_64-pc-linux-gnu
#> Running under: Ubuntu 22.04.4 LTS
#> 
#> Matrix products: default
#> BLAS:   /home/biocbuild/bbs-3.19-bioc/R/lib/libRblas.so 
#> LAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.10.0
#> 
#> locale:
#>  [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C              
#>  [3] LC_TIME=en_US.UTF-8        LC_COLLATE=en_US.UTF-8    
#>  [5] LC_MONETARY=en_US.UTF-8    LC_MESSAGES=en_US.UTF-8   
#>  [7] LC_PAPER=en_US.UTF-8       LC_NAME=C                 
#>  [9] LC_ADDRESS=C               LC_TELEPHONE=C            
#> [11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C       
#> 
#> time zone: America/New_York
#> tzcode source: system (glibc)
#> 
#> 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.1    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.6         
#>  [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] tinytex_0.50           bit_4.0.5              xfun_0.43             
#>  [25] cachem_1.0.8           jsonlite_1.8.8         blob_1.2.4            
#>  [28] highr_0.10             tictoc_1.2.1           BiocParallel_1.38.0   
#>  [31] tweenr_2.0.3           syuzhet_1.0.7          parallel_4.4.0        
#>  [34] R6_2.5.1               bslib_0.7.0            stringi_1.8.3         
#>  [37] textclean_0.9.3        parallelly_1.37.1      rpart_4.1.23          
#>  [40] jquerylib_0.1.4        Rcpp_1.0.12            bookdown_0.39         
#>  [43] knitr_1.46             future.apply_1.11.2    clisymbols_1.2.0      
#>  [46] Matrix_1.7-0           splines_4.4.0          nnet_7.3-19           
#>  [49] igraph_2.0.3           timechange_0.3.0       tidyselect_1.2.1      
#>  [52] rstudioapi_0.16.0      yaml_2.3.8             viridis_0.6.5         
#>  [55] codetools_0.2-20       listenv_0.9.1          lattice_0.22-6        
#>  [58] withr_3.0.0            evaluate_0.23          ontologyIndex_2.12    
#>  [61] future_1.33.2          survival_3.6-4         proxy_0.4-27          
#>  [64] polyclip_1.10-6        xml2_1.3.6             pillar_1.9.0          
#>  [67] BiocManager_1.30.22    lexicon_1.2.1          generics_0.1.3        
#>  [70] vroom_1.6.5            hms_1.1.3              munsell_0.5.1         
#>  [73] scales_1.3.0           ff_4.0.12              globals_0.16.3        
#>  [76] xtable_1.8-4           class_7.3-22           glue_1.7.0            
#>  [79] RecordLinkage_0.4-12.4 tools_4.4.0            data.table_1.15.4     
#>  [82] fgsea_1.30.0           graphlayouts_1.1.1     fastmatch_1.1-4       
#>  [85] tidygraph_1.3.1        cowplot_1.1.3          grid_4.4.0            
#>  [88] ipred_0.9-14           colorspace_2.1-0       ggforce_0.4.2         
#>  [91] cli_3.6.2              evd_2.3-7              fansi_1.0.6           
#>  [94] viridisLite_0.4.2      svglite_2.1.3          lava_1.8.0            
#>  [97] gtable_0.3.5           sass_0.4.9             digest_0.6.35         
#> [100] ggrepel_0.9.5          farver_2.1.1           memoise_2.0.1         
#> [103] htmltools_0.5.8.1      lifecycle_1.0.4        bit64_4.0.5           
#> [106] 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.