MaAsLin2 User Manual

MaAsLin2 is the next generation of MaAsLin (Microbiome Multivariable Association with Linear Models).

MaAsLin2 is comprehensive R package for efficiently determining multivariable association between clinical metadata and microbial meta-omics features. MaAsLin2 relies on general linear models to accommodate most modern epidemiological study designs, including cross-sectional and longitudinal, along with a variety of filtering, normalization, and transform methods.

If you use the MaAsLin2 software, please cite our manuscript:

Mallick H, Rahnavard A, McIver LJ, Ma S, Zhang Y, Nguyen LH, Tickle TL, Weingart G, Ren B, Schwager EH, Chatterjee S, Thompson KN, Wilkinson JE, Subramanian A, Lu Y, Waldron L, Paulson JN, Franzosa EA, Bravo HC, Huttenhower C (2021). Multivariable Association Discovery in Population-scale Meta-omics Studies. PLoS Computational Biology, 17(11):e1009442.

Check out the MaAsLin 2 tutorial for an overview of analysis options.

If you have questions, please direct it to :
MaAsLin2 Forum
Google Groups (Read only)


Description

MaAsLin2 finds associations between microbiome multi-omics features and complex metadata in population-scale epidemiological studies. The software includes multiple analysis methods (with support for multiple covariates and repeated measures), filtering, normalization, and transform options to customize analysis for your specific study.

Requirements

MaAsLin2 is an R package that can be run on the command line or as an R function.

Installation

MaAsLin2 can be run from the command line or as an R function. If only running from the command line, you do not need to install the MaAsLin2 package but you will need to install the MaAsLin2 dependencies.

From command line

  1. Download the source: MaAsLin2.tar.gz
  2. Decompress the download:
    • $ tar xzvf maaslin2.tar.gz
  3. Install the Bioconductor dependencies edgeR and metagenomeSeq.
  4. Install the CRAN dependencies:
    • $ R -q -e "install.packages(c('lmerTest','pbapply','car','dplyr','vegan','chemometrics','ggplot2','pheatmap','hash','logging','data.table','glmmTMB','MASS','cplm','pscl'), repos='http://cran.r-project.org')"
  5. Install the MaAsLin2 package (only r,equired if running as an R function):
    • $ R CMD INSTALL maaslin2

From R

Install Bioconductor and then install Maaslin2

if(!requireNamespace("BiocManager", quietly = TRUE))
    install.packages("BiocManager")
BiocManager::install("Maaslin2")

How to Run

MaAsLin2 can be run from the command line or as an R function. Both methods require the same arguments, have the same options, and use the same default settings.

Input Files

MaAsLin2 requires two input files.

  1. Data (or features) file
    • This file is tab-delimited.
    • Formatted with features as columns and samples as rows.
    • The transpose of this format is also okay.
    • Possible features in this file include taxonomy or genes.
  2. Metadata file
    • This file is tab-delimited.
    • Formatted with features as columns and samples as rows.
    • The transpose of this format is also okay.
    • Possible metadata in this file include gender or age.

The data file can contain samples not included in the metadata file (along with the reverse case). For both cases, those samples not included in both files will be removed from the analysis. Also the samples do not need to be in the same order in the two files.

NOTE: If running MaAsLin2 as a function, the data and metadata inputs can be of type data.frame instead of a path to a file.

Output Files

