normalization = "TSS" vs "NONE" for pre-filtered relative abundance data

Hello MaAsLin3 team,

We are running MaAsLin3 on shotgun metagenomics relative abundance data (N = 4,491). Before analysis, we pre-filtered the data, retaining only taxa with relative abundance > 0.0001 and prevalence > 10%.

Due to this filtering, the per-sample sum of relative abundances no longer equals exactly 1. While the median sum remains high (0.95), a few outlier samples drop significantly (minimum sum ≈ 0.067).

fit_joint ← maaslin3(
input_data = df_input_data, # Pre-filtered relative abundance matrix
input_metadata = df_metadata,
formula = ~ joint_group + covariates,
normalization = “TSS”, # ← Question is here
transform = “LOG”,
min_prevalence = 0.1
)

My questions:

  1. Is it more statistically appropriate to change to normalization = "NONE"? We are concerned that TSS might artificially inflate the abundances of the remaining taxa, especially for those extreme samples (e.g., re-scaling 0.067 back to 1).

  2. What is your recommended best practice for handling this type of pre-filtered relative abundance data?

Thank you for your time and for developing this great tool!

Hi,

  1. Yes, using TSS will re-inflate the abundances so they scale to 1, so I’d use normalization = "NONE".
  2. Everything else should work the same as normal. I’d set min_prevalence and min_abundance to 0 so they don’t re-filter your data based on what’s left.

Will

Hi Will,

Thank you for the clarification and the quick response! Using normalization = "NONE" and setting the internal filters to 0 makes perfect sense for my pre-filtered data. I will proceed with these settings.