Install package

if (!require("BiocManager"))
    install.packages("BiocManager")
BiocManager::install("MicrobiomeProfiler")

Introduction

MicrobiomeProfiler is a functional enrichment toolkit for microbiome data, built on the clusterProfiler ecosystem. It ships both a set of programmatic enrichment functions and an R/Shiny application with a user-friendly interface.

Annotation data is delivered in a hybrid way:

As shown in the following figure, the sidebar panel holds the input options and the main panel shows the output (the same layout is used by every analysis).

**KEGG enrichment analysis**

KEGG enrichment analysis

Getting Started Quickly

Run the application:

library(MicrobiomeProfiler)
run_MicrobiomeProfiler()

The application provides three entry points:

Supported Analysis

MicrobiomeProfiler provides the following enrichment analyses:

Where the analysis is defined over a background, the Shiny interface offers the default background or a customer_defined_universe supplied by the user.

Programmatic Usage

KEGG and COG

library(MicrobiomeProfiler)

data(Rat_data)
ko_res <- enrichKO(Rat_data)

data(Psoriasis_data)
cog_res <- enrichCOG(Psoriasis_data, dtype = "pathway")

eggNOG

eggNOG orthologous groups are used as the input identifiers. They are not plain OG0001-style numbers: an identifier carries the gene name, the taxonomic id and a suffix, for example Collectrin@131567|A-1*.

library(MicrobiomeProfiler)

og <- c(
    "Collectrin@131567|A-1*",
    "Collectrin@7711|C-2",
    "Collectrin@75365|II-17"
)

ora_res <- enrichEggNOG(og, minGSSize = 1, maxGSSize = 500)

ORA is the primary quick-start example for eggNOG. GSEA expects a named ranked numeric vector of the same identifiers. A ranked list has to span more than one pathway for the permutation p-values to be computable, so a handful of identifiers taken from a single pathway is not enough to obtain a result; in the Shiny app, the Example button of eggNOG + GSEA builds a ready-to-run ranked list from the published annotation artifact.

geneList <- c(2.5, 1.5, -0.8)
names(geneList) <- og

gse_res <- gseEggNOG(geneList, minGSSize = 1, maxGSSize = 500, seed = TRUE)

Microbe-Disease and Signature Enrichment

library(MicrobiomeProfiler)

data("microbiota_taxlist", package = "MicrobiomeProfiler")

bugsigdb_res <- enrichBugSigDB(microbiota_taxlist)
mda_res <- enrichMDA(microbiota_taxlist)

Case Study

Data input

Clicking the Example button fills the input area with a ready-to-run example for the selected analysis. Further parameters can be set below the input area, for instance the p value cutoff. There is a customer_defined_universe choice for users who want to define a specific universe for the enrichment analysis (this is also available for the other enrichment analyses). After that, click Submit to run the analysis. The Clean button clears the current results.

**Customize the universe**

Customize the universe

**Customize the universe**

Customize the universe

And then, the universe input box would be showed below.

For eggNOG in GSEA mode, provide one ranked item per line, that is an identifier and a numeric score separated by whitespace. The universe and the q value cutoff do not apply in this mode.

Run example

Here we showed the case study of example: Comparative functional KEGG enrichment analysis between Lung Microbioe in IPF and Healthy Individuals. 295 significantly differential KEGG orthologs between Lung Microbioe in idiopathnic pulmonary fibrosis Patients (IPF) and healthy individuals were reported for KEGG enrichment analysis.

**Case study**

Case study

The default visualization results showed top 10 significant terms. In addition, users can click the interested terms on the table, and click the Update to get the results. Furthermore, there are some output settings to adjust the output figure.

**To show interested tetms**

To show interested tetms

Annotation databases

MicrobiomeProfiler currently uses the following annotation resources:

External data delivery

Some annotation resources are distributed from the package GitHub Pages site instead of being bundled directly in the package tarball. This keeps the installed package smaller while allowing data artifacts to be refreshed independently.

Currently configured external datasets are bugsigdb, disbiome and eggnog.

You can inspect them with:

library(MicrobiomeProfiler)

available_datasets()
available_datasets(include_remote = TRUE)

To pre-download a dataset into the local cache:

download_dataset("bugsigdb")
download_dataset("disbiome", refresh = TRUE)
download_dataset("eggnog")

To inspect or clear the local cache:

dataset_cache_info()
dataset_cache_info("bugsigdb")

clear_dataset_cache("bugsigdb")
clear_dataset_cache()

At runtime, enrichBugSigDB(), enrichEggNOG() and gseEggNOG() download their external artifacts on demand, while enrichMDA() / gseMDA() use remote-first Disbiome data with a fallback to the bundled internal dataset when the remote resource is unavailable.

If the remote resource cannot be reached, enrichEggNOG() and gseEggNOG() report the failure instead of silently analysing incomplete data, and the Example button of the app reports that it could not build an example rather than inserting placeholder identifiers.

Session Information

#> R version 4.6.1 (2026-06-24)
#> Platform: x86_64-pc-linux-gnu
#> Running under: Ubuntu 24.04.4 LTS
#> 
#> Matrix products: default
#> BLAS:   /home/biocbuild/bbs-3.24-bioc/R/lib/libRblas.so 
#> LAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.12.0  LAPACK version 3.12.0
#> 
#> locale:
#>  [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C              
#>  [3] LC_TIME=en_GB              LC_COLLATE=C              
#>  [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     
#> 
#> loaded via a namespace (and not attached):
#>  [1] digest_0.6.39   R6_2.6.1        fastmap_1.2.0   xfun_0.61      
#>  [5] cachem_1.1.0    knitr_1.52      htmltools_0.5.9 png_0.1-9      
#>  [9] rmarkdown_2.32  lifecycle_1.0.5 prettydoc_0.4.1 cli_3.6.6      
#> [13] sass_0.4.10     jquerylib_0.1.4 compiler_4.6.1  tools_4.6.1    
#> [17] evaluate_1.0.5  bslib_0.12.0    yaml_2.3.12     otel_0.2.0     
#> [21] jsonlite_2.0.0  rlang_1.3.0