# Maaslin2 vs MMUPHin

**URL:** <https://forum.biobakery.org/t/maaslin2-vs-mmuphin/4466>\
**Category:** MaAsLin\
**Created:** [December 1, 2022, 8:04pm UTC](https://forum.biobakery.org/t/maaslin2-vs-mmuphin/4466 "2022-12-01T20:04:18Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![rahel31](https://yyz1.discourse-cdn.com/flex027/user_avatar/forum.biobakery.org/rahel31/32/1794_2.png) [@rahel31](https://forum.biobakery.org/u/rahel31)\
**Post date:** [December 1, 2022, 8:04pm UTC](https://forum.biobakery.org/t/maaslin2-vs-mmuphin/4466/1 "2022-12-01T20:04:18Z")

</div>

Hi, I am a new user of Maaslin2 and MMUPHin packages, and I’m not sure which one to use - as well I’m confused why the results are different.  
I have 16S amplicon sequencing data, from humans. I have more than 300 samples, sequenced in 4 different runs (a few months appart and had varying quality). I would like to as well diminish the confounding effect of age of the person.  
I am interested in a variable (“var”) that has 3 levels, but as it seems that MMUPHin cannot deal with more than two, then I have started with 2 levels for now.  
I have count data that has been filtered to have only taxa that are present in at least 5% of the samples.  
For Maaslin2 I run:

fit\_data\_TSS\_AST = Maaslin2(  
input\_data = df\_input\_data,  
input\_metadata = df\_input\_metadata,  
min\_prevalence = 0.05,  
normalization = “TSS”,  
transform = ‘AST’,  
output = “Maaslin2\_TSS\_AST\_var\_Age”,  
random\_effects = “Plate”,  
fixed\_effects = c(“var”,“Age”),  
reference = “var,e3”)

For MMUPHin

fit\_lm\_meta ← lm\_meta(feature\_abd = otu\_table,  
batch = “Plate”,  
exposure = “var”,  
covariates = “Age”,  
data = metadata,  
control = list(verbose = FALSE))

By MMUPHin Variance explained by run (Plate) before:

```
       Df SumsOfSqs MeanSqs F.Model R2 Pr(>F)    

```

Plate 3 4.347 1.44898 4.3819 **0.05193** 0.001 \*\*\*  
Residuals 240 79.361 0.33067 0.94807  
Total 243 83.708 1.00000

after:

```
       Df SumsOfSqs MeanSqs F.Model R2 Pr(>F)    

```

Plate 3 3.338 1.11259 3.3757 **0.04049** 0.001 \*\*\*  
Residuals 240 79.102 0.32959 0.95951  
Total 243 82.439 1.00000

The results from Maaslin2 (significant results , under 0.05 for q-value):

| feature | metadata | value | coef | stderr | N | N.not.0 | pval | qval |
| --- | --- | --- | --- | --- | --- | --- | --- | --- |
| X64f3a773c250e16004e1546f7a504082 | Age | Age | -0.0021747113575296 | 0.000428073175218923 | 244 | 38 | 7.57669310129663E-07 | 0.00140168822373988 |
| X943b6182fabfe1d061b8b5a78dd03ba2 | var | e2 | 0.0032969691011505 | 0.000719395197448784 | 244 | 14 | 7.41129764561043E-06 | 0.00685545032218964 |
| X94b51e4d3cd9c11f4295019c56c54fff | Age | Age | -0.00441241349809916 | 0.00102088071466314 | 244 | 36 | 2.26589633545076E-05 | 0.0137368573040787 |
| d485d060694e34bea416f2718b78916d | var | e2 | 0.00251710609189474 | 0.000591242182044747 | 244 | 16 | 0.0000297013130899 | 0.0137368573040787 |
| X414ea75fb1462d10153c7bed625b4b99 | Age | Age | -0.00549980227032218 | 0.00135891392207732 | 244 | 85 | 6.99837060011561E-05 | 0.0161837320127673 |
| X **4d6fe682a4dd9aad8decfab830a193e0** | var | e2 | 0.0305958073812541 | 0.0074457626693776 | 244 | 172 | 5.4686780910475E-05 | 0.0161837320127673 |
| **dfa833b266bd2993b86feab3617b34c3** | var | e2 | 0.0856153563649985 | 0.020827311368041 | 244 | 113 | 5.43566241897518E-05 | 0.0161837320127673 |
| X85e5f4133e5ea47da3e24828bdf463f5 | Age | Age | -0.0202145237636325 | 0.00495487202855318 | 244 | 145 | 6.14798474737681E-05 | 0.0161837320127673 |
| X6630583dd78eb092ece5e17515eb301d | Age | Age | -0.00287220450181886 | 0.000738457915721947 | 244 | 88 | 0.00013031433581666 | 0.0267868356956468 |
| bf37c87f8841a9f1a2cd20db4fa18b74 | Age | Age | -0.0123296167389853 | 0.00320981656251117 | 244 | 165 | 0.000157323495297528 | 0.0271737761445602 |
| d6b10cc94394ef8ebb3cde7e168bad0b | var | e2 | 0.00517067322095915 | 0.00134861733482618 | 244 | 13 | 0.00016157380410279 | 0.0271737761445602 |
| X6251bd9ebf43fae466939ab366f6e547 | Age | Age | -0.0134484525431645 | 0.00356032198500978 | 244 | 103 | 0.000199970386710597 | 0.0308287679512171 |
| X5e044f34a0a5ffd168ee1f5855fb99ad | Age | Age | -0.00358554288115779 | 0.000956653862164803 | 244 | 13 | 0.000223645512868537 | 0.0318264768312918 |
| X6343c15ef6a0b28bb8d019ebbcd0a55a | var | e2 | 0.014802943061795 | 0.0039906998959427 | 244 | 24 | 0.00025819175795474 | 0.0341181965868764 |
| e15b6ef1cd643dff3f0649b7baba06e8 | Age | Age | -0.00767302431211445 | 0.00209517285329667 | 244 | 130 | 0.000307588745151869 | 0.0379359452353972 |
| X31168bbdcf24a70a8e892927acedee65 | var | e2 | 0.00503120048542711 | 0.00139140009405133 | 244 | 13 | 0.000365582859122471 | 0.0422705180860357 |

Results from MMUPHin (meta\_fits table, first 3 and then 4d6fe682a4dd9aad8decfab830a193e0 on position 115 if sorted by q-value):

| feature | exposure | coef | stderr | pval | k | tau2 | stderr.tau2 | pval.tau2 | I2 | H2 | weight\_PL1 | weight\_PL2 | weight\_PL3 | weight\_PL4 | pval.bonf | qval.fdr |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| **dfa833b266bd2993b86feab3617b34c3** | e2 | 0.0854174143263161 | 0.0189210818739646 | 6.34949707183327E-06 | 4 | 0.000194254244816285 | 0.00115934198844055 | 0.378899260384403 | 13.3664774631044 | 1.15428759066575 | 28.4064769389096 | 29.4447803088867 | 13.243601959127 | 28.9051407930767 | 0.0441671016316722 | 0.0441671016316722 |
| 4e8b08e013947a5b90af66139033012c | e2 | 0.00479073978786018 | 0.00117065042118702 | 4.2697856742547E-05 | 2 | 0 | 4.41470455066627E-06 | 0.485339051662415 | 0 | 1 | NA | 67.4637738719965 | 32.5362261280035 | NA | 0.297006291501157 | 0.0644543394153818 |
| da96578ff1ca89aed029675b4c825780 | e2 | 0.00897873545336833 | 0.00211717311298607 | 2.22617816563329E-05 | 2 | 0 | 1.2990452355072E-05 | 0.840594251974998 | 0 | 1 | NA | 57.7518968829216 | NA | 42.2481031170784 | 0.154852953201452 | 0.0644543394153818 |
| **4d6fe682a4dd9aad8decfab830a193e0** | e2 | 0.0313240749329559 | 0.0115236982582148 | 0.0065631980311945 | 4 | 0.00036263338927189 | 0.000433668319768228 | 0.026427971376799 | 68.6693789864841 | 3.19176565178393 | 26.9692047069443 | 24.998413065039 | 22.0729197113666 | 25.9594625166501 | 1 | 0.399936086505716 |

Each pipeline gives very few significant results, out of which 1 is the same (dfa833b266bd2993b86feab3617b34c3).

Questions:

1. Are the commands correct - removing the confounding effects of the Age and Plate?
2. Why is 4d6fe682a4dd9aad8decfab830a193e0 significant in Maaslin2 and not in MMUPHin - is it somehow related to the weight of each run? And the MMUPHin better deals with the differences between runs?
3. The MMUPHin default normalization is “TSS” and transformation “AST” - I used the same for Maaslin2, so that the results could be comparable. However, Maaslin2 rather advises to use TMM or CSS for count data. MMUPHin should be ok to use with count data - so are these normalization and transformation methods OK to use here?

Thank you very much in advance!!

---

<div class="post-metadata">

**Author:** ![andrewGhazi](https://yyz1.discourse-cdn.com/flex027/user_avatar/forum.biobakery.org/andrewghazi/32/2950_2.png) [@andrewGhazi](https://forum.biobakery.org/u/andrewGhazi)\
**Post date:** [December 1, 2022, 9:27pm UTC](https://forum.biobakery.org/t/maaslin2-vs-mmuphin/4466/2 "2022-12-01T21:27:30Z")

</div>

MMUPHin is intended for meta-analyses where the batch variable is usually indicating something like the identifier for different studies conducted by different research groups. Unless your experimental conditions changed dramatically across the 4 runs/plates, you probably want to use MaAsLin2 here.

From a modeling perspective, when using a variable as a random effect in MaAsLin2 vs as a batch variable in MMUPHin the data aren’t handled in exactly the same way, so it makes sense to me that you’re getting consistent but not exactly equal results.

MaAsLin2’s default TSS + LOG normalization and transform is probably the best starting point for 16S data.

---

<div class="post-metadata">

**Author:** ![rahel31](https://yyz1.discourse-cdn.com/flex027/user_avatar/forum.biobakery.org/rahel31/32/1794_2.png) [@rahel31](https://forum.biobakery.org/u/rahel31)\
**Post date:** [December 4, 2022, 4:10pm UTC](https://forum.biobakery.org/t/maaslin2-vs-mmuphin/4466/3 "2022-12-04T16:10:15Z")

</div>

Thank you Andrew for your clear reply.  
One more question -  
Under this thread [Choosing analysis method for maaslin2](https://forum.biobakery.org/t/choosing-analysis-method-for-maaslin2/2107) it’s mentioned :

- Among the normalization approaches implemented in MaAsLin 2, `TMM` and `CSS` only work on counts and they also return normalized counts unlike `TSS` and `CLR`. Therefore, if your input is count, you can use the above two normalizations (i.e., `TMM`, `CSS,` or `NONE` (in case the data is already normalized)) without a further transformation (i.e. `transform = 'NONE'`).

I understand from here that with counts it would be better to use TMM or CSS with no normalization? However, you suggest that TSS with LOG should be ok with 16S count data as well ?  
Thank you for helping out!

---

<div class="post-metadata">

**Author:** ![andrewGhazi](https://yyz1.discourse-cdn.com/flex027/user_avatar/forum.biobakery.org/andrewghazi/32/2950_2.png) [@andrewGhazi](https://forum.biobakery.org/u/andrewGhazi)\
**Post date:** [December 5, 2022, 10:32pm UTC](https://forum.biobakery.org/t/maaslin2-vs-mmuphin/4466/4 "2022-12-05T22:32:34Z")

</div>

It’s not that you “should” use TMM or CSS, but more that you “can”. The effect of the different choices with alternative methods is overviewed in the results section of the paper (ctrl-f “TMM”, figs S2-S5) as well as [the tutorial](https://github.com/biobakery/biobakery/wiki/MaAsLin2#32-running-maaslin-2). But generally we recommend converting counts to relative abundance without rarefaction before running MaAsLin2. That’s generally the simplest and most effective approach.

---

<div class="post-metadata">

**Author:** ![rahel31](https://yyz1.discourse-cdn.com/flex027/user_avatar/forum.biobakery.org/rahel31/32/1794_2.png) [@rahel31](https://forum.biobakery.org/u/rahel31)\
**Post date:** [December 7, 2022, 10:29am UTC](https://forum.biobakery.org/t/maaslin2-vs-mmuphin/4466/5 "2022-12-07T10:29:12Z")

</div>

Thanks for the explication!  
Have a nice day
