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-28 18:38:34.218844 INFO::Writing function arguments to log file
## 2026-04-28 18:38:34.230211 INFO::Verifying options selected are valid
## 2026-04-28 18:38:34.247147 INFO::Determining format of input files
## 2026-04-28 18:38:34.24801 INFO::Input format is data samples as rows and metadata samples as rows
## 2026-04-28 18:38:34.251066 INFO::Formula for random effects: expr ~ (1 | site) + (1 | subject)
## 2026-04-28 18:38:34.251868 INFO::Formula for fixed effects: expr ~  diagnosis + dysbiosisnonIBD + dysbiosisUC + dysbiosisCD + antibiotics + age
## 2026-04-28 18:38:34.252859 INFO::Filter data based on min abundance and min prevalence
## 2026-04-28 18:38:34.253255 INFO::Total samples in data: 1595
## 2026-04-28 18:38:34.253601 INFO::Min samples required with min abundance for a feature not to be filtered: 159.500000
## 2026-04-28 18:38:34.255368 INFO::Total filtered features: 0
## 2026-04-28 18:38:34.255901 INFO::Filtered feature names from abundance and prevalence filtering:
## 2026-04-28 18:38:34.259197 INFO::Total filtered features with variance filtering: 0
## 2026-04-28 18:38:34.25979 INFO::Filtered feature names from variance filtering:
## 2026-04-28 18:38:34.26018 INFO::Running selected normalization method: TSS
## 2026-04-28 18:38:34.66638 INFO::Bypass z-score application to metadata
## 2026-04-28 18:38:34.667058 INFO::Running selected transform method: LOG
## 2026-04-28 18:38:34.672847 INFO::Running selected analysis method: LM
## 2026-04-28 18:38:34.798292 INFO::Fitting model to feature number 1, Bifidobacterium.adolescentis
## boundary (singular) fit: see help('isSingular')
## 2026-04-28 18:38:35.082438 INFO::Fitting model to feature number 2, Bifidobacterium.bifidum
## 2026-04-28 18:38:35.25402 INFO::Fitting model to feature number 3, Bifidobacterium.longum
## 2026-04-28 18:38:35.315157 INFO::Fitting model to feature number 4, Bifidobacterium.pseudocatenulatum
## boundary (singular) fit: see help('isSingular')
## 2026-04-28 18:38:35.372375 INFO::Fitting model to feature number 5, Collinsella.aerofaciens
## 2026-04-28 18:38:35.439481 INFO::Fitting model to feature number 6, Bacteroides.caccae
## boundary (singular) fit: see help('isSingular')
## 2026-04-28 18:38:35.492751 INFO::Fitting model to feature number 7, Bacteroides.cellulosilyticus
## 2026-04-28 18:38:35.548182 INFO::Fitting model to feature number 8, Bacteroides.dorei
## 2026-04-28 18:38:35.609739 INFO::Fitting model to feature number 9, Bacteroides.eggerthii
## 2026-04-28 18:38:35.665132 INFO::Fitting model to feature number 10, Bacteroides.faecis
## 2026-04-28 18:38:35.723389 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: -4.3e+01
## 2026-04-28 18:38:35.767012 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: -4.3e+01
## 2026-04-28 18:38:35.82281 INFO::Fitting model to feature number 12, Bacteroides.fragilis
## boundary (singular) fit: see help('isSingular')
## 2026-04-28 18:38:35.877867 INFO::Fitting model to feature number 13, Bacteroides.intestinalis
## boundary (singular) fit: see help('isSingular')
## 2026-04-28 18:38:35.932329 INFO::Fitting model to feature number 14, Bacteroides.massiliensis
## 2026-04-28 18:38:35.99009 INFO::Fitting model to feature number 15, Bacteroides.ovatus
## boundary (singular) fit: see help('isSingular')
## 2026-04-28 18:38:36.037738 INFO::Fitting model to feature number 16, Bacteroides.salyersiae
## 2026-04-28 18:38:36.092905 INFO::Fitting model to feature number 17, Bacteroides.stercoris
## 2026-04-28 18:38:36.15234 INFO::Fitting model to feature number 18, Bacteroides.thetaiotaomicron
## boundary (singular) fit: see help('isSingular')
## Feature Bacteroides.thetaiotaomicron : simpleWarning: Model failed to converge with 1 negative eigenvalue: -3.2e+01
## 2026-04-28 18:38:36.196907 WARNING::Fitting problem for feature 18 a warning was issued
## boundary (singular) fit: see help('isSingular')
## Warning: Model failed to converge with 1 negative eigenvalue: -3.2e+01
## 2026-04-28 18:38:36.249089 INFO::Fitting model to feature number 19, Bacteroides.uniformis
## boundary (singular) fit: see help('isSingular')
## 2026-04-28 18:38:36.304904 INFO::Fitting model to feature number 20, Bacteroides.vulgatus
## boundary (singular) fit: see help('isSingular')
## 2026-04-28 18:38:36.35755 INFO::Fitting model to feature number 21, Bacteroides.xylanisolvens
## boundary (singular) fit: see help('isSingular')
## 2026-04-28 18:38:36.410344 INFO::Fitting model to feature number 22, Bacteroidales.bacterium.ph8
## 2026-04-28 18:38:36.463253 INFO::Fitting model to feature number 23, Barnesiella.intestinihominis
## 2026-04-28 18:38:36.521014 INFO::Fitting model to feature number 24, Coprobacter.fastidiosus
## 2026-04-28 18:38:36.576644 INFO::Fitting model to feature number 25, Odoribacter.splanchnicus
## 2026-04-28 18:38:36.629049 INFO::Fitting model to feature number 26, Parabacteroides.distasonis
## boundary (singular) fit: see help('isSingular')
## 2026-04-28 18:38:36.686981 INFO::Fitting model to feature number 27, Parabacteroides.goldsteinii
## 2026-04-28 18:38:36.745029 INFO::Fitting model to feature number 28, Parabacteroides.merdae
## 2026-04-28 18:38:36.802815 INFO::Fitting model to feature number 29, Parabacteroides.unclassified
## boundary (singular) fit: see help('isSingular')
## 2026-04-28 18:38:36.862101 INFO::Fitting model to feature number 30, Paraprevotella.clara
## 2026-04-28 18:38:36.922425 INFO::Fitting model to feature number 31, Paraprevotella.unclassified
## 2026-04-28 18:38:36.977848 INFO::Fitting model to feature number 32, Prevotella.copri
## boundary (singular) fit: see help('isSingular')
## 2026-04-28 18:38:37.03569 INFO::Fitting model to feature number 33, Alistipes.finegoldii
## boundary (singular) fit: see help('isSingular')
## 2026-04-28 18:38:37.087112 INFO::Fitting model to feature number 34, Alistipes.onderdonkii
## boundary (singular) fit: see help('isSingular')
## 2026-04-28 18:38:37.143578 INFO::Fitting model to feature number 35, Alistipes.putredinis
## boundary (singular) fit: see help('isSingular')
## 2026-04-28 18:38:37.202375 INFO::Fitting model to feature number 36, Alistipes.shahii
## 2026-04-28 18:38:37.259798 INFO::Fitting model to feature number 37, Alistipes.unclassified
## 2026-04-28 18:38:37.310637 INFO::Fitting model to feature number 38, Streptococcus.salivarius
## 2026-04-28 18:38:37.373421 INFO::Fitting model to feature number 39, Clostridium.bolteae
## boundary (singular) fit: see help('isSingular')
## 2026-04-28 18:38:37.430669 INFO::Fitting model to feature number 40, Clostridium.citroniae
## boundary (singular) fit: see help('isSingular')
## 2026-04-28 18:38:37.48773 INFO::Fitting model to feature number 41, Clostridium.clostridioforme
## boundary (singular) fit: see help('isSingular')
## 2026-04-28 18:38:37.541585 INFO::Fitting model to feature number 42, Clostridium.hathewayi
## boundary (singular) fit: see help('isSingular')
## 2026-04-28 18:38:37.590817 INFO::Fitting model to feature number 43, Clostridium.leptum
## 2026-04-28 18:38:37.652148 INFO::Fitting model to feature number 44, Clostridium.nexile
## 2026-04-28 18:38:37.705872 INFO::Fitting model to feature number 45, Clostridium.symbiosum
## boundary (singular) fit: see help('isSingular')
## 2026-04-28 18:38:37.762119 INFO::Fitting model to feature number 46, Flavonifractor.plautii
## boundary (singular) fit: see help('isSingular')
## 2026-04-28 18:38:37.816589 INFO::Fitting model to feature number 47, Eubacterium.eligens
## 2026-04-28 18:38:37.871192 INFO::Fitting model to feature number 48, Eubacterium.hallii
## 2026-04-28 18:38:37.933168 INFO::Fitting model to feature number 49, Eubacterium.rectale
## boundary (singular) fit: see help('isSingular')
## 2026-04-28 18:38:37.9898 INFO::Fitting model to feature number 50, Eubacterium.siraeum
## boundary (singular) fit: see help('isSingular')
## 2026-04-28 18:38:38.046921 INFO::Fitting model to feature number 51, Eubacterium.sp.3.1.31
## boundary (singular) fit: see help('isSingular')
## 2026-04-28 18:38:38.100002 INFO::Fitting model to feature number 52, Eubacterium.ventriosum
## boundary (singular) fit: see help('isSingular')
## 2026-04-28 18:38:38.155974 INFO::Fitting model to feature number 53, Ruminococcus.gnavus
## boundary (singular) fit: see help('isSingular')
## 2026-04-28 18:38:38.21097 INFO::Fitting model to feature number 54, Ruminococcus.obeum
## 2026-04-28 18:38:38.265804 INFO::Fitting model to feature number 55, Ruminococcus.torques
## 2026-04-28 18:38:38.320052 INFO::Fitting model to feature number 56, Coprococcus.comes
## 2026-04-28 18:38:38.490236 INFO::Fitting model to feature number 57, Dorea.longicatena
## boundary (singular) fit: see help('isSingular')
## 2026-04-28 18:38:38.542623 INFO::Fitting model to feature number 58, Lachnospiraceae.bacterium.1.1.57FAA
## boundary (singular) fit: see help('isSingular')
## 2026-04-28 18:38:38.597207 INFO::Fitting model to feature number 59, Lachnospiraceae.bacterium.3.1.46FAA
## boundary (singular) fit: see help('isSingular')
## 2026-04-28 18:38:38.65087 INFO::Fitting model to feature number 60, Roseburia.hominis
## boundary (singular) fit: see help('isSingular')
## 2026-04-28 18:38:38.707372 INFO::Fitting model to feature number 61, Roseburia.intestinalis
## 2026-04-28 18:38:38.762047 INFO::Fitting model to feature number 62, Roseburia.inulinivorans
## boundary (singular) fit: see help('isSingular')
## 2026-04-28 18:38:38.813019 INFO::Fitting model to feature number 63, Roseburia.unclassified
## boundary (singular) fit: see help('isSingular')
## 2026-04-28 18:38:38.863878 INFO::Fitting model to feature number 64, Oscillibacter.unclassified
## 2026-04-28 18:38:38.922919 INFO::Fitting model to feature number 65, Peptostreptococcaceae.noname.unclassified
## 2026-04-28 18:38:38.977739 INFO::Fitting model to feature number 66, Faecalibacterium.prausnitzii
## 2026-04-28 18:38:39.023521 INFO::Fitting model to feature number 67, Ruminococcus.bromii
## boundary (singular) fit: see help('isSingular')
## 2026-04-28 18:38:39.0675 INFO::Fitting model to feature number 68, Ruminococcus.callidus
## 2026-04-28 18:38:39.113019 INFO::Fitting model to feature number 69, Ruminococcus.lactaris
## 2026-04-28 18:38:39.164283 INFO::Fitting model to feature number 70, Subdoligranulum.unclassified
## boundary (singular) fit: see help('isSingular')
## 2026-04-28 18:38:39.214005 INFO::Fitting model to feature number 71, Coprobacillus.unclassified
## 2026-04-28 18:38:39.258218 INFO::Fitting model to feature number 72, Acidaminococcus.unclassified
## 2026-04-28 18:38:39.305356 INFO::Fitting model to feature number 73, Dialister.invisus
## boundary (singular) fit: see help('isSingular')
## 2026-04-28 18:38:39.34954 INFO::Fitting model to feature number 74, Veillonella.atypica
## 2026-04-28 18:38:39.404605 INFO::Fitting model to feature number 75, Veillonella.dispar
## boundary (singular) fit: see help('isSingular')
## 2026-04-28 18:38:39.449853 INFO::Fitting model to feature number 76, Veillonella.parvula
## boundary (singular) fit: see help('isSingular')
## 2026-04-28 18:38:39.497976 INFO::Fitting model to feature number 77, Veillonella.unclassified
## 2026-04-28 18:38:39.544025 INFO::Fitting model to feature number 78, Burkholderiales.bacterium.1.1.47
## 2026-04-28 18:38:39.597444 INFO::Fitting model to feature number 79, Parasutterella.excrementihominis
## 2026-04-28 18:38:39.654335 INFO::Fitting model to feature number 80, Sutterella.wadsworthensis
## 2026-04-28 18:38:39.707646 INFO::Fitting model to feature number 81, Bilophila.unclassified
## 2026-04-28 18:38:39.76528 INFO::Fitting model to feature number 82, Escherichia.coli
## 2026-04-28 18:38:39.821114 INFO::Fitting model to feature number 83, Escherichia.unclassified
## 2026-04-28 18:38:39.87586 INFO::Fitting model to feature number 84, Klebsiella.pneumoniae
## boundary (singular) fit: see help('isSingular')
## 2026-04-28 18:38:39.926768 INFO::Fitting model to feature number 85, Haemophilus.parainfluenzae
## boundary (singular) fit: see help('isSingular')
## 2026-04-28 18:38:39.977545 INFO::Fitting model to feature number 86, Akkermansia.muciniphila
## 2026-04-28 18:38:40.032967 INFO::Fitting model to feature number 87, C2likevirus.unclassified
## 2026-04-28 18:38:40.105866 INFO::Counting total values for each feature
## 2026-04-28 18:38:40.117273 INFO::Writing filtered data to file demo_output/features/filtered_data.tsv
## 2026-04-28 18:38:40.169026 INFO::Writing filtered, normalized data to file demo_output/features/filtered_data_norm.tsv
## 2026-04-28 18:38:40.232394 INFO::Writing filtered, normalized, transformed data to file demo_output/features/filtered_data_norm_transformed.tsv
## 2026-04-28 18:38:40.315343 INFO::Writing residuals to file demo_output/fits/residuals.rds
## 2026-04-28 18:38:40.346125 INFO::Writing fitted values to file demo_output/fits/fitted.rds
## 2026-04-28 18:38:40.371104 INFO::Writing extracted random effects to file demo_output/fits/ranef.rds
## 2026-04-28 18:38:40.378947 INFO::Writing all results to file (ordered by increasing q-values): demo_output/all_results.tsv
## 2026-04-28 18:38:40.391397 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-28 18:38:40.393643 INFO::Writing heatmap of significant results to file: demo_output/heatmap.pdf
## 2026-04-28 18:38:40.487826 INFO::Writing association plots (one for each significant association) to output folder: demo_output
## 2026-04-28 18:38:40.491633 INFO::Plotting associations from most to least significant, grouped by metadata
## 2026-04-28 18:38:40.492382 INFO::Plotting data for metadata number 1, dysbiosisCD
## 2026-04-28 18:38:40.49348 INFO::Creating boxplot for categorical data, dysbiosisCD vs Faecalibacterium.prausnitzii
## 2026-04-28 18:38:40.843974 INFO::Creating boxplot for categorical data, dysbiosisCD vs Subdoligranulum.unclassified
## 2026-04-28 18:38:41.158818 INFO::Creating boxplot for categorical data, dysbiosisCD vs Bacteroides.uniformis
## 2026-04-28 18:38:41.436729 INFO::Creating boxplot for categorical data, dysbiosisCD vs Eubacterium.rectale
## 2026-04-28 18:38:41.59792 INFO::Creating boxplot for categorical data, dysbiosisCD vs Bacteroides.vulgatus
## 2026-04-28 18:38:41.731583 INFO::Creating boxplot for categorical data, dysbiosisCD vs Bacteroides.ovatus
## 2026-04-28 18:38:41.86498 INFO::Creating boxplot for categorical data, dysbiosisCD vs Ruminococcus.obeum
## 2026-04-28 18:38:41.999825 INFO::Creating boxplot for categorical data, dysbiosisCD vs Oscillibacter.unclassified
## 2026-04-28 18:38:42.135674 INFO::Creating boxplot for categorical data, dysbiosisCD vs Roseburia.inulinivorans
## 2026-04-28 18:38:42.266853 INFO::Creating boxplot for categorical data, dysbiosisCD vs Roseburia.hominis
## 2026-04-28 18:38:42.402739 INFO::Creating boxplot for categorical data, dysbiosisCD vs Bacteroides.thetaiotaomicron
## 2026-04-28 18:38:42.536892 INFO::Creating boxplot for categorical data, dysbiosisCD vs Alistipes.putredinis
## 2026-04-28 18:38:42.673385 INFO::Creating boxplot for categorical data, dysbiosisCD vs Parabacteroides.distasonis
## 2026-04-28 18:38:42.81144 INFO::Creating boxplot for categorical data, dysbiosisCD vs Bacteroides.dorei
## 2026-04-28 18:38:42.945312 INFO::Creating boxplot for categorical data, dysbiosisCD vs Alistipes.shahii
## 2026-04-28 18:38:43.075894 INFO::Creating boxplot for categorical data, dysbiosisCD vs Bacteroides.xylanisolvens
## 2026-04-28 18:38:43.207494 INFO::Creating boxplot for categorical data, dysbiosisCD vs Clostridium.leptum
## 2026-04-28 18:38:43.342817 INFO::Creating boxplot for categorical data, dysbiosisCD vs Dorea.longicatena
## 2026-04-28 18:38:43.475485 INFO::Creating boxplot for categorical data, dysbiosisCD vs Bacteroides.caccae
## 2026-04-28 18:38:43.61026 INFO::Creating boxplot for categorical data, dysbiosisCD vs Lachnospiraceae.bacterium.3.1.46FAA
## 2026-04-28 18:38:43.745105 INFO::Creating boxplot for categorical data, dysbiosisCD vs Escherichia.coli
## 2026-04-28 18:38:43.915776 INFO::Creating boxplot for categorical data, dysbiosisCD vs Klebsiella.pneumoniae
## 2026-04-28 18:38:44.053113 INFO::Creating boxplot for categorical data, dysbiosisCD vs Bilophila.unclassified
## 2026-04-28 18:38:44.180007 INFO::Creating boxplot for categorical data, dysbiosisCD vs Alistipes.finegoldii
## 2026-04-28 18:38:44.319597 INFO::Creating boxplot for categorical data, dysbiosisCD vs Eubacterium.eligens
## 2026-04-28 18:38:44.455925 INFO::Creating boxplot for categorical data, dysbiosisCD vs Bacteroides.stercoris
## 2026-04-28 18:38:44.598494 INFO::Creating boxplot for categorical data, dysbiosisCD vs Coprococcus.comes
## 2026-04-28 18:38:44.741545 INFO::Creating boxplot for categorical data, dysbiosisCD vs Bacteroides.fragilis
## 2026-04-28 18:38:44.875615 INFO::Creating boxplot for categorical data, dysbiosisCD vs Bacteroides.finegoldii
## 2026-04-28 18:38:45.000759 INFO::Creating boxplot for categorical data, dysbiosisCD vs Eubacterium.hallii
## 2026-04-28 18:38:45.1337 INFO::Creating boxplot for categorical data, dysbiosisCD vs Bacteroides.faecis
## 2026-04-28 18:38:45.272216 INFO::Creating boxplot for categorical data, dysbiosisCD vs Paraprevotella.clara
## 2026-04-28 18:38:45.404046 INFO::Creating boxplot for categorical data, dysbiosisCD vs Eubacterium.siraeum
## 2026-04-28 18:38:45.534153 INFO::Creating boxplot for categorical data, dysbiosisCD vs Parabacteroides.merdae
## 2026-04-28 18:38:45.660877 INFO::Creating boxplot for categorical data, dysbiosisCD vs Paraprevotella.unclassified
## 2026-04-28 18:38:45.788603 INFO::Creating boxplot for categorical data, dysbiosisCD vs Collinsella.aerofaciens
## 2026-04-28 18:38:45.921335 INFO::Creating boxplot for categorical data, dysbiosisCD vs Odoribacter.splanchnicus
## 2026-04-28 18:38:46.060234 INFO::Creating boxplot for categorical data, dysbiosisCD vs Clostridium.clostridioforme
## 2026-04-28 18:38:46.185869 INFO::Creating boxplot for categorical data, dysbiosisCD vs Bacteroides.eggerthii
## 2026-04-28 18:38:46.302321 INFO::Creating boxplot for categorical data, dysbiosisCD vs Alistipes.onderdonkii
## 2026-04-28 18:38:46.416789 INFO::Creating boxplot for categorical data, dysbiosisCD vs Eubacterium.ventriosum
## 2026-04-28 18:38:46.551482 INFO::Creating boxplot for categorical data, dysbiosisCD vs Ruminococcus.lactaris
## 2026-04-28 18:38:46.691308 INFO::Creating boxplot for categorical data, dysbiosisCD vs Burkholderiales.bacterium.1.1.47
## 2026-04-28 18:38:46.825086 INFO::Creating boxplot for categorical data, dysbiosisCD vs Dialister.invisus
## 2026-04-28 18:38:46.987591 INFO::Creating boxplot for categorical data, dysbiosisCD vs Ruminococcus.bromii
## 2026-04-28 18:38:47.128734 INFO::Creating boxplot for categorical data, dysbiosisCD vs Parasutterella.excrementihominis
## 2026-04-28 18:38:47.266226 INFO::Creating boxplot for categorical data, dysbiosisCD vs Alistipes.unclassified
## 2026-04-28 18:38:47.406524 INFO::Creating boxplot for categorical data, dysbiosisCD vs Ruminococcus.torques
## 2026-04-28 18:38:47.542432 INFO::Creating boxplot for categorical data, dysbiosisCD vs Coprobacillus.unclassified
## 2026-04-28 18:38:47.684272 INFO::Creating boxplot for categorical data, dysbiosisCD vs Bacteroides.cellulosilyticus
## 2026-04-28 18:38:47.823008 INFO::Creating boxplot for categorical data, dysbiosisCD vs Roseburia.intestinalis
## 2026-04-28 18:38:47.954283 INFO::Creating boxplot for categorical data, dysbiosisCD vs Parabacteroides.unclassified
## 2026-04-28 18:38:48.096885 INFO::Creating boxplot for categorical data, dysbiosisCD vs Acidaminococcus.unclassified
## 2026-04-28 18:38:48.241965 INFO::Creating boxplot for categorical data, dysbiosisCD vs Barnesiella.intestinihominis
## 2026-04-28 18:38:48.370618 INFO::Creating boxplot for categorical data, dysbiosisCD vs Bacteroides.massiliensis
## 2026-04-28 18:38:48.509451 INFO::Creating boxplot for categorical data, dysbiosisCD vs Eubacterium.sp.3.1.31
## 2026-04-28 18:38:48.653078 INFO::Creating boxplot for categorical data, dysbiosisCD vs Bacteroides.salyersiae
## 2026-04-28 18:38:48.791785 INFO::Creating boxplot for categorical data, dysbiosisCD vs Bacteroidales.bacterium.ph8
## 2026-04-28 18:38:48.925345 INFO::Creating boxplot for categorical data, dysbiosisCD vs Clostridium.citroniae
## 2026-04-28 18:38:49.059323 INFO::Creating boxplot for categorical data, dysbiosisCD vs Flavonifractor.plautii
## 2026-04-28 18:38:49.192029 INFO::Creating boxplot for categorical data, dysbiosisCD vs Parabacteroides.goldsteinii
## 2026-04-28 18:38:49.329783 INFO::Creating boxplot for categorical data, dysbiosisCD vs Bifidobacterium.longum
## 2026-04-28 18:38:49.461447 INFO::Creating boxplot for categorical data, dysbiosisCD vs Lachnospiraceae.bacterium.1.1.57FAA
## 2026-04-28 18:38:50.684285 INFO::Plotting data for metadata number 2, dysbiosisUC
## 2026-04-28 18:38:50.685295 INFO::Creating boxplot for categorical data, dysbiosisUC vs Subdoligranulum.unclassified
## 2026-04-28 18:38:50.802422 INFO::Creating boxplot for categorical data, dysbiosisUC vs Faecalibacterium.prausnitzii
## 2026-04-28 18:38:50.948123 INFO::Creating boxplot for categorical data, dysbiosisUC vs Bacteroides.caccae
## 2026-04-28 18:38:51.085218 INFO::Creating boxplot for categorical data, dysbiosisUC vs Oscillibacter.unclassified
## 2026-04-28 18:38:51.220308 INFO::Creating boxplot for categorical data, dysbiosisUC vs Bacteroides.uniformis
## 2026-04-28 18:38:51.370679 INFO::Creating boxplot for categorical data, dysbiosisUC vs Eubacterium.siraeum
## 2026-04-28 18:38:51.521349 INFO::Creating boxplot for categorical data, dysbiosisUC vs Bacteroides.ovatus
## 2026-04-28 18:38:51.666099 INFO::Creating boxplot for categorical data, dysbiosisUC vs Bacteroides.fragilis
## 2026-04-28 18:38:51.815263 INFO::Creating boxplot for categorical data, dysbiosisUC vs Alistipes.shahii
## 2026-04-28 18:38:51.960238 INFO::Creating boxplot for categorical data, dysbiosisUC vs Eubacterium.rectale
## 2026-04-28 18:38:52.107349 INFO::Creating boxplot for categorical data, dysbiosisUC vs Roseburia.hominis
## 2026-04-28 18:38:52.255441 INFO::Creating boxplot for categorical data, dysbiosisUC vs Alistipes.putredinis
## 2026-04-28 18:38:52.400237 INFO::Creating boxplot for categorical data, dysbiosisUC vs Lachnospiraceae.bacterium.3.1.46FAA
## 2026-04-28 18:38:52.544908 INFO::Creating boxplot for categorical data, dysbiosisUC vs Eubacterium.hallii
## 2026-04-28 18:38:52.689115 INFO::Creating boxplot for categorical data, dysbiosisUC vs Bacteroides.xylanisolvens
## 2026-04-28 18:38:52.835604 INFO::Creating boxplot for categorical data, dysbiosisUC vs Bacteroides.stercoris
## 2026-04-28 18:38:52.982056 INFO::Creating boxplot for categorical data, dysbiosisUC vs Alistipes.finegoldii
## 2026-04-28 18:38:53.130576 INFO::Creating boxplot for categorical data, dysbiosisUC vs Barnesiella.intestinihominis
## 2026-04-28 18:38:53.276067 INFO::Creating boxplot for categorical data, dysbiosisUC vs Clostridium.leptum
## 2026-04-28 18:38:53.42143 INFO::Creating boxplot for categorical data, dysbiosisUC vs Ruminococcus.gnavus
## 2026-04-28 18:38:53.56719 INFO::Creating boxplot for categorical data, dysbiosisUC vs Alistipes.onderdonkii
## 2026-04-28 18:38:53.749765 INFO::Creating boxplot for categorical data, dysbiosisUC vs Flavonifractor.plautii
## 2026-04-28 18:38:53.898507 INFO::Creating boxplot for categorical data, dysbiosisUC vs Parabacteroides.merdae
## 2026-04-28 18:38:54.043774 INFO::Creating boxplot for categorical data, dysbiosisUC vs Bacteroides.cellulosilyticus
## 2026-04-28 18:38:54.187762 INFO::Creating boxplot for categorical data, dysbiosisUC vs Bifidobacterium.longum
## 2026-04-28 18:38:54.330884 INFO::Creating boxplot for categorical data, dysbiosisUC vs Klebsiella.pneumoniae
## 2026-04-28 18:38:54.478494 INFO::Creating boxplot for categorical data, dysbiosisUC vs Clostridium.citroniae
## 2026-04-28 18:38:54.612016 INFO::Creating boxplot for categorical data, dysbiosisUC vs Eubacterium.ventriosum
## 2026-04-28 18:38:54.755417 INFO::Creating boxplot for categorical data, dysbiosisUC vs Parabacteroides.distasonis
## 2026-04-28 18:38:54.900592 INFO::Creating boxplot for categorical data, dysbiosisUC vs Parabacteroides.goldsteinii
## 2026-04-28 18:38:55.044923 INFO::Creating boxplot for categorical data, dysbiosisUC vs Ruminococcus.torques
## 2026-04-28 18:38:55.185798 INFO::Creating boxplot for categorical data, dysbiosisUC vs Bacteroidales.bacterium.ph8
## 2026-04-28 18:38:55.335709 INFO::Creating boxplot for categorical data, dysbiosisUC vs Ruminococcus.obeum
## 2026-04-28 18:38:55.47884 INFO::Creating boxplot for categorical data, dysbiosisUC vs Bifidobacterium.bifidum
## 2026-04-28 18:38:55.636821 INFO::Creating boxplot for categorical data, dysbiosisUC vs Bifidobacterium.adolescentis
## 2026-04-28 18:38:55.786141 INFO::Creating boxplot for categorical data, dysbiosisUC vs Collinsella.aerofaciens
## 2026-04-28 18:38:55.936317 INFO::Creating boxplot for categorical data, dysbiosisUC vs Clostridium.hathewayi
## 2026-04-28 18:38:56.078249 INFO::Creating boxplot for categorical data, dysbiosisUC vs Bilophila.unclassified
## 2026-04-28 18:38:56.227121 INFO::Creating boxplot for categorical data, dysbiosisUC vs Eubacterium.eligens
## 2026-04-28 18:38:56.369161 INFO::Creating boxplot for categorical data, dysbiosisUC vs Bacteroides.vulgatus
## 2026-04-28 18:38:56.51777 INFO::Creating boxplot for categorical data, dysbiosisUC vs Clostridium.bolteae
## 2026-04-28 18:38:56.849134 INFO::Creating boxplot for categorical data, dysbiosisUC vs Dialister.invisus
## 2026-04-28 18:38:56.981152 INFO::Creating boxplot for categorical data, dysbiosisUC vs Ruminococcus.lactaris
## 2026-04-28 18:38:57.11307 INFO::Creating boxplot for categorical data, dysbiosisUC vs Burkholderiales.bacterium.1.1.47
## 2026-04-28 18:38:58.288925 INFO::Plotting data for metadata number 3, dysbiosisnonIBD
## 2026-04-28 18:38:58.290055 INFO::Creating boxplot for categorical data, dysbiosisnonIBD vs Faecalibacterium.prausnitzii
## 2026-04-28 18:38:58.407247 INFO::Creating boxplot for categorical data, dysbiosisnonIBD vs Eubacterium.rectale
## 2026-04-28 18:38:58.536855 INFO::Creating boxplot for categorical data, dysbiosisnonIBD vs Eubacterium.sp.3.1.31
## 2026-04-28 18:38:58.659523 INFO::Creating boxplot for categorical data, dysbiosisnonIBD vs Roseburia.hominis
## 2026-04-28 18:38:58.779898 INFO::Creating boxplot for categorical data, dysbiosisnonIBD vs Subdoligranulum.unclassified
## 2026-04-28 18:38:58.911627 INFO::Creating boxplot for categorical data, dysbiosisnonIBD vs Lachnospiraceae.bacterium.3.1.46FAA
## 2026-04-28 18:38:59.055209 INFO::Creating boxplot for categorical data, dysbiosisnonIBD vs Ruminococcus.torques
## 2026-04-28 18:38:59.18913 INFO::Creating boxplot for categorical data, dysbiosisnonIBD vs Clostridium.leptum
## 2026-04-28 18:38:59.316703 INFO::Creating boxplot for categorical data, dysbiosisnonIBD vs Odoribacter.splanchnicus
## 2026-04-28 18:38:59.444792 INFO::Creating boxplot for categorical data, dysbiosisnonIBD vs Escherichia.coli
## 2026-04-28 18:38:59.567907 INFO::Creating boxplot for categorical data, dysbiosisnonIBD vs Ruminococcus.obeum
## 2026-04-28 18:38:59.695671 INFO::Creating boxplot for categorical data, dysbiosisnonIBD vs Bilophila.unclassified
## 2026-04-28 18:38:59.827436 INFO::Creating boxplot for categorical data, dysbiosisnonIBD vs Bacteroides.uniformis
## 2026-04-28 18:38:59.962527 INFO::Creating boxplot for categorical data, dysbiosisnonIBD vs Eubacterium.eligens
## 2026-04-28 18:39:00.126574 INFO::Creating boxplot for categorical data, dysbiosisnonIBD vs Klebsiella.pneumoniae
## 2026-04-28 18:39:00.258913 INFO::Creating boxplot for categorical data, dysbiosisnonIBD vs Ruminococcus.bromii
## 2026-04-28 18:39:00.391514 INFO::Creating boxplot for categorical data, dysbiosisnonIBD vs Bacteroides.vulgatus
## 2026-04-28 18:39:00.524694 INFO::Creating boxplot for categorical data, dysbiosisnonIBD vs C2likevirus.unclassified
## 2026-04-28 18:39:00.66328 INFO::Creating boxplot for categorical data, dysbiosisnonIBD vs Bifidobacterium.adolescentis
## 2026-04-28 18:39:00.794558 INFO::Creating boxplot for categorical data, dysbiosisnonIBD vs Alistipes.finegoldii
## 2026-04-28 18:39:00.930046 INFO::Creating boxplot for categorical data, dysbiosisnonIBD vs Roseburia.inulinivorans
## 2026-04-28 18:39:01.064981 INFO::Creating boxplot for categorical data, dysbiosisnonIBD vs Alistipes.onderdonkii
## 2026-04-28 18:39:01.203142 INFO::Creating boxplot for categorical data, dysbiosisnonIBD vs Roseburia.unclassified
## 2026-04-28 18:39:01.336428 INFO::Creating boxplot for categorical data, dysbiosisnonIBD vs Eubacterium.hallii
## 2026-04-28 18:39:01.465353 INFO::Creating boxplot for categorical data, dysbiosisnonIBD vs Roseburia.intestinalis
## 2026-04-28 18:39:01.598678 INFO::Creating boxplot for categorical data, dysbiosisnonIBD vs Prevotella.copri
## 2026-04-28 18:39:01.731641 INFO::Creating boxplot for categorical data, dysbiosisnonIBD vs Bacteroides.dorei
## 2026-04-28 18:39:01.859511 INFO::Creating boxplot for categorical data, dysbiosisnonIBD vs Bacteroides.fragilis
## 2026-04-28 18:39:01.983938 INFO::Creating boxplot for categorical data, dysbiosisnonIBD vs Alistipes.shahii
## 2026-04-28 18:39:03.166201 INFO::Plotting data for metadata number 4, antibiotics
## 2026-04-28 18:39:03.167259 INFO::Creating boxplot for categorical data, antibiotics vs Roseburia.inulinivorans
## 2026-04-28 18:39:03.288261 INFO::Creating boxplot for categorical data, antibiotics vs Roseburia.hominis
## 2026-04-28 18:39:03.432341 INFO::Creating boxplot for categorical data, antibiotics vs Eubacterium.rectale
## 2026-04-28 18:39:03.564631 INFO::Creating boxplot for categorical data, antibiotics vs Dialister.invisus
## 2026-04-28 18:39:03.693819 INFO::Creating boxplot for categorical data, antibiotics vs Roseburia.intestinalis
## 2026-04-28 18:39:03.817466 INFO::Creating boxplot for categorical data, antibiotics vs Dorea.longicatena
## 2026-04-28 18:39:03.949166 INFO::Creating boxplot for categorical data, antibiotics vs Ruminococcus.callidus
## 2026-04-28 18:39:04.082468 INFO::Creating boxplot for categorical data, antibiotics vs Ruminococcus.bromii
## 2026-04-28 18:39:04.215619 INFO::Creating boxplot for categorical data, antibiotics vs Ruminococcus.obeum
## 2026-04-28 18:39:04.345541 INFO::Creating boxplot for categorical data, antibiotics vs Klebsiella.pneumoniae
## 2026-04-28 18:39:04.48169 INFO::Creating boxplot for categorical data, antibiotics vs Bifidobacterium.adolescentis
## 2026-04-28 18:39:04.607848 INFO::Creating boxplot for categorical data, antibiotics vs Faecalibacterium.prausnitzii
## 2026-04-28 18:39:04.736854 INFO::Creating boxplot for categorical data, antibiotics vs Eubacterium.hallii
## 2026-04-28 18:39:04.871937 INFO::Creating boxplot for categorical data, antibiotics vs Bilophila.unclassified
## 2026-04-28 18:39:05.011195 INFO::Creating boxplot for categorical data, antibiotics vs Clostridium.leptum
## 2026-04-28 18:39:05.147608 INFO::Creating boxplot for categorical data, antibiotics vs Lachnospiraceae.bacterium.3.1.46FAA
## 2026-04-28 18:39:05.288629 INFO::Creating boxplot for categorical data, antibiotics vs Bacteroides.finegoldii
## 2026-04-28 18:39:05.420452 INFO::Creating boxplot for categorical data, antibiotics vs Eubacterium.sp.3.1.31
## 2026-04-28 18:39:05.547021 INFO::Creating boxplot for categorical data, antibiotics vs Bacteroides.fragilis
## 2026-04-28 18:39:05.675884 INFO::Creating boxplot for categorical data, antibiotics vs Alistipes.onderdonkii
## 2026-04-28 18:39:05.803552 INFO::Creating boxplot for categorical data, antibiotics vs Sutterella.wadsworthensis
## 2026-04-28 18:39:05.939046 INFO::Creating boxplot for categorical data, antibiotics vs Eubacterium.eligens
## 2026-04-28 18:39:06.103775 INFO::Creating boxplot for categorical data, antibiotics vs Collinsella.aerofaciens
## 2026-04-28 18:39:06.242985 INFO::Creating boxplot for categorical data, antibiotics vs Bacteroides.thetaiotaomicron
## 2026-04-28 18:39:06.384678 INFO::Creating boxplot for categorical data, antibiotics vs Bacteroides.eggerthii
## 2026-04-28 18:39:06.527182 INFO::Creating boxplot for categorical data, antibiotics vs Haemophilus.parainfluenzae
## 2026-04-28 18:39:06.665313 INFO::Creating boxplot for categorical data, antibiotics vs Bifidobacterium.pseudocatenulatum
## 2026-04-28 18:39:06.806515 INFO::Creating boxplot for categorical data, antibiotics vs Ruminococcus.torques
## 2026-04-28 18:39:06.939652 INFO::Creating boxplot for categorical data, antibiotics vs Eubacterium.ventriosum
## 2026-04-28 18:39:07.06676 INFO::Creating boxplot for categorical data, antibiotics vs Parasutterella.excrementihominis
## 2026-04-28 18:39:07.21041 INFO::Creating boxplot for categorical data, antibiotics vs Peptostreptococcaceae.noname.unclassified
## 2026-04-28 18:39:07.355868 INFO::Creating boxplot for categorical data, antibiotics vs Veillonella.dispar
## 2026-04-28 18:39:07.491227 INFO::Creating boxplot for categorical data, antibiotics vs Veillonella.atypica
## 2026-04-28 18:39:07.627257 INFO::Creating boxplot for categorical data, antibiotics vs Bacteroidales.bacterium.ph8
## 2026-04-28 18:39:07.76506 INFO::Creating boxplot for categorical data, antibiotics vs Clostridium.nexile
## 2026-04-28 18:39:07.89763 INFO::Creating boxplot for categorical data, antibiotics vs Burkholderiales.bacterium.1.1.47
## 2026-04-28 18:39:08.027518 INFO::Creating boxplot for categorical data, antibiotics vs Lachnospiraceae.bacterium.1.1.57FAA
## 2026-04-28 18:39:08.164 INFO::Creating boxplot for categorical data, antibiotics vs Akkermansia.muciniphila
## 2026-04-28 18:39:08.313952 INFO::Creating boxplot for categorical data, antibiotics vs Clostridium.citroniae
## 2026-04-28 18:39:08.446803 INFO::Creating boxplot for categorical data, antibiotics vs Odoribacter.splanchnicus
## 2026-04-28 18:39:09.648405 INFO::Plotting data for metadata number 5, age
## 2026-04-28 18:39:09.649281 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-28 18:39:09.808136 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-28 18:39:09.980681 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-28 18:39:10.116388 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-28 18:39:10.256236 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-28 18:39:10.389349 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-28 18:39:10.530464 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-28 18:39:10.679574 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-28 18:39:10.819932 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-28 18:39:10.963828 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-28 18:39:11.095724 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-28 18:39:11.249662 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-28 18:39:11.38034 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-28 18:39:11.522835 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-28 18:39:11.706712 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-28 18:39:11.845806 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-28 18:39:11.981928 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-28 18:39:12.114736 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-28 18:39:12.245463 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-28 18:39:12.381816 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-28 18:39:12.525439 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-28 18:39:12.674202 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-28 18:39:13.989843 INFO::Plotting data for metadata number 6, diagnosis
## 2026-04-28 18:39:13.990869 INFO::Creating boxplot for categorical data, diagnosis vs Bifidobacterium.adolescentis
## 2026-04-28 18:39:14.12103 INFO::Creating boxplot for categorical data, diagnosis vs Akkermansia.muciniphila
## 2026-04-28 18:39:14.46704 INFO::Creating boxplot for categorical data, diagnosis vs Clostridium.bolteae
## 2026-04-28 18:39:14.585193 INFO::Creating boxplot for categorical data, diagnosis vs Alistipes.putredinis
## 2026-04-28 18:39:14.711152 INFO::Creating boxplot for categorical data, diagnosis vs Coprobacillus.unclassified
## 2026-04-28 18:39:14.841286 INFO::Creating boxplot for categorical data, diagnosis vs Clostridium.clostridioforme
## 2026-04-28 18:39:14.96751 INFO::Creating boxplot for categorical data, diagnosis vs Alistipes.shahii
## 2026-04-28 18:39:15.093543 INFO::Creating boxplot for categorical data, diagnosis vs Ruminococcus.bromii
## 2026-04-28 18:39:15.206504 INFO::Creating boxplot for categorical data, diagnosis vs Clostridium.leptum
## 2026-04-28 18:39:15.33456 INFO::Creating boxplot for categorical data, diagnosis vs Clostridium.symbiosum
## 2026-04-28 18:39:15.462471 INFO::Creating boxplot for categorical data, diagnosis vs Roseburia.inulinivorans
## 2026-04-28 18:39:15.595302 INFO::Creating boxplot for categorical data, diagnosis vs Ruminococcus.bromii
## 2026-04-28 18:39:15.724645 INFO::Creating boxplot for categorical data, diagnosis vs Alistipes.shahii
## 2026-04-28 18:39:15.851704 INFO::Creating boxplot for categorical data, diagnosis vs Alistipes.finegoldii
## 2026-04-28 18:39:15.969739 INFO::Creating boxplot for categorical data, diagnosis vs Parabacteroides.goldsteinii
## 2026-04-28 18:39:16.09719 INFO::Creating boxplot for categorical data, diagnosis vs Bilophila.unclassified
## 2026-04-28 18:39:16.218511 INFO::Creating boxplot for categorical data, diagnosis vs Clostridium.leptum
## 2026-04-28 18:39:16.34072 INFO::Creating boxplot for categorical data, diagnosis vs Roseburia.hominis
## 2026-04-28 18:39:16.478438 INFO::Creating boxplot for categorical data, diagnosis vs Coprobacillus.unclassified
## 2026-04-28 18:39:16.60685 INFO::Creating boxplot for categorical data, diagnosis vs Alistipes.onderdonkii
## 2026-04-28 18:39:16.730667 INFO::Creating boxplot for categorical data, diagnosis vs Eubacterium.ventriosum
## 2026-04-28 18:39:16.861454 INFO::Creating boxplot for categorical data, diagnosis vs Roseburia.hominis
## 2026-04-28 18:39:16.988644 INFO::Creating boxplot for categorical data, diagnosis vs Sutterella.wadsworthensis
## 2026-04-28 18:39:17.114351 INFO::Creating boxplot for categorical data, diagnosis vs Akkermansia.muciniphila
## 2026-04-28 18:39:17.247924 INFO::Creating boxplot for categorical data, diagnosis vs Sutterella.wadsworthensis
## 2026-04-28 18:39:17.378616 INFO::Creating boxplot for categorical data, diagnosis vs Subdoligranulum.unclassified
## 2026-04-28 18:39:17.536996 INFO::Creating boxplot for categorical data, diagnosis vs Clostridium.symbiosum
## 2026-04-28 18:39:17.669924 INFO::Creating boxplot for categorical data, diagnosis vs Alistipes.onderdonkii
## 2026-04-28 18:39:17.803964 INFO::Creating boxplot for categorical data, diagnosis vs Parabacteroides.unclassified
## 2026-04-28 18:39:17.936841 INFO::Creating boxplot for categorical data, diagnosis vs Ruminococcus.lactaris
## 2026-04-28 18:39:18.073621 INFO::Creating boxplot for categorical data, diagnosis vs Ruminococcus.callidus
## 2026-04-28 18:39:18.205511 INFO::Creating boxplot for categorical data, diagnosis vs Ruminococcus.gnavus
## 2026-04-28 18:39:18.340802 INFO::Creating boxplot for categorical data, diagnosis vs Bacteroides.fragilis
## 2026-04-28 18:39:18.478609 INFO::Creating boxplot for categorical data, diagnosis vs Eubacterium.rectale
## 2026-04-28 18:39:18.61878 INFO::Creating boxplot for categorical data, diagnosis vs Odoribacter.splanchnicus
## 2026-04-28 18:39:18.757106 INFO::Creating boxplot for categorical data, diagnosis vs Parabacteroides.distasonis
## 2026-04-28 18:39:18.888677 INFO::Creating boxplot for categorical data, diagnosis vs Eubacterium.rectale
## 2026-04-28 18:39:19.025797 INFO::Creating boxplot for categorical data, diagnosis vs Bacteroides.finegoldii
## 2026-04-28 18:39:19.160967 INFO::Creating boxplot for categorical data, diagnosis vs Ruminococcus.callidus
## 2026-04-28 18:39:19.295457 INFO::Creating boxplot for categorical data, diagnosis vs Alistipes.finegoldii
## 2026-04-28 18:39:19.42383 INFO::Creating boxplot for categorical data, diagnosis vs Alistipes.putredinis
## 2026-04-28 18:39:19.553752 INFO::Creating boxplot for categorical data, diagnosis vs Clostridium.bolteae
## 2026-04-28 18:39:19.679389 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 Patched (2026-04-24 r89963)
## Platform: aarch64-apple-darwin23
## Running under: macOS Tahoe 26.3.1
## 
## Matrix products: default
## BLAS:   /Library/Frameworks/R.framework/Versions/4.6/Resources/lib/libRblas.0.dylib 
## LAPACK: /Library/Frameworks/R.framework/Versions/4.6/Resources/lib/libRlapack.dylib;  LAPACK version 3.12.1
## 
## locale:
## [1] C/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
## 
## time zone: America/New_York
## tzcode source: internal
## 
## attached base packages:
## [1] stats     graphics  grDevices utils     datasets  methods   base     
## 
## other attached packages:
## [1] Maaslin2_1.26.0
## 
## 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.3       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.2            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.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.