Simple food over representation analysis (ORA)

Compiled date: 2026-09-23

Last edited: 2022-01-12

License: GPL-3

Installation

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

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

Load fobitools

library(fobitools)

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

library(dplyr)
library(kableExtra)

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) 16 8 0.0000000 0.0000000 FOBI:030555, FOBI:030558, FOBI:030565, FOBI:030525, FOBI:050242, FOBI:050285, FOBI:050030, FOBI:050034
avocado (whole, raw) 6 5 0.0000000 0.0000007 FOBI:030555, FOBI:030558, FOBI:030565, FOBI:050030, FOBI:050034
beetroot 6 5 0.0000000 0.0000007 FOBI:030555, FOBI:030558, FOBI:030565, FOBI:050030, FOBI:050034
fig (whole) 6 5 0.0000000 0.0000007 FOBI:030555, FOBI:030558, FOBI:030565, FOBI:050030, FOBI:050034
pea (whole) 6 5 0.0000000 0.0000007 FOBI:030555, FOBI:030558, FOBI:030565, FOBI:050030, FOBI:050034
turnip (whole, raw) 6 5 0.0000000 0.0000007 FOBI:030555, FOBI:030558, FOBI:030565, FOBI:050030, FOBI:050034
oregano (ground) 11 6 0.0000000 0.0000007 FOBI:030555, FOBI:030558, FOBI:030565, FOBI:050242, FOBI:050030, FOBI:050034
Red meat 11 6 0.0000000 0.0000007 FOBI:030555, FOBI:030558, FOBI:08824 , FOBI:030565, FOBI:050030, FOBI:050034
cauliflower (whole, raw) 7 5 0.0000001 0.0000010 FOBI:030555, FOBI:030558, FOBI:030565, FOBI:050030, FOBI:050034
cucumber (whole, raw) 7 5 0.0000001 0.0000010 FOBI:030555, FOBI:030558, FOBI:030565, FOBI:050030, FOBI:050034
Dark yellow vegetables 7 5 0.0000001 0.0000010 FOBI:030555, FOBI:030558, FOBI:030565, FOBI:050030, FOBI:050034
hazelnut 7 5 0.0000001 0.0000010 FOBI:030555, FOBI:030558, FOBI:030565, FOBI:050030, FOBI:050034
kiwi 7 5 0.0000001 0.0000010 FOBI:030555, FOBI:030558, FOBI:030565, FOBI:050030, FOBI:050034
pineapple (whole, raw) 7 5 0.0000001 0.0000010 FOBI:030555, FOBI:030558, FOBI:030565, FOBI:050030, FOBI:050034
prune food product 7 5 0.0000001 0.0000010 FOBI:030555, FOBI:030558, FOBI:030565, FOBI:050030, FOBI:050034
pumpkin (whole, raw) 7 5 0.0000001 0.0000010 FOBI:030555, FOBI:030558, FOBI:030565, FOBI:050030, FOBI:050034
radish (whole, raw) 7 5 0.0000001 0.0000010 FOBI:030555, FOBI:030558, FOBI:030565, FOBI:050030, FOBI:050034
raisin (whole) 7 5 0.0000001 0.0000010 FOBI:030555, FOBI:030558, FOBI:030565, FOBI:050030, FOBI:050034
sauerkraut 7 5 0.0000001 0.0000010 FOBI:030555, FOBI:030558, FOBI:030565, FOBI:050030, FOBI:050034
spinach (whole, raw) 7 5 0.0000001 0.0000010 FOBI:030555, FOBI:030558, FOBI:030565, FOBI:050030, FOBI:050034
watermelon (whole, raw) 7 5 0.0000001 0.0000010 FOBI:030555, FOBI:030558, FOBI:030565, FOBI:050030, FOBI:050034
banana (whole, ripe) 8 5 0.0000003 0.0000017 FOBI:030555, FOBI:030558, FOBI:030565, FOBI:050030, FOBI:050034
bell pepper 8 5 0.0000003 0.0000017 FOBI:030555, FOBI:030558, FOBI:030565, FOBI:050030, FOBI:050034
black pepper food product 8 5 0.0000003 0.0000017 FOBI:030555, FOBI:030558, FOBI:030565, FOBI:050030, FOBI:050034
black tea leaf (dry) 8 5 0.0000003 0.0000017 FOBI:030555, FOBI:030558, FOBI:030565, FOBI:050030, FOBI:050034
cabbage (whole, raw) 8 5 0.0000003 0.0000017 FOBI:030555, FOBI:030558, FOBI:030565, FOBI:050030, FOBI:050034
hot pepper vegetable food product 8 5 0.0000003 0.0000017 FOBI:030555, FOBI:030558, FOBI:030565, FOBI:050030, FOBI:050034
peanut (whole, raw) 8 5 0.0000003 0.0000017 FOBI:030555, FOBI:030558, FOBI:030565, FOBI:050030, FOBI:050034
pomegranate (whole, raw) 8 5 0.0000003 0.0000017 FOBI:030555, FOBI:030558, FOBI:030565, FOBI:050030, FOBI:050034
potato (whole, raw) 8 5 0.0000003 0.0000017 FOBI:030555, FOBI:030558, FOBI:030565, FOBI:050030, FOBI:050034
yellow bell pepper (whole, raw) 8 5 0.0000003 0.0000017 FOBI:030555, FOBI:030558, FOBI:030565, FOBI:050030, FOBI:050034
lemon (whole, raw) 15 6 0.0000004 0.0000019 FOBI:030555, FOBI:030558, FOBI:030565, FOBI:050242, FOBI:050030, FOBI:050034
orange (whole, raw) 16 6 0.0000006 0.0000028 FOBI:030555, FOBI:030558, FOBI:030565, FOBI:050242, FOBI:050030, FOBI:050034
almond (whole, raw) 9 5 0.0000008 0.0000028 FOBI:030555, FOBI:030558, FOBI:030565, FOBI:050030, FOBI:050034
blackberry (whole, raw) 9 5 0.0000008 0.0000028 FOBI:030555, FOBI:030558, FOBI:030565, FOBI:050030, FOBI:050034
celery stalk (raw) 9 5 0.0000008 0.0000028 FOBI:030555, FOBI:030558, FOBI:030565, FOBI:050030, FOBI:050034
green tea leaf (dry) 9 5 0.0000008 0.0000028 FOBI:030555, FOBI:030558, FOBI:030565, FOBI:050030, FOBI:050034
kale leaf (raw) 9 5 0.0000008 0.0000028 FOBI:030555, FOBI:030558, FOBI:030565, FOBI:050030, FOBI:050034
lettuce vegetable food product 9 5 0.0000008 0.0000028 FOBI:030555, FOBI:030558, FOBI:030565, FOBI:050030, FOBI:050034
peach (whole, raw) 9 5 0.0000008 0.0000028 FOBI:030555, FOBI:030558, FOBI:030565, FOBI:050030, FOBI:050034
red tea 9 5 0.0000008 0.0000028 FOBI:030555, FOBI:030558, FOBI:030565, FOBI:050030, FOBI:050034
red velvet 9 5 0.0000008 0.0000028 FOBI:030555, FOBI:030558, FOBI:030565, FOBI:050030, FOBI:050034
apricot (whole, raw) 10 5 0.0000015 0.0000052 FOBI:030555, FOBI:030558, FOBI:030565, FOBI:050030, FOBI:050034
carrot root (whole, raw) 10 5 0.0000015 0.0000052 FOBI:030555, FOBI:030558, FOBI:030565, FOBI:050030, FOBI:050034
onion (whole, raw) 10 5 0.0000015 0.0000052 FOBI:030555, FOBI:030558, FOBI:030565, FOBI:050030, FOBI:050034
white bread 5 4 0.0000019 0.0000058 FOBI:030558, FOBI:030565, FOBI:050030, FOBI:050034
White fish 5 4 0.0000019 0.0000058 FOBI:030558, FOBI:030565, FOBI:050030, FOBI:050034
white sugar 5 4 0.0000019 0.0000058 FOBI:030558, FOBI:030565, FOBI:050030, FOBI:050034
white wine 5 4 0.0000019 0.0000058 FOBI:030558, FOBI:030565, FOBI:050030, FOBI:050034
beer 19 6 0.0000021 0.0000064 FOBI:030555, FOBI:030558, FOBI:030565, FOBI:050242, FOBI:050030, FOBI:050034
black currant (whole, raw) 11 5 0.0000028 0.0000077 FOBI:030555, FOBI:030558, FOBI:030565, FOBI:050030, FOBI:050034
broccoli floret (whole, raw) 11 5 0.0000028 0.0000077 FOBI:030555, FOBI:030558, FOBI:030565, FOBI:050030, FOBI:050034
cereal 11 5 0.0000028 0.0000077 FOBI:030555, FOBI:030558, FOBI:030565, FOBI:050030, FOBI:050034
cereal food product 11 5 0.0000028 0.0000077 FOBI:030555, FOBI:030558, FOBI:030565, FOBI:050030, FOBI:050034
pear (whole, raw) 11 5 0.0000028 0.0000077 FOBI:030555, FOBI:030558, FOBI:030565, FOBI:050030, FOBI:050034
wine (food product) 20 6 0.0000030 0.0000081 FOBI:030555, FOBI:030558, FOBI:030565, FOBI:050242, FOBI:050030, FOBI:050034
cherry (whole, raw) 12 5 0.0000047 0.0000123 FOBI:030555, FOBI:030558, FOBI:030565, FOBI:050030, FOBI:050034
milk product (fermented) 12 5 0.0000047 0.0000123 FOBI:030555, FOBI:030558, FOBI:030565, FOBI:050030, FOBI:050034
plum (whole, raw) 13 5 0.0000076 0.0000185 FOBI:030555, FOBI:030558, FOBI:030565, FOBI:050030, FOBI:050034
strawberry (whole, raw) 13 5 0.0000076 0.0000185 FOBI:030555, FOBI:030558, FOBI:030565, FOBI:050030, FOBI:050034
sweet potato vegetable food product 13 5 0.0000076 0.0000185 FOBI:030555, FOBI:030558, FOBI:030565, FOBI:050030, FOBI:050034
tea food product 13 5 0.0000076 0.0000185 FOBI:030555, FOBI:030558, FOBI:030565, FOBI:050030, FOBI:050034
bean (whole) 14 5 0.0000116 0.0000276 FOBI:030555, FOBI:030558, FOBI:030565, FOBI:050030, FOBI:050034
tomato (whole, raw) 14 5 0.0000116 0.0000276 FOBI:030555, FOBI:030558, FOBI:030565, FOBI:050030, FOBI:050034
coffee (liquid drink) 16 5 0.0000248 0.0000579 FOBI:030555, FOBI:030558, FOBI:030565, FOBI:050030, FOBI:050034
ginger root 8 4 0.0000252 0.0000581 FOBI:030558, FOBI:030565, FOBI:050030, FOBI:050034
cumin seed (whole, dried) 17 5 0.0000347 0.0000787 FOBI:030555, FOBI:030558, FOBI:030565, FOBI:050030, FOBI:050034
grape (whole, raw) 18 5 0.0000474 0.0001061 FOBI:030555, FOBI:030558, FOBI:030565, FOBI:050030, FOBI:050034
asparagus (whole, raw) 4 3 0.0000743 0.0001590 FOBI:030558, FOBI:050030, FOBI:050034
chocolate 4 3 0.0000743 0.0001590 FOBI:030555, FOBI:030558, FOBI:030565
museli 4 3 0.0000743 0.0001590 FOBI:030555, FOBI:030558, FOBI:030565
apple juice 11 4 0.0001142 0.0002315 FOBI:030555, FOBI:030558, FOBI:030565, FOBI:050242
orange juice 11 4 0.0001142 0.0002315 FOBI:030555, FOBI:030558, FOBI:030565, FOBI:050242
quinoa seed (dried) 11 4 0.0001142 0.0002315 FOBI:030558, FOBI:030565, FOBI:050030, FOBI:050034
sunflower seed oil 11 4 0.0001142 0.0002315 FOBI:030558, FOBI:030565, FOBI:050030, FOBI:050034
raspberry (whole, raw) 6 3 0.0003602 0.0007204 FOBI:030555, FOBI:030558, FOBI:030565
olive (whole, ripe) 7 3 0.0006207 0.0012253 FOBI:030555, FOBI:050030, FOBI:050034
chickpea (whole) 2 2 0.0008027 0.0014354 FOBI:050030, FOBI:050034
corn (vegetable) food product 2 2 0.0008027 0.0014354 FOBI:050030, FOBI:050034
fruit (dried) 2 2 0.0008027 0.0014354 FOBI:050030, FOBI:050034
mango (whole, raw) 2 2 0.0008027 0.0014354 FOBI:050030, FOBI:050034
papaya (whole, raw) 2 2 0.0008027 0.0014354 FOBI:050030, FOBI:050034
rhubarb stalk (whole, raw) 2 2 0.0008027 0.0014354 FOBI:050030, FOBI:050034
squash (whole, raw) 2 2 0.0008027 0.0014354 FOBI:050030, FOBI:050034
vegetarian chilli 2 2 0.0008027 0.0014354 FOBI:030555, FOBI:030558
grain plant 10 3 0.0020322 0.0035504 FOBI:030558, FOBI:050030, FOBI:050034
grain product 10 3 0.0020322 0.0035504 FOBI:030558, FOBI:050030, FOBI:050034
black coffee 3 2 0.0023703 0.0036393 FOBI:030558, FOBI:030565
black turtle bean (whole) 3 2 0.0023703 0.0036393 FOBI:030558, FOBI:030565
butter 3 2 0.0023703 0.0036393 FOBI:050030, FOBI:050034
chicory (whole, raw) 3 2 0.0023703 0.0036393 FOBI:050030, FOBI:050034
eggplant (whole, raw) 3 2 0.0023703 0.0036393 FOBI:050030, FOBI:050034
herb 3 2 0.0023703 0.0036393 FOBI:030555, FOBI:030558
melon (raw) 3 2 0.0023703 0.0036393 FOBI:050030, FOBI:050034
nectarine (whole, raw) 3 2 0.0023703 0.0036393 FOBI:050030, FOBI:050034
peanut butter 3 2 0.0023703 0.0036393 FOBI:050030, FOBI:050034
soybean oil 3 2 0.0023703 0.0036393 FOBI:050030, FOBI:050034
stem or spear vegetable 3 2 0.0023703 0.0036393 FOBI:030558, FOBI:030565
zucchini plant 3 2 0.0023703 0.0036393 FOBI:050030, FOBI:050034
flour 15 3 0.0071308 0.0108388 FOBI:030558, FOBI:050030, FOBI:050034
blueberry (whole, raw) 5 2 0.0076553 0.0114080 FOBI:030558, FOBI:030565
cocoa 5 2 0.0076553 0.0114080 FOBI:050030, FOBI:050034
oil 16 3 0.0086407 0.0126764 FOBI:030555, FOBI:050030, FOBI:050034
apple (whole) 51 5 0.0086733 0.0126764 FOBI:030555, FOBI:030558, FOBI:030565, FOBI:050030, FOBI:050034

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)