MaAsLin2 generates two types of output files: data and visualization.

  1. Data output files
    • all_results.tsv
      • This includes the same data as the data.frame returned.
      • This file contains all results ordered by increasing q-value.
      • The first columns are the metadata and feature names.
      • The next two columns are the value and coefficient from the model.
      • The next column is the standard deviation from the model.
      • The N column is the total number of data points.
      • The N.not.zero column is the total of non-zero data points.
      • The pvalue from the calculation is the second to last column.
      • The qvalue is computed with p.adjust with the correction method.
    • significant_results.tsv
      • This file is a subset of the results in the first file.
      • It only includes associations with q-values <= to the threshold.
    • ``features```
      • This folder includes the filtered, normalized, and transformed versions of the input feature table.
      • These steps are performed sequentially in the above order.
      • If an option is set such that a step does not change the data, the resulting table will still be output.
    • models.rds
      • This file contains a list with every model fit object.
      • It will only be generated if save_models is set to TRUE.
    • residuals.rds
      • This file contains a data frame with residuals for each feature.
    • fitted.rds
      • This file contains a data frame with fitted values for each feature.
    • ranef.rds
      • This file contains a data frame with extracted random effects for each feature (when random effects are specified).
    • maaslin2.log
      • This file contains all log information for the run.
      • It includes all settings, warnings, errors, and steps run.
  2. Visualization output files
    • heatmap.pdf
      • This file contains a heatmap of the significant associations.
    • [a-z/0-9]+.pdf
      • A plot is generated for each significant association.
      • Scatter plots are used for continuous metadata.
      • Box plots are for categorical data.
      • Data points plotted are after filtering but prior to normalization and transform.

Run a Demo

Example input files can be found in the inst/extdata folder of the MaAsLin2 source. The files provided were generated from the HMP2 data which can be downloaded from https://ibdmdb.org/ .

HMP2_taxonomy.tsv: is a tab-demilited file with species as columns and samples as rows. It is a subset of the taxonomy file so it just includes the species abundances for all samples.

HMP2_metadata.tsv: is a tab-delimited file with samples as rows and metadata as columns. It is a subset of the metadata file so that it just includes some of the fields.

Command line

$ Maaslin2.R --fixed_effects="diagnosis,dysbiosisnonIBD,dysbiosisUC,dysbiosisCD,antibiotics,age" --random_effects="site,subject" --standardize=FALSE inst/extdata/HMP2_taxonomy.tsv inst/extdata/HMP2_metadata.tsv demo_output

  • Make sure to provide the full path to the MaAsLin2 executable (ie ./R/Maaslin2.R).
  • In the demo command:
    • HMP2_taxonomy.tsv is the path to your data (or features) file
    • HMP2_metadata.tsv is the path to your metadata file
    • demo_output is the path to the folder to write the output

In R

library(Maaslin2)
input_data <- system.file(
    'extdata','HMP2_taxonomy.tsv', package="Maaslin2")
input_metadata <-system.file(
    'extdata','HMP2_metadata.tsv', package="Maaslin2")
fit_data <- Maaslin2(
    input_data, input_metadata, 'demo_output',
    fixed_effects = c('diagnosis', 'dysbiosisnonIBD','dysbiosisUC','dysbiosisCD', 'antibiotics', 'age'),
    random_effects = c('site', 'subject'),
    reference = "diagnosis,nonIBD",
    standardize = FALSE)
## [1] "Creating output folder"
## [1] "Creating output feature tables folder"
## [1] "Creating output fits folder"
## [1] "Creating output figures folder"
## 2026-04-20 19:05:57.705215 INFO::Writing function arguments to log file
## 2026-04-20 19:05:57.736375 INFO::Verifying options selected are valid
## 2026-04-20 19:05:57.767937 INFO::Determining format of input files
## 2026-04-20 19:05:57.769185 INFO::Input format is data samples as rows and metadata samples as rows
## 2026-04-20 19:05:57.773672 INFO::Formula for random effects: expr ~ (1 | site) + (1 | subject)
## 2026-04-20 19:05:57.774749 INFO::Formula for fixed effects: expr ~  diagnosis + dysbiosisnonIBD + dysbiosisUC + dysbiosisCD + antibiotics + age
## 2026-04-20 19:05:57.776907 INFO::Filter data based on min abundance and min prevalence
## 2026-04-20 19:05:57.777636 INFO::Total samples in data: 1595
## 2026-04-20 19:05:57.77832 INFO::Min samples required with min abundance for a feature not to be filtered: 159.500000
## 2026-04-20 19:05:57.783224 INFO::Total filtered features: 0
## 2026-04-20 19:05:57.784169 INFO::Filtered feature names from abundance and prevalence filtering:
## 2026-04-20 19:05:57.79255 INFO::Total filtered features with variance filtering: 0
## 2026-04-20 19:05:57.79354 INFO::Filtered feature names from variance filtering:
## 2026-04-20 19:05:57.794258 INFO::Running selected normalization method: TSS
## 2026-04-20 19:05:58.894978 INFO::Bypass z-score application to metadata
## 2026-04-20 19:05:58.896042 INFO::Running selected transform method: LOG
## 2026-04-20 19:05:58.909296 INFO::Running selected analysis method: LM
## 2026-04-20 19:05:59.244384 INFO::Fitting model to feature number 1, Bifidobacterium.adolescentis
## boundary (singular) fit: see help('isSingular')
## 2026-04-20 19:06:00.137496 INFO::Fitting model to feature number 2, Bifidobacterium.bifidum
## 2026-04-20 19:06:00.296094 INFO::Fitting model to feature number 3, Bifidobacterium.longum
## 2026-04-20 19:06:00.453582 INFO::Fitting model to feature number 4, Bifidobacterium.pseudocatenulatum
## boundary (singular) fit: see help('isSingular')
## 2026-04-20 19:06:00.599733 INFO::Fitting model to feature number 5, Collinsella.aerofaciens
## 2026-04-20 19:06:00.751761 INFO::Fitting model to feature number 6, Bacteroides.caccae
## boundary (singular) fit: see help('isSingular')
## 2026-04-20 19:06:00.886858 INFO::Fitting model to feature number 7, Bacteroides.cellulosilyticus
## 2026-04-20 19:06:01.030314 INFO::Fitting model to feature number 8, Bacteroides.dorei
## 2026-04-20 19:06:01.178982 INFO::Fitting model to feature number 9, Bacteroides.eggerthii
## 2026-04-20 19:06:01.318571 INFO::Fitting model to feature number 10, Bacteroides.faecis
## 2026-04-20 19:06:01.460743 INFO::Fitting model to feature number 11, Bacteroides.finegoldii
## boundary (singular) fit: see help('isSingular')
## Feature Bacteroides.finegoldii : simpleWarning: Model failed to converge with 1 negative eigenvalue: -7.9e+01
## 2026-04-20 19:06:01.579394 WARNING::Fitting problem for feature 11 a warning was issued
## boundary (singular) fit: see help('isSingular')
## Warning: Model failed to converge with 1 negative eigenvalue: -7.9e+01
## 2026-04-20 19:06:01.716728 INFO::Fitting model to feature number 12, Bacteroides.fragilis
## boundary (singular) fit: see help('isSingular')
## 2026-04-20 19:06:01.849375 INFO::Fitting model to feature number 13, Bacteroides.intestinalis
## boundary (singular) fit: see help('isSingular')
## 2026-04-20 19:06:01.992825 INFO::Fitting model to feature number 14, Bacteroides.massiliensis
## 2026-04-20 19:06:02.131402 INFO::Fitting model to feature number 15, Bacteroides.ovatus
## boundary (singular) fit: see help('isSingular')
## 2026-04-20 19:06:02.26061 INFO::Fitting model to feature number 16, Bacteroides.salyersiae
## 2026-04-20 19:06:02.402794 INFO::Fitting model to feature number 17, Bacteroides.stercoris
## 2026-04-20 19:06:02.542681 INFO::Fitting model to feature number 18, Bacteroides.thetaiotaomicron
## boundary (singular) fit: see help('isSingular')
## 2026-04-20 19:06:02.67524 INFO::Fitting model to feature number 19, Bacteroides.uniformis
## boundary (singular) fit: see help('isSingular')
## 2026-04-20 19:06:02.840459 INFO::Fitting model to feature number 20, Bacteroides.vulgatus
## boundary (singular) fit: see help('isSingular')
## 2026-04-20 19:06:02.986718 INFO::Fitting model to feature number 21, Bacteroides.xylanisolvens
## boundary (singular) fit: see help('isSingular')
## 2026-04-20 19:06:03.139003 INFO::Fitting model to feature number 22, Bacteroidales.bacterium.ph8
## 2026-04-20 19:06:03.274957 INFO::Fitting model to feature number 23, Barnesiella.intestinihominis
## 2026-04-20 19:06:03.415689 INFO::Fitting model to feature number 24, Coprobacter.fastidiosus
## 2026-04-20 19:06:03.567491 INFO::Fitting model to feature number 25, Odoribacter.splanchnicus
## 2026-04-20 19:06:03.70754 INFO::Fitting model to feature number 26, Parabacteroides.distasonis
## boundary (singular) fit: see help('isSingular')
## 2026-04-20 19:06:03.847333 INFO::Fitting model to feature number 27, Parabacteroides.goldsteinii
## 2026-04-20 19:06:03.995185 INFO::Fitting model to feature number 28, Parabacteroides.merdae
## 2026-04-20 19:06:04.13518 INFO::Fitting model to feature number 29, Parabacteroides.unclassified
## boundary (singular) fit: see help('isSingular')
## 2026-04-20 19:06:04.530491 INFO::Fitting model to feature number 30, Paraprevotella.clara
## 2026-04-20 19:06:04.673059 INFO::Fitting model to feature number 31, Paraprevotella.unclassified
## 2026-04-20 19:06:04.814174 INFO::Fitting model to feature number 32, Prevotella.copri
## boundary (singular) fit: see help('isSingular')
## 2026-04-20 19:06:04.959654 INFO::Fitting model to feature number 33, Alistipes.finegoldii
## boundary (singular) fit: see help('isSingular')
## 2026-04-20 19:06:05.112449 INFO::Fitting model to feature number 34, Alistipes.onderdonkii
## boundary (singular) fit: see help('isSingular')
## 2026-04-20 19:06:05.278017 INFO::Fitting model to feature number 35, Alistipes.putredinis
## boundary (singular) fit: see help('isSingular')
## 2026-04-20 19:06:05.422144 INFO::Fitting model to feature number 36, Alistipes.shahii
## 2026-04-20 19:06:05.573652 INFO::Fitting model to feature number 37, Alistipes.unclassified
## 2026-04-20 19:06:05.712205 INFO::Fitting model to feature number 38, Streptococcus.salivarius
## 2026-04-20 19:06:05.856939 INFO::Fitting model to feature number 39, Clostridium.bolteae
## boundary (singular) fit: see help('isSingular')
## 2026-04-20 19:06:06.005488 INFO::Fitting model to feature number 40, Clostridium.citroniae
## boundary (singular) fit: see help('isSingular')
## Feature Clostridium.citroniae : simpleWarning: Model failed to converge with 1 negative eigenvalue: -3.4e+01
## 2026-04-20 19:06:06.117257 WARNING::Fitting problem for feature 40 a warning was issued
## boundary (singular) fit: see help('isSingular')
## Warning: Model failed to converge with 1 negative eigenvalue: -3.4e+01
## 2026-04-20 19:06:06.250071 INFO::Fitting model to feature number 41, Clostridium.clostridioforme
## boundary (singular) fit: see help('isSingular')
## 2026-04-20 19:06:06.382231 INFO::Fitting model to feature number 42, Clostridium.hathewayi
## boundary (singular) fit: see help('isSingular')
## 2026-04-20 19:06:06.522185 INFO::Fitting model to feature number 43, Clostridium.leptum
## 2026-04-20 19:06:06.671149 INFO::Fitting model to feature number 44, Clostridium.nexile
## 2026-04-20 19:06:06.804749 INFO::Fitting model to feature number 45, Clostridium.symbiosum
## boundary (singular) fit: see help('isSingular')
## 2026-04-20 19:06:06.93822 INFO::Fitting model to feature number 46, Flavonifractor.plautii
## boundary (singular) fit: see help('isSingular')
## 2026-04-20 19:06:07.075604 INFO::Fitting model to feature number 47, Eubacterium.eligens
## 2026-04-20 19:06:07.2154 INFO::Fitting model to feature number 48, Eubacterium.hallii
## 2026-04-20 19:06:07.359135 INFO::Fitting model to feature number 49, Eubacterium.rectale
## boundary (singular) fit: see help('isSingular')
## 2026-04-20 19:06:07.498575 INFO::Fitting model to feature number 50, Eubacterium.siraeum
## boundary (singular) fit: see help('isSingular')
## 2026-04-20 19:06:07.626575 INFO::Fitting model to feature number 51, Eubacterium.sp.3.1.31
## boundary (singular) fit: see help('isSingular')
## 2026-04-20 19:06:07.796124 INFO::Fitting model to feature number 52, Eubacterium.ventriosum
## boundary (singular) fit: see help('isSingular')
## 2026-04-20 19:06:07.923621 INFO::Fitting model to feature number 53, Ruminococcus.gnavus
## boundary (singular) fit: see help('isSingular')
## 2026-04-20 19:06:08.057186 INFO::Fitting model to feature number 54, Ruminococcus.obeum
## 2026-04-20 19:06:08.204157 INFO::Fitting model to feature number 55, Ruminococcus.torques
## 2026-04-20 19:06:08.346736 INFO::Fitting model to feature number 56, Coprococcus.comes
## 2026-04-20 19:06:08.482596 INFO::Fitting model to feature number 57, Dorea.longicatena
## boundary (singular) fit: see help('isSingular')
## 2026-04-20 19:06:08.618148 INFO::Fitting model to feature number 58, Lachnospiraceae.bacterium.1.1.57FAA
## boundary (singular) fit: see help('isSingular')
## 2026-04-20 19:06:08.757098 INFO::Fitting model to feature number 59, Lachnospiraceae.bacterium.3.1.46FAA
## boundary (singular) fit: see help('isSingular')
## 2026-04-20 19:06:08.896959 INFO::Fitting model to feature number 60, Roseburia.hominis
## boundary (singular) fit: see help('isSingular')
## 2026-04-20 19:06:09.03108 INFO::Fitting model to feature number 61, Roseburia.intestinalis
## 2026-04-20 19:06:09.158397 INFO::Fitting model to feature number 62, Roseburia.inulinivorans
## boundary (singular) fit: see help('isSingular')
## 2026-04-20 19:06:09.289106 INFO::Fitting model to feature number 63, Roseburia.unclassified
## boundary (singular) fit: see help('isSingular')
## 2026-04-20 19:06:09.427744 INFO::Fitting model to feature number 64, Oscillibacter.unclassified
## 2026-04-20 19:06:09.575108 INFO::Fitting model to feature number 65, Peptostreptococcaceae.noname.unclassified
## 2026-04-20 19:06:09.712295 INFO::Fitting model to feature number 66, Faecalibacterium.prausnitzii
## 2026-04-20 19:06:09.850781 INFO::Fitting model to feature number 67, Ruminococcus.bromii
## boundary (singular) fit: see help('isSingular')
## 2026-04-20 19:06:09.98367 INFO::Fitting model to feature number 68, Ruminococcus.callidus
## 2026-04-20 19:06:10.11643 INFO::Fitting model to feature number 69, Ruminococcus.lactaris
## 2026-04-20 19:06:10.259352 INFO::Fitting model to feature number 70, Subdoligranulum.unclassified
## boundary (singular) fit: see help('isSingular')
## 2026-04-20 19:06:10.391902 INFO::Fitting model to feature number 71, Coprobacillus.unclassified
## 2026-04-20 19:06:10.540933 INFO::Fitting model to feature number 72, Acidaminococcus.unclassified
## 2026-04-20 19:06:10.690367 INFO::Fitting model to feature number 73, Dialister.invisus
## boundary (singular) fit: see help('isSingular')
## 2026-04-20 19:06:10.824842 INFO::Fitting model to feature number 74, Veillonella.atypica
## 2026-04-20 19:06:10.978018 INFO::Fitting model to feature number 75, Veillonella.dispar
## boundary (singular) fit: see help('isSingular')
## 2026-04-20 19:06:11.112781 INFO::Fitting model to feature number 76, Veillonella.parvula
## boundary (singular) fit: see help('isSingular')
## 2026-04-20 19:06:11.246344 INFO::Fitting model to feature number 77, Veillonella.unclassified
## 2026-04-20 19:06:11.379528 INFO::Fitting model to feature number 78, Burkholderiales.bacterium.1.1.47
## 2026-04-20 19:06:11.774203 INFO::Fitting model to feature number 79, Parasutterella.excrementihominis
## 2026-04-20 19:06:11.910758 INFO::Fitting model to feature number 80, Sutterella.wadsworthensis
## 2026-04-20 19:06:12.055364 INFO::Fitting model to feature number 81, Bilophila.unclassified
## 2026-04-20 19:06:12.205623 INFO::Fitting model to feature number 82, Escherichia.coli
## 2026-04-20 19:06:12.354998 INFO::Fitting model to feature number 83, Escherichia.unclassified
## 2026-04-20 19:06:12.483596 INFO::Fitting model to feature number 84, Klebsiella.pneumoniae
## boundary (singular) fit: see help('isSingular')
## 2026-04-20 19:06:12.612846 INFO::Fitting model to feature number 85, Haemophilus.parainfluenzae
## boundary (singular) fit: see help('isSingular')
## 2026-04-20 19:06:12.74607 INFO::Fitting model to feature number 86, Akkermansia.muciniphila
## 2026-04-20 19:06:12.885042 INFO::Fitting model to feature number 87, C2likevirus.unclassified
## 2026-04-20 19:06:13.065749 INFO::Counting total values for each feature
## 2026-04-20 19:06:13.094148 INFO::Writing filtered data to file demo_output/features/filtered_data.tsv
## 2026-04-20 19:06:13.186842 INFO::Writing filtered, normalized data to file demo_output/features/filtered_data_norm.tsv
## 2026-04-20 19:06:13.281932 INFO::Writing filtered, normalized, transformed data to file demo_output/features/filtered_data_norm_transformed.tsv
## 2026-04-20 19:06:13.481975 INFO::Writing residuals to file demo_output/fits/residuals.rds
## 2026-04-20 19:06:13.838671 INFO::Writing fitted values to file demo_output/fits/fitted.rds
## 2026-04-20 19:06:14.165734 INFO::Writing extracted random effects to file demo_output/fits/ranef.rds
## 2026-04-20 19:06:14.212974 INFO::Writing all results to file (ordered by increasing q-values): demo_output/all_results.tsv
## 2026-04-20 19:06:14.240644 INFO::Writing the significant results (those which are less than or equal to the threshold of 0.250000 ) to file (ordered by increasing q-values): demo_output/significant_results.tsv
## 2026-04-20 19:06:14.258064 INFO::Writing heatmap of significant results to file: demo_output/heatmap.pdf
## 2026-04-20 19:06:16.455056 INFO::Writing association plots (one for each significant association) to output folder: demo_output
## 2026-04-20 19:06:16.567582 INFO::Plotting associations from most to least significant, grouped by metadata
## 2026-04-20 19:06:16.593158 INFO::Plotting data for metadata number 1, dysbiosisCD
## 2026-04-20 19:06:16.634347 INFO::Creating boxplot for categorical data, dysbiosisCD vs Faecalibacterium.prausnitzii
## 2026-04-20 19:06:17.835593 INFO::Creating boxplot for categorical data, dysbiosisCD vs Subdoligranulum.unclassified
## 2026-04-20 19:06:18.230265 INFO::Creating boxplot for categorical data, dysbiosisCD vs Bacteroides.uniformis
## 2026-04-20 19:06:18.602076 INFO::Creating boxplot for categorical data, dysbiosisCD vs Eubacterium.rectale
## 2026-04-20 19:06:18.98054 INFO::Creating boxplot for categorical data, dysbiosisCD vs Bacteroides.vulgatus
## 2026-04-20 19:06:19.345617 INFO::Creating boxplot for categorical data, dysbiosisCD vs Bacteroides.ovatus
## 2026-04-20 19:06:19.713397 INFO::Creating boxplot for categorical data, dysbiosisCD vs Ruminococcus.obeum
## 2026-04-20 19:06:20.083594 INFO::Creating boxplot for categorical data, dysbiosisCD vs Oscillibacter.unclassified
## 2026-04-20 19:06:20.458776 INFO::Creating boxplot for categorical data, dysbiosisCD vs Roseburia.inulinivorans
## 2026-04-20 19:06:20.833622 INFO::Creating boxplot for categorical data, dysbiosisCD vs Roseburia.hominis
## 2026-04-20 19:06:21.235419 INFO::Creating boxplot for categorical data, dysbiosisCD vs Bacteroides.thetaiotaomicron
## 2026-04-20 19:06:21.618286 INFO::Creating boxplot for categorical data, dysbiosisCD vs Alistipes.putredinis
## 2026-04-20 19:06:21.990457 INFO::Creating boxplot for categorical data, dysbiosisCD vs Parabacteroides.distasonis
## 2026-04-20 19:06:22.35167 INFO::Creating boxplot for categorical data, dysbiosisCD vs Bacteroides.dorei
## 2026-04-20 19:06:22.718841 INFO::Creating boxplot for categorical data, dysbiosisCD vs Alistipes.shahii
## 2026-04-20 19:06:23.088805 INFO::Creating boxplot for categorical data, dysbiosisCD vs Bacteroides.xylanisolvens
## 2026-04-20 19:06:23.451386 INFO::Creating boxplot for categorical data, dysbiosisCD vs Clostridium.leptum
## 2026-04-20 19:06:23.818473 INFO::Creating boxplot for categorical data, dysbiosisCD vs Dorea.longicatena
## 2026-04-20 19:06:24.180944 INFO::Creating boxplot for categorical data, dysbiosisCD vs Bacteroides.caccae
## 2026-04-20 19:06:24.548836 INFO::Creating boxplot for categorical data, dysbiosisCD vs Lachnospiraceae.bacterium.3.1.46FAA
## 2026-04-20 19:06:24.918611 INFO::Creating boxplot for categorical data, dysbiosisCD vs Escherichia.coli
## 2026-04-20 19:06:25.286001 INFO::Creating boxplot for categorical data, dysbiosisCD vs Klebsiella.pneumoniae
## 2026-04-20 19:06:25.724338 INFO::Creating boxplot for categorical data, dysbiosisCD vs Bilophila.unclassified
## 2026-04-20 19:06:26.079193 INFO::Creating boxplot for categorical data, dysbiosisCD vs Alistipes.finegoldii
## 2026-04-20 19:06:26.455402 INFO::Creating boxplot for categorical data, dysbiosisCD vs Eubacterium.eligens
## 2026-04-20 19:06:26.828822 INFO::Creating boxplot for categorical data, dysbiosisCD vs Bacteroides.stercoris
## 2026-04-20 19:06:27.205151 INFO::Creating boxplot for categorical data, dysbiosisCD vs Coprococcus.comes
## 2026-04-20 19:06:27.578154 INFO::Creating boxplot for categorical data, dysbiosisCD vs Bacteroides.fragilis
## 2026-04-20 19:06:27.956635 INFO::Creating boxplot for categorical data, dysbiosisCD vs Bacteroides.finegoldii
## 2026-04-20 19:06:28.33898 INFO::Creating boxplot for categorical data, dysbiosisCD vs Eubacterium.hallii
## 2026-04-20 19:06:28.709639 INFO::Creating boxplot for categorical data, dysbiosisCD vs Bacteroides.faecis
## 2026-04-20 19:06:29.078957 INFO::Creating boxplot for categorical data, dysbiosisCD vs Paraprevotella.clara
## 2026-04-20 19:06:29.454782 INFO::Creating boxplot for categorical data, dysbiosisCD vs Eubacterium.siraeum
## 2026-04-20 19:06:29.832891 INFO::Creating boxplot for categorical data, dysbiosisCD vs Parabacteroides.merdae
## 2026-04-20 19:06:30.209641 INFO::Creating boxplot for categorical data, dysbiosisCD vs Paraprevotella.unclassified
## 2026-04-20 19:06:30.589382 INFO::Creating boxplot for categorical data, dysbiosisCD vs Collinsella.aerofaciens
## 2026-04-20 19:06:30.958014 INFO::Creating boxplot for categorical data, dysbiosisCD vs Odoribacter.splanchnicus
## 2026-04-20 19:06:31.332821 INFO::Creating boxplot for categorical data, dysbiosisCD vs Clostridium.clostridioforme
## 2026-04-20 19:06:31.701545 INFO::Creating boxplot for categorical data, dysbiosisCD vs Bacteroides.eggerthii
## 2026-04-20 19:06:32.069293 INFO::Creating boxplot for categorical data, dysbiosisCD vs Alistipes.onderdonkii
## 2026-04-20 19:06:32.437699 INFO::Creating boxplot for categorical data, dysbiosisCD vs Eubacterium.ventriosum
## 2026-04-20 19:06:32.815714 INFO::Creating boxplot for categorical data, dysbiosisCD vs Ruminococcus.lactaris
## 2026-04-20 19:06:33.188202 INFO::Creating boxplot for categorical data, dysbiosisCD vs Burkholderiales.bacterium.1.1.47
## 2026-04-20 19:06:33.56136 INFO::Creating boxplot for categorical data, dysbiosisCD vs Dialister.invisus
## 2026-04-20 19:06:33.929151 INFO::Creating boxplot for categorical data, dysbiosisCD vs Ruminococcus.bromii
## 2026-04-20 19:06:34.589358 INFO::Creating boxplot for categorical data, dysbiosisCD vs Parasutterella.excrementihominis
## 2026-04-20 19:06:34.958517 INFO::Creating boxplot for categorical data, dysbiosisCD vs Alistipes.unclassified
## 2026-04-20 19:06:35.339761 INFO::Creating boxplot for categorical data, dysbiosisCD vs Ruminococcus.torques
## 2026-04-20 19:06:35.685339 INFO::Creating boxplot for categorical data, dysbiosisCD vs Coprobacillus.unclassified
## 2026-04-20 19:06:36.048721 INFO::Creating boxplot for categorical data, dysbiosisCD vs Bacteroides.cellulosilyticus
## 2026-04-20 19:06:36.396563 INFO::Creating boxplot for categorical data, dysbiosisCD vs Roseburia.intestinalis
## 2026-04-20 19:06:36.7598 INFO::Creating boxplot for categorical data, dysbiosisCD vs Parabacteroides.unclassified
## 2026-04-20 19:06:37.121063 INFO::Creating boxplot for categorical data, dysbiosisCD vs Acidaminococcus.unclassified
## 2026-04-20 19:06:37.468621 INFO::Creating boxplot for categorical data, dysbiosisCD vs Barnesiella.intestinihominis
## 2026-04-20 19:06:37.814807 INFO::Creating boxplot for categorical data, dysbiosisCD vs Bacteroides.massiliensis
## 2026-04-20 19:06:38.177033 INFO::Creating boxplot for categorical data, dysbiosisCD vs Eubacterium.sp.3.1.31
## 2026-04-20 19:06:38.529828 INFO::Creating boxplot for categorical data, dysbiosisCD vs Bacteroides.salyersiae
## 2026-04-20 19:06:38.882108 INFO::Creating boxplot for categorical data, dysbiosisCD vs Bacteroidales.bacterium.ph8
## 2026-04-20 19:06:39.229369 INFO::Creating boxplot for categorical data, dysbiosisCD vs Clostridium.citroniae
## 2026-04-20 19:06:39.607182 INFO::Creating boxplot for categorical data, dysbiosisCD vs Flavonifractor.plautii
## 2026-04-20 19:06:39.985215 INFO::Creating boxplot for categorical data, dysbiosisCD vs Parabacteroides.goldsteinii
## 2026-04-20 19:06:40.339781 INFO::Creating boxplot for categorical data, dysbiosisCD vs Bifidobacterium.longum
## 2026-04-20 19:06:40.686831 INFO::Creating boxplot for categorical data, dysbiosisCD vs Lachnospiraceae.bacterium.1.1.57FAA
## 2026-04-20 19:06:44.454109 INFO::Plotting data for metadata number 2, dysbiosisUC
## 2026-04-20 19:06:44.456002 INFO::Creating boxplot for categorical data, dysbiosisUC vs Subdoligranulum.unclassified
## 2026-04-20 19:06:44.793023 INFO::Creating boxplot for categorical data, dysbiosisUC vs Faecalibacterium.prausnitzii
## 2026-04-20 19:06:45.163089 INFO::Creating boxplot for categorical data, dysbiosisUC vs Bacteroides.caccae
## 2026-04-20 19:06:45.535946 INFO::Creating boxplot for categorical data, dysbiosisUC vs Oscillibacter.unclassified
## 2026-04-20 19:06:45.91583 INFO::Creating boxplot for categorical data, dysbiosisUC vs Bacteroides.uniformis
## 2026-04-20 19:06:46.287985 INFO::Creating boxplot for categorical data, dysbiosisUC vs Eubacterium.siraeum
## 2026-04-20 19:06:46.659141 INFO::Creating boxplot for categorical data, dysbiosisUC vs Bacteroides.ovatus
## 2026-04-20 19:06:47.020869 INFO::Creating boxplot for categorical data, dysbiosisUC vs Bacteroides.fragilis
## 2026-04-20 19:06:47.383582 INFO::Creating boxplot for categorical data, dysbiosisUC vs Alistipes.shahii
## 2026-04-20 19:06:47.758495 INFO::Creating boxplot for categorical data, dysbiosisUC vs Eubacterium.rectale
## 2026-04-20 19:06:48.12921 INFO::Creating boxplot for categorical data, dysbiosisUC vs Roseburia.hominis
## 2026-04-20 19:06:48.513639 INFO::Creating boxplot for categorical data, dysbiosisUC vs Alistipes.putredinis
## 2026-04-20 19:06:48.91644 INFO::Creating boxplot for categorical data, dysbiosisUC vs Lachnospiraceae.bacterium.3.1.46FAA
## 2026-04-20 19:06:49.287278 INFO::Creating boxplot for categorical data, dysbiosisUC vs Eubacterium.hallii
## 2026-04-20 19:06:49.664356 INFO::Creating boxplot for categorical data, dysbiosisUC vs Bacteroides.xylanisolvens
## 2026-04-20 19:06:50.044373 INFO::Creating boxplot for categorical data, dysbiosisUC vs Bacteroides.stercoris
## 2026-04-20 19:06:50.414991 INFO::Creating boxplot for categorical data, dysbiosisUC vs Alistipes.finegoldii
## 2026-04-20 19:06:50.784906 INFO::Creating boxplot for categorical data, dysbiosisUC vs Barnesiella.intestinihominis
## 2026-04-20 19:06:51.157682 INFO::Creating boxplot for categorical data, dysbiosisUC vs Clostridium.leptum
## 2026-04-20 19:06:51.520925 INFO::Creating boxplot for categorical data, dysbiosisUC vs Ruminococcus.gnavus
## 2026-04-20 19:06:51.934982 INFO::Creating boxplot for categorical data, dysbiosisUC vs Alistipes.onderdonkii
## 2026-04-20 19:06:52.315131 INFO::Creating boxplot for categorical data, dysbiosisUC vs Flavonifractor.plautii
## 2026-04-20 19:06:52.696929 INFO::Creating boxplot for categorical data, dysbiosisUC vs Parabacteroides.merdae
## 2026-04-20 19:06:53.07652 INFO::Creating boxplot for categorical data, dysbiosisUC vs Bacteroides.cellulosilyticus
## 2026-04-20 19:06:53.457161 INFO::Creating boxplot for categorical data, dysbiosisUC vs Bifidobacterium.longum
## 2026-04-20 19:06:53.830812 INFO::Creating boxplot for categorical data, dysbiosisUC vs Klebsiella.pneumoniae
## 2026-04-20 19:06:54.208091 INFO::Creating boxplot for categorical data, dysbiosisUC vs Clostridium.citroniae
## 2026-04-20 19:06:54.620955 INFO::Creating boxplot for categorical data, dysbiosisUC vs Eubacterium.ventriosum
## 2026-04-20 19:06:54.992856 INFO::Creating boxplot for categorical data, dysbiosisUC vs Parabacteroides.distasonis
## 2026-04-20 19:06:55.368004 INFO::Creating boxplot for categorical data, dysbiosisUC vs Parabacteroides.goldsteinii
## 2026-04-20 19:06:55.752502 INFO::Creating boxplot for categorical data, dysbiosisUC vs Ruminococcus.torques
## 2026-04-20 19:06:56.129506 INFO::Creating boxplot for categorical data, dysbiosisUC vs Bacteroidales.bacterium.ph8
## 2026-04-20 19:06:56.520525 INFO::Creating boxplot for categorical data, dysbiosisUC vs Ruminococcus.obeum
## 2026-04-20 19:06:56.893963 INFO::Creating boxplot for categorical data, dysbiosisUC vs Bifidobacterium.bifidum
## 2026-04-20 19:06:57.279127 INFO::Creating boxplot for categorical data, dysbiosisUC vs Bifidobacterium.adolescentis
## 2026-04-20 19:06:57.653902 INFO::Creating boxplot for categorical data, dysbiosisUC vs Collinsella.aerofaciens
## 2026-04-20 19:06:58.044511 INFO::Creating boxplot for categorical data, dysbiosisUC vs Clostridium.hathewayi
## 2026-04-20 19:06:58.428204 INFO::Creating boxplot for categorical data, dysbiosisUC vs Bilophila.unclassified
## 2026-04-20 19:06:58.801202 INFO::Creating boxplot for categorical data, dysbiosisUC vs Eubacterium.eligens
## 2026-04-20 19:06:59.17747 INFO::Creating boxplot for categorical data, dysbiosisUC vs Bacteroides.vulgatus
## 2026-04-20 19:06:59.613942 INFO::Creating boxplot for categorical data, dysbiosisUC vs Clostridium.bolteae
## 2026-04-20 19:07:00.00632 INFO::Creating boxplot for categorical data, dysbiosisUC vs Dialister.invisus
## 2026-04-20 19:07:00.392497 INFO::Creating boxplot for categorical data, dysbiosisUC vs Ruminococcus.lactaris
## 2026-04-20 19:07:00.776791 INFO::Creating boxplot for categorical data, dysbiosisUC vs Burkholderiales.bacterium.1.1.47
## 2026-04-20 19:07:04.652075 INFO::Plotting data for metadata number 3, dysbiosisnonIBD
## 2026-04-20 19:07:04.6541 INFO::Creating boxplot for categorical data, dysbiosisnonIBD vs Faecalibacterium.prausnitzii
## 2026-04-20 19:07:05.008049 INFO::Creating boxplot for categorical data, dysbiosisnonIBD vs Eubacterium.rectale
## 2026-04-20 19:07:05.397345 INFO::Creating boxplot for categorical data, dysbiosisnonIBD vs Eubacterium.sp.3.1.31
## 2026-04-20 19:07:05.785988 INFO::Creating boxplot for categorical data, dysbiosisnonIBD vs Roseburia.hominis
## 2026-04-20 19:07:06.160174 INFO::Creating boxplot for categorical data, dysbiosisnonIBD vs Subdoligranulum.unclassified
## 2026-04-20 19:07:06.543524 INFO::Creating boxplot for categorical data, dysbiosisnonIBD vs Lachnospiraceae.bacterium.3.1.46FAA
## 2026-04-20 19:07:06.928891 INFO::Creating boxplot for categorical data, dysbiosisnonIBD vs Ruminococcus.torques
## 2026-04-20 19:07:07.317974 INFO::Creating boxplot for categorical data, dysbiosisnonIBD vs Clostridium.leptum
## 2026-04-20 19:07:07.707886 INFO::Creating boxplot for categorical data, dysbiosisnonIBD vs Odoribacter.splanchnicus
## 2026-04-20 19:07:08.091756 INFO::Creating boxplot for categorical data, dysbiosisnonIBD vs Escherichia.coli
## 2026-04-20 19:07:08.514338 INFO::Creating boxplot for categorical data, dysbiosisnonIBD vs Ruminococcus.obeum
## 2026-04-20 19:07:08.90212 INFO::Creating boxplot for categorical data, dysbiosisnonIBD vs Bilophila.unclassified
## 2026-04-20 19:07:09.30026 INFO::Creating boxplot for categorical data, dysbiosisnonIBD vs Bacteroides.uniformis
## 2026-04-20 19:07:09.694881 INFO::Creating boxplot for categorical data, dysbiosisnonIBD vs Eubacterium.eligens
## 2026-04-20 19:07:10.096671 INFO::Creating boxplot for categorical data, dysbiosisnonIBD vs Klebsiella.pneumoniae
## 2026-04-20 19:07:10.510334 INFO::Creating boxplot for categorical data, dysbiosisnonIBD vs Ruminococcus.bromii
## 2026-04-20 19:07:10.892638 INFO::Creating boxplot for categorical data, dysbiosisnonIBD vs Bacteroides.vulgatus
## 2026-04-20 19:07:11.288248 INFO::Creating boxplot for categorical data, dysbiosisnonIBD vs C2likevirus.unclassified
## 2026-04-20 19:07:11.689987 INFO::Creating boxplot for categorical data, dysbiosisnonIBD vs Bifidobacterium.adolescentis
## 2026-04-20 19:07:12.072874 INFO::Creating boxplot for categorical data, dysbiosisnonIBD vs Alistipes.finegoldii
## 2026-04-20 19:07:12.459999 INFO::Creating boxplot for categorical data, dysbiosisnonIBD vs Roseburia.inulinivorans
## 2026-04-20 19:07:12.852212 INFO::Creating boxplot for categorical data, dysbiosisnonIBD vs Alistipes.onderdonkii
## 2026-04-20 19:07:13.241337 INFO::Creating boxplot for categorical data, dysbiosisnonIBD vs Roseburia.unclassified
## 2026-04-20 19:07:13.647162 INFO::Creating boxplot for categorical data, dysbiosisnonIBD vs Eubacterium.hallii
## 2026-04-20 19:07:14.035604 INFO::Creating boxplot for categorical data, dysbiosisnonIBD vs Roseburia.intestinalis
## 2026-04-20 19:07:14.423404 INFO::Creating boxplot for categorical data, dysbiosisnonIBD vs Prevotella.copri
## 2026-04-20 19:07:14.812262 INFO::Creating boxplot for categorical data, dysbiosisnonIBD vs Bacteroides.dorei
## 2026-04-20 19:07:15.208781 INFO::Creating boxplot for categorical data, dysbiosisnonIBD vs Bacteroides.fragilis
## 2026-04-20 19:07:15.662612 INFO::Creating boxplot for categorical data, dysbiosisnonIBD vs Alistipes.shahii
## 2026-04-20 19:07:19.607378 INFO::Plotting data for metadata number 4, antibiotics
## 2026-04-20 19:07:19.609282 INFO::Creating boxplot for categorical data, antibiotics vs Roseburia.inulinivorans
## 2026-04-20 19:07:19.961632 INFO::Creating boxplot for categorical data, antibiotics vs Roseburia.hominis
## 2026-04-20 19:07:20.351444 INFO::Creating boxplot for categorical data, antibiotics vs Eubacterium.rectale
## 2026-04-20 19:07:20.744361 INFO::Creating boxplot for categorical data, antibiotics vs Dialister.invisus
## 2026-04-20 19:07:21.135359 INFO::Creating boxplot for categorical data, antibiotics vs Roseburia.intestinalis
## 2026-04-20 19:07:21.525263 INFO::Creating boxplot for categorical data, antibiotics vs Dorea.longicatena
## 2026-04-20 19:07:21.914254 INFO::Creating boxplot for categorical data, antibiotics vs Ruminococcus.callidus
## 2026-04-20 19:07:22.298288 INFO::Creating boxplot for categorical data, antibiotics vs Ruminococcus.bromii
## 2026-04-20 19:07:22.669749 INFO::Creating boxplot for categorical data, antibiotics vs Ruminococcus.obeum
## 2026-04-20 19:07:23.042805 INFO::Creating boxplot for categorical data, antibiotics vs Klebsiella.pneumoniae
## 2026-04-20 19:07:23.424483 INFO::Creating boxplot for categorical data, antibiotics vs Bifidobacterium.adolescentis
## 2026-04-20 19:07:23.795388 INFO::Creating boxplot for categorical data, antibiotics vs Faecalibacterium.prausnitzii
## 2026-04-20 19:07:24.479605 INFO::Creating boxplot for categorical data, antibiotics vs Eubacterium.hallii
## 2026-04-20 19:07:24.828039 INFO::Creating boxplot for categorical data, antibiotics vs Bilophila.unclassified
## 2026-04-20 19:07:25.172196 INFO::Creating boxplot for categorical data, antibiotics vs Clostridium.leptum
## 2026-04-20 19:07:25.517292 INFO::Creating boxplot for categorical data, antibiotics vs Lachnospiraceae.bacterium.3.1.46FAA
## 2026-04-20 19:07:25.867696 INFO::Creating boxplot for categorical data, antibiotics vs Bacteroides.finegoldii
## 2026-04-20 19:07:26.206247 INFO::Creating boxplot for categorical data, antibiotics vs Eubacterium.sp.3.1.31
## 2026-04-20 19:07:26.543015 INFO::Creating boxplot for categorical data, antibiotics vs Bacteroides.fragilis
## 2026-04-20 19:07:26.878517 INFO::Creating boxplot for categorical data, antibiotics vs Alistipes.onderdonkii
## 2026-04-20 19:07:27.220619 INFO::Creating boxplot for categorical data, antibiotics vs Sutterella.wadsworthensis
## 2026-04-20 19:07:27.566068 INFO::Creating boxplot for categorical data, antibiotics vs Eubacterium.eligens
## 2026-04-20 19:07:27.908627 INFO::Creating boxplot for categorical data, antibiotics vs Collinsella.aerofaciens
## 2026-04-20 19:07:28.256341 INFO::Creating boxplot for categorical data, antibiotics vs Bacteroides.thetaiotaomicron
## 2026-04-20 19:07:28.597633 INFO::Creating boxplot for categorical data, antibiotics vs Bacteroides.eggerthii
## 2026-04-20 19:07:28.973034 INFO::Creating boxplot for categorical data, antibiotics vs Haemophilus.parainfluenzae
## 2026-04-20 19:07:29.328568 INFO::Creating boxplot for categorical data, antibiotics vs Bifidobacterium.pseudocatenulatum
## 2026-04-20 19:07:29.676597 INFO::Creating boxplot for categorical data, antibiotics vs Ruminococcus.torques
## 2026-04-20 19:07:30.011503 INFO::Creating boxplot for categorical data, antibiotics vs Eubacterium.ventriosum
## 2026-04-20 19:07:30.364004 INFO::Creating boxplot for categorical data, antibiotics vs Parasutterella.excrementihominis
## 2026-04-20 19:07:30.709414 INFO::Creating boxplot for categorical data, antibiotics vs Peptostreptococcaceae.noname.unclassified
## 2026-04-20 19:07:31.053126 INFO::Creating boxplot for categorical data, antibiotics vs Veillonella.dispar
## 2026-04-20 19:07:31.393268 INFO::Creating boxplot for categorical data, antibiotics vs Veillonella.atypica
## 2026-04-20 19:07:31.734739 INFO::Creating boxplot for categorical data, antibiotics vs Bacteroidales.bacterium.ph8
## 2026-04-20 19:07:32.075206 INFO::Creating boxplot for categorical data, antibiotics vs Clostridium.nexile
## 2026-04-20 19:07:32.478155 INFO::Creating boxplot for categorical data, antibiotics vs Burkholderiales.bacterium.1.1.47
## 2026-04-20 19:07:32.831478 INFO::Creating boxplot for categorical data, antibiotics vs Lachnospiraceae.bacterium.1.1.57FAA
## 2026-04-20 19:07:33.183599 INFO::Creating boxplot for categorical data, antibiotics vs Akkermansia.muciniphila
## 2026-04-20 19:07:33.527503 INFO::Creating boxplot for categorical data, antibiotics vs Clostridium.citroniae
## 2026-04-20 19:07:33.885391 INFO::Creating boxplot for categorical data, antibiotics vs Odoribacter.splanchnicus
## 2026-04-20 19:07:37.542464 INFO::Plotting data for metadata number 5, age
## 2026-04-20 19:07:37.544318 INFO::Creating scatter plot for continuous data, age vs Haemophilus.parainfluenzae
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## ℹ The deprecated feature was likely used in the Maaslin2 package.
##   Please report the issue at <https://github.com/biobakery/maaslin2/issues>.
## This warning is displayed once per session.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
## `geom_smooth()` using formula = 'y ~ x'
## Warning: Removed 19 rows containing missing values or values outside the scale range
## (`geom_point()`).
## 2026-04-20 19:07:37.952764 INFO::Creating scatter plot for continuous data, age vs Bifidobacterium.pseudocatenulatum
## `geom_smooth()` using formula = 'y ~ x'
## Warning: Removed 19 rows containing missing values or values outside the scale range
## (`geom_point()`).
## 2026-04-20 19:07:38.386324 INFO::Creating scatter plot for continuous data, age vs Faecalibacterium.prausnitzii
## `geom_smooth()` using formula = 'y ~ x'
## Warning: Removed 19 rows containing missing values or values outside the scale range
## (`geom_point()`).
## 2026-04-20 19:07:38.714061 INFO::Creating scatter plot for continuous data, age vs Clostridium.clostridioforme
## `geom_smooth()` using formula = 'y ~ x'
## Warning: Removed 19 rows containing missing values or values outside the scale range
## (`geom_point()`).
## 2026-04-20 19:07:39.061028 INFO::Creating scatter plot for continuous data, age vs Veillonella.parvula
## `geom_smooth()` using formula = 'y ~ x'
## Warning: Removed 19 rows containing missing values or values outside the scale range
## (`geom_point()`).
## 2026-04-20 19:07:39.39374 INFO::Creating scatter plot for continuous data, age vs Subdoligranulum.unclassified
## `geom_smooth()` using formula = 'y ~ x'
## Warning: Removed 19 rows containing missing values or values outside the scale range
## (`geom_point()`).
## 2026-04-20 19:07:39.733522 INFO::Creating scatter plot for continuous data, age vs Clostridium.symbiosum
## `geom_smooth()` using formula = 'y ~ x'
## Warning: Removed 19 rows containing missing values or values outside the scale range
## (`geom_point()`).
## 2026-04-20 19:07:40.085369 INFO::Creating scatter plot for continuous data, age vs Ruminococcus.gnavus
## `geom_smooth()` using formula = 'y ~ x'
## Warning: Removed 19 rows containing missing values or values outside the scale range
## (`geom_point()`).
## 2026-04-20 19:07:40.423794 INFO::Creating scatter plot for continuous data, age vs Dialister.invisus
## `geom_smooth()` using formula = 'y ~ x'
## Warning: Removed 19 rows containing missing values or values outside the scale range
## (`geom_point()`).
## 2026-04-20 19:07:40.764103 INFO::Creating scatter plot for continuous data, age vs Veillonella.dispar
## `geom_smooth()` using formula = 'y ~ x'
## Warning: Removed 19 rows containing missing values or values outside the scale range
## (`geom_point()`).
## 2026-04-20 19:07:41.104286 INFO::Creating scatter plot for continuous data, age vs Veillonella.unclassified
## `geom_smooth()` using formula = 'y ~ x'
## Warning: Removed 19 rows containing missing values or values outside the scale range
## (`geom_point()`).
## 2026-04-20 19:07:41.48721 INFO::Creating scatter plot for continuous data, age vs Bacteroides.thetaiotaomicron
## `geom_smooth()` using formula = 'y ~ x'
## Warning: Removed 19 rows containing missing values or values outside the scale range
## (`geom_point()`).
## 2026-04-20 19:07:41.837927 INFO::Creating scatter plot for continuous data, age vs Ruminococcus.bromii
## `geom_smooth()` using formula = 'y ~ x'
## Warning: Removed 19 rows containing missing values or values outside the scale range
## (`geom_point()`).
## 2026-04-20 19:07:42.185844 INFO::Creating scatter plot for continuous data, age vs Bacteroides.intestinalis
## `geom_smooth()` using formula = 'y ~ x'
## Warning: Removed 19 rows containing missing values or values outside the scale range
## (`geom_point()`).
## 2026-04-20 19:07:42.526687 INFO::Creating scatter plot for continuous data, age vs Eubacterium.siraeum
## `geom_smooth()` using formula = 'y ~ x'
## Warning: Removed 19 rows containing missing values or values outside the scale range
## (`geom_point()`).
## 2026-04-20 19:07:42.86129 INFO::Creating scatter plot for continuous data, age vs Prevotella.copri
## `geom_smooth()` using formula = 'y ~ x'
## Warning: Removed 19 rows containing missing values or values outside the scale range
## (`geom_point()`).
## 2026-04-20 19:07:43.203339 INFO::Creating scatter plot for continuous data, age vs Alistipes.unclassified
## `geom_smooth()` using formula = 'y ~ x'
## Warning: Removed 19 rows containing missing values or values outside the scale range
## (`geom_point()`).
## 2026-04-20 19:07:43.541511 INFO::Creating scatter plot for continuous data, age vs Bacteroidales.bacterium.ph8
## `geom_smooth()` using formula = 'y ~ x'
## Warning: Removed 19 rows containing missing values or values outside the scale range
## (`geom_point()`).
## 2026-04-20 19:07:43.878598 INFO::Creating scatter plot for continuous data, age vs Bifidobacterium.longum
## `geom_smooth()` using formula = 'y ~ x'
## Warning: Removed 19 rows containing missing values or values outside the scale range
## (`geom_point()`).
## 2026-04-20 19:07:44.218345 INFO::Creating scatter plot for continuous data, age vs Akkermansia.muciniphila
## `geom_smooth()` using formula = 'y ~ x'
## Warning: Removed 19 rows containing missing values or values outside the scale range
## (`geom_point()`).
## 2026-04-20 19:07:44.566795 INFO::Creating scatter plot for continuous data, age vs Collinsella.aerofaciens
## `geom_smooth()` using formula = 'y ~ x'
## Warning: Removed 19 rows containing missing values or values outside the scale range
## (`geom_point()`).
## 2026-04-20 19:07:44.90921 INFO::Creating scatter plot for continuous data, age vs Parabacteroides.distasonis
## `geom_smooth()` using formula = 'y ~ x'
## Warning: Removed 19 rows containing missing values or values outside the scale range
## (`geom_point()`).
## `geom_smooth()` using formula = 'y ~ x'
## Warning: Removed 19 rows containing missing values or values outside the scale range
## (`geom_point()`).
## `geom_smooth()` using formula = 'y ~ x'
## Warning: Removed 19 rows containing missing values or values outside the scale range
## (`geom_point()`).
## `geom_smooth()` using formula = 'y ~ x'
## Warning: Removed 19 rows containing missing values or values outside the scale range
## (`geom_point()`).
## `geom_smooth()` using formula = 'y ~ x'
## Warning: Removed 19 rows containing missing values or values outside the scale range
## (`geom_point()`).
## `geom_smooth()` using formula = 'y ~ x'
## Warning: Removed 19 rows containing missing values or values outside the scale range
## (`geom_point()`).
## `geom_smooth()` using formula = 'y ~ x'
## Warning: Removed 19 rows containing missing values or values outside the scale range
## (`geom_point()`).
## `geom_smooth()` using formula = 'y ~ x'
## Warning: Removed 19 rows containing missing values or values outside the scale range
## (`geom_point()`).
## `geom_smooth()` using formula = 'y ~ x'
## Warning: Removed 19 rows containing missing values or values outside the scale range
## (`geom_point()`).
## `geom_smooth()` using formula = 'y ~ x'
## Warning: Removed 19 rows containing missing values or values outside the scale range
## (`geom_point()`).
## `geom_smooth()` using formula = 'y ~ x'
## Warning: Removed 19 rows containing missing values or values outside the scale range
## (`geom_point()`).
## 2026-04-20 19:07:48.477633 INFO::Plotting data for metadata number 6, diagnosis
## 2026-04-20 19:07:48.479494 INFO::Creating boxplot for categorical data, diagnosis vs Bifidobacterium.adolescentis
## 2026-04-20 19:07:48.84269 INFO::Creating boxplot for categorical data, diagnosis vs Akkermansia.muciniphila
## 2026-04-20 19:07:49.276507 INFO::Creating boxplot for categorical data, diagnosis vs Clostridium.bolteae
## 2026-04-20 19:07:49.665803 INFO::Creating boxplot for categorical data, diagnosis vs Alistipes.putredinis
## 2026-04-20 19:07:50.054924 INFO::Creating boxplot for categorical data, diagnosis vs Coprobacillus.unclassified
## 2026-04-20 19:07:50.439836 INFO::Creating boxplot for categorical data, diagnosis vs Clostridium.clostridioforme
## 2026-04-20 19:07:50.825505 INFO::Creating boxplot for categorical data, diagnosis vs Alistipes.shahii
## 2026-04-20 19:07:51.211143 INFO::Creating boxplot for categorical data, diagnosis vs Ruminococcus.bromii
## 2026-04-20 19:07:51.639568 INFO::Creating boxplot for categorical data, diagnosis vs Clostridium.leptum
## 2026-04-20 19:07:52.031253 INFO::Creating boxplot for categorical data, diagnosis vs Clostridium.symbiosum
## 2026-04-20 19:07:52.417282 INFO::Creating boxplot for categorical data, diagnosis vs Roseburia.inulinivorans
## 2026-04-20 19:07:52.80531 INFO::Creating boxplot for categorical data, diagnosis vs Ruminococcus.bromii
## 2026-04-20 19:07:53.194601 INFO::Creating boxplot for categorical data, diagnosis vs Alistipes.shahii
## 2026-04-20 19:07:53.58194 INFO::Creating boxplot for categorical data, diagnosis vs Alistipes.finegoldii
## 2026-04-20 19:07:53.971839 INFO::Creating boxplot for categorical data, diagnosis vs Parabacteroides.goldsteinii
## 2026-04-20 19:07:54.359023 INFO::Creating boxplot for categorical data, diagnosis vs Bilophila.unclassified
## 2026-04-20 19:07:54.755437 INFO::Creating boxplot for categorical data, diagnosis vs Clostridium.leptum
## 2026-04-20 19:07:55.16625 INFO::Creating boxplot for categorical data, diagnosis vs Roseburia.hominis
## 2026-04-20 19:07:55.556107 INFO::Creating boxplot for categorical data, diagnosis vs Coprobacillus.unclassified
## 2026-04-20 19:07:55.945627 INFO::Creating boxplot for categorical data, diagnosis vs Alistipes.onderdonkii
## 2026-04-20 19:07:56.338387 INFO::Creating boxplot for categorical data, diagnosis vs Eubacterium.ventriosum
## 2026-04-20 19:07:56.78988 INFO::Creating boxplot for categorical data, diagnosis vs Roseburia.hominis
## 2026-04-20 19:07:57.189643 INFO::Creating boxplot for categorical data, diagnosis vs Sutterella.wadsworthensis
## 2026-04-20 19:07:57.586335 INFO::Creating boxplot for categorical data, diagnosis vs Akkermansia.muciniphila
## 2026-04-20 19:07:57.971373 INFO::Creating boxplot for categorical data, diagnosis vs Sutterella.wadsworthensis
## 2026-04-20 19:07:58.360658 INFO::Creating boxplot for categorical data, diagnosis vs Subdoligranulum.unclassified
## 2026-04-20 19:07:58.752403 INFO::Creating boxplot for categorical data, diagnosis vs Clostridium.symbiosum
## 2026-04-20 19:07:59.154652 INFO::Creating boxplot for categorical data, diagnosis vs Alistipes.onderdonkii
## 2026-04-20 19:07:59.545189 INFO::Creating boxplot for categorical data, diagnosis vs Parabacteroides.unclassified
## 2026-04-20 19:07:59.958567 INFO::Creating boxplot for categorical data, diagnosis vs Ruminococcus.lactaris
## 2026-04-20 19:08:00.368714 INFO::Creating boxplot for categorical data, diagnosis vs Ruminococcus.callidus
## 2026-04-20 19:08:00.759482 INFO::Creating boxplot for categorical data, diagnosis vs Ruminococcus.gnavus
## 2026-04-20 19:08:01.157536 INFO::Creating boxplot for categorical data, diagnosis vs Bacteroides.fragilis
## 2026-04-20 19:08:01.619583 INFO::Creating boxplot for categorical data, diagnosis vs Eubacterium.rectale
## 2026-04-20 19:08:02.032414 INFO::Creating boxplot for categorical data, diagnosis vs Odoribacter.splanchnicus
## 2026-04-20 19:08:02.428203 INFO::Creating boxplot for categorical data, diagnosis vs Parabacteroides.distasonis
## 2026-04-20 19:08:02.81412 INFO::Creating boxplot for categorical data, diagnosis vs Eubacterium.rectale
## 2026-04-20 19:08:03.221204 INFO::Creating boxplot for categorical data, diagnosis vs Bacteroides.finegoldii
## 2026-04-20 19:08:03.611881 INFO::Creating boxplot for categorical data, diagnosis vs Ruminococcus.callidus
## 2026-04-20 19:08:04.05457 INFO::Creating boxplot for categorical data, diagnosis vs Alistipes.finegoldii
## 2026-04-20 19:08:04.457003 INFO::Creating boxplot for categorical data, diagnosis vs Alistipes.putredinis
## 2026-04-20 19:08:04.856026 INFO::Creating boxplot for categorical data, diagnosis vs Clostridium.bolteae
## 2026-04-20 19:08:05.255538 INFO::Creating boxplot for categorical data, diagnosis vs Eubacterium.siraeum
Session Info

Session info from running the demo in R can be displayed with the following command.

sessionInfo()
## R version 4.6.0 RC (2026-04-17 r89917)
## 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     
## 
## other attached packages:
## [1] Maaslin2_1.25.1
## 
## loaded via a namespace (and not attached):
##  [1] gtable_0.3.6        biglm_0.9-3         xfun_0.57          
##  [4] bslib_0.10.0        ggplot2_4.0.2       lattice_0.22-9     
##  [7] numDeriv_2016.8-1.1 vctrs_0.7.3         tools_4.6.0        
## [10] Rdpack_2.6.6        generics_0.1.4      parallel_4.6.0     
## [13] tibble_3.3.1        DEoptimR_1.1-4      cluster_2.1.8.2    
## [16] pkgconfig_2.0.3     logging_0.10-108    pheatmap_1.0.13    
## [19] Matrix_1.7-5        data.table_1.18.2.1 RColorBrewer_1.1-3 
## [22] S7_0.2.1-1          lifecycle_1.0.5     compiler_4.6.0     
## [25] farver_2.1.2        lmerTest_3.2-1      permute_0.9-10     
## [28] htmltools_0.5.9     sass_0.4.10         hash_2.2.6.4       
## [31] yaml_2.3.12         pillar_1.11.1       nloptr_2.2.1       
## [34] crayon_1.5.3        jquerylib_0.1.4     MASS_7.3-65        
## [37] cachem_1.1.0        vegan_2.7-3         reformulas_0.4.4   
## [40] boot_1.3-32         nlme_3.1-169        robustbase_0.99-7  
## [43] tidyselect_1.2.1    digest_0.6.39       mvtnorm_1.3-7      
## [46] dplyr_1.2.1         labeling_0.4.3      splines_4.6.0      
## [49] pcaPP_2.0-5         fastmap_1.2.0       grid_4.6.0         
## [52] cli_3.6.6           magrittr_2.0.5      dichromat_2.0-0.1  
## [55] withr_3.0.2         scales_1.4.0        rmarkdown_2.31     
## [58] otel_0.2.0          lme4_2.0-1          pbapply_1.7-4      
## [61] evaluate_1.0.5      knitr_1.51          rbibutils_2.4.1    
## [64] mgcv_1.9-4          rlang_1.2.0         Rcpp_1.1.1-1       
## [67] glue_1.8.1          optparse_1.8.2      DBI_1.3.0          
## [70] minqa_1.2.8         jsonlite_2.0.0      R6_2.6.1

Options

Run MaAsLin2 help to print a list of the options and the default settings.

$ Maaslin2.R –help Usage: ./R/Maaslin2.R options <data.tsv> <metadata.tsv>

Options: -h, –help Show this help message and exit

-a MIN_ABUNDANCE, --min_abundance=MIN_ABUNDANCE
    The minimum abundance for each feature [ Default: 0 ]

-p MIN_PREVALENCE, --min_prevalence=MIN_PREVALENCE
    The minimum percent of samples for which a feature 
    is detected at minimum abundance [ Default: 0.1 ]

-b MIN_VARIANCE, --min_variance=MIN_VARIANCE
    Keep features with variance greater than [ Default: 0.0 ]

-s MAX_SIGNIFICANCE, --max_significance=MAX_SIGNIFICANCE
    The q-value threshold for significance [ Default: 0.25 ]

-n NORMALIZATION, --normalization=NORMALIZATION
    The normalization method to apply [ Default: TSS ]
    [ Choices: TSS, CLR, CSS, NONE, TMM ]

-t TRANSFORM, --transform=TRANSFORM
    The transform to apply [ Default: LOG ]
    [ Choices: LOG, LOGIT, AST, NONE ]

-m ANALYSIS_METHOD, --analysis_method=ANALYSIS_METHOD
    The analysis method to apply [ Default: LM ]
    [ Choices: LM, CPLM, NEGBIN, ZINB ]

-r RANDOM_EFFECTS, --random_effects=RANDOM_EFFECTS
    The random effects for the model, comma-delimited
    for multiple effects [ Default: none ]

-f FIXED_EFFECTS, --fixed_effects=FIXED_EFFECTS
    The fixed effects for the model, comma-delimited
    for multiple effects [ Default: all ]

-c CORRECTION, --correction=CORRECTION
    The correction method for computing the 
    q-value [ Default: BH ]

-z STANDARDIZE, --standardize=STANDARDIZE
    Apply z-score so continuous metadata are 
    on the same scale [ Default: TRUE ]

-l PLOT_HEATMAP, --plot_heatmap=PLOT_HEATMAP
    Generate a heatmap for the significant 
    associations [ Default: TRUE ]

-i HEATMAP_FIRST_N, --heatmap_first_n=HEATMAP_FIRST_N
    In heatmap, plot top N features with significant 
    associations [ Default: TRUE ]

-o PLOT_SCATTER, --plot_scatter=PLOT_SCATTER
    Generate scatter plots for the significant
    associations [ Default: TRUE ]
    
-g MAX_PNGS, --max_pngs=MAX_PNGS
    The maximum number of scatter plots for signficant associations 
    to save as png files [ Default: 10 ]

-O SAVE_SCATTER, --save_scatter=SAVE_SCATTER
    Save all scatter plot ggplot objects
    to an RData file [ Default: FALSE ]

-e CORES, --cores=CORES
    The number of R processes to run in parallel
    [ Default: 1 ]
    
-j SAVE_MODELS --save_models=SAVE_MODELS
    Return the full model outputs and save to an RData file
    [ Default: FALSE ]

-d REFERENCE, --reference=REFERENCE
    The factor to use as a reference level for a categorical variable 
    provided as a string of 'variable,reference', semi-colon delimited for 
    multiple variables. Not required if metadata is passed as a factor or 
    for variables with less than two levels but can be set regardless.
    [ Default: NA ] 

Troubleshooting

  1. Question: When I run from the command line I see the error Maaslin2.R: command not found. How do I fix this?
    • Answer: Provide the full path to the executable when running Maaslin2.R.
  2. Question: When I run as a function I see the error Error in library(Maaslin2): there is no package called 'Maaslin2'. How do I fix this?
    • Answer: Install the R package and then try loading the library again.
  3. Question: When I try to install the R package I see errors about dependencies not being installed. Why is this?
    • Answer: Installing the R package will not automatically install the packages MaAsLin2 requires. Please install the dependencies and then install the MaAsLin2 R package.