Session Information

sessionInfo()
#> R version 4.6.1 (2026-06-24)
#> Platform: x86_64-pc-linux-gnu
#> Running under: Ubuntu 26.04.1 LTS
#> 
#> Matrix products: default
#> BLAS:   /usr/lib/x86_64-linux-gnu/openblas-pthread/libblas.so.3 
#> LAPACK: /usr/lib/x86_64-linux-gnu/openblas-pthread/libopenblasp-r0.3.32.so;  LAPACK version 3.12.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: Etc/UTC
#> tzcode source: system (glibc)
#> 
#> attached base packages:
#> [1] stats     graphics  grDevices utils     datasets  methods   base     
#> 
#> other attached packages:
#>  [1] kableExtra_1.4.1 lubridate_1.9.5  forcats_1.0.1    stringr_1.6.0   
#>  [5] dplyr_1.2.1      purrr_1.2.2      readr_2.2.0      tidyr_1.3.2     
#>  [9] tibble_3.3.1     ggplot2_4.0.3    tidyverse_2.0.0  fobitools_1.20.0
#> [13] BiocStyle_2.40.0
#> 
#> loaded via a namespace (and not attached):
#>   [1] DBI_1.3.0              qdapRegex_0.7.10       gridExtra_2.3.1       
#>   [4] rlang_1.3.0            magrittr_2.0.5         otel_0.2.0            
#>   [7] e1071_1.7-17           compiler_4.6.1         RSQLite_3.53.3        
#>  [10] systemfonts_1.3.2      vctrs_0.7.3            pkgconfig_2.0.3       
#>  [13] crayon_1.5.3           fastmap_1.2.0          labeling_0.4.3        
#>  [16] ggraph_2.2.2           rmarkdown_2.32         prodlim_2026.03.11    
#>  [19] tzdb_0.5.0             bit_4.6.0              xfun_0.61             
#>  [22] cachem_1.1.0           jsonlite_2.0.0         blob_1.3.0            
#>  [25] tictoc_1.2.1           BiocParallel_1.46.0    tweenr_2.0.3          
#>  [28] syuzhet_1.0.7          parallel_4.6.1         R6_2.6.1              
#>  [31] bslib_0.12.0           stringi_1.8.9          RColorBrewer_1.1-3    
#>  [34] textclean_0.9.7        parallelly_1.48.0      rpart_4.1.27          
#>  [37] jquerylib_0.1.4        Rcpp_1.1.2             knitr_1.52            
#>  [40] future.apply_1.20.2    clisymbols_1.2.0       timechange_0.4.0      
#>  [43] Matrix_1.7-6           splines_4.6.1          nnet_7.3-21           
#>  [46] igraph_2.3.3           tidyselect_1.2.1       rstudioapi_0.19.0     
#>  [49] yaml_2.3.12            viridis_0.6.5          codetools_0.2-20      
#>  [52] listenv_1.0.0          lattice_0.23-1         withr_3.0.3           
#>  [55] S7_0.2.2               evaluate_1.0.5         ontologyIndex_2.12    
#>  [58] future_1.75.0          survival_3.8-12        proxy_0.4-29          
#>  [61] polyclip_1.10-7        xml2_1.6.0             pillar_1.11.1         
#>  [64] BiocManager_1.30.27    lexicon_1.3.2          generics_0.1.4        
#>  [67] vroom_1.7.1            hms_1.1.4              scales_1.4.0          
#>  [70] ff_4.5.3               globals_0.19.1         xtable_1.8-8          
#>  [73] class_7.3-24           glue_1.8.1             RecordLinkage_0.4-12.6
#>  [76] maketools_1.3.2        tools_4.6.1            sys_3.4.3             
#>  [79] data.table_1.18.6.1    fgsea_1.38.0           buildtools_1.0.0      
#>  [82] graphlayouts_1.2.5     fastmatch_1.1-8        tidygraph_1.3.1       
#>  [85] cowplot_1.2.0          grid_4.6.1             ipred_0.9-16          
#>  [88] ggforce_0.5.0          cli_3.6.6              evd_2.3-7.1           
#>  [91] textshaping_1.0.5      viridisLite_0.4.3      svglite_2.2.2         
#>  [94] lava_1.9.3             gtable_0.3.6           sass_0.4.10           
#>  [97] digest_0.6.39          ggrepel_0.9.8          farver_2.1.2          
#> [100] memoise_2.0.1          htmltools_0.5.9        lifecycle_1.0.5       
#> [103] bit64_4.8.6            MASS_7.3-66

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.