Hello,
I wanted to thank you for such an incredible software that helps to deal with differential abundance in microbiome data! I am new to Maaslin2, and I am trying to fully grasp the entire concept of multivariate association in microbiome data. So far, I haven’t had a problem using my microbiome compositional 16S v3v4 data, but when it comes to using a metagenome prediciton table from PiCRUST2, I am not sure if I understand what Maaslin2 is giving me based on what I provide as input.
I am using the Maaslin2 package version 1.15.1, and here’s the function that I am running:
fit_data = Maaslin2(input_data = maaslin_pathways_df, input_metadata = metadata, output="test",
fixed_effects="Community", normalization="NONE",transform = "NONE")
To my understanding, it is better if I leave the normalization to ‘NONE’, as the pathway prediction output from PiCRUST2 has been already normalized. Now, my problem comes when I try using a transformation approach. If I leave it as ‘none’, I get my results without any problem, but with extreme values as coefficients:
|feature|metadata|value|coef|stderr|N|N.not.0|pval|qval|
|---|---|---|---|---|---|---|---|---|
|A190|Community|IAB+|-17529.95233|565.466816|144|69|4.39E-65|8.34E-63|
|A258|Community|IAB+|-8176.950351|473.0754|144|40|9.60E-37|9.12E-35|
|A235|Community|IAB+|-9766.651068|825.5791585|144|68|6.67E-23|4.23E-21|
|A226|Community|IAB+|11065.48753|990.4606028|144|29|3.45E-21|1.64E-19|
|A108|Community|IAB+|15395.7534|1393.26793|144|82|7.17E-21|2.72E-19|
|A189|Community|IAB+|11519.99242|1082.164736|144|29|8.07E-20|2.56E-18|
|A222|Community|IAB+|10158.40909|973.2338364|144|25|2.78E-19|7.55E-18|
|A159|Community|IAB+|30014.99033|2891.98848|144|84|3.96E-19|9.40E-18|
|A276|Community|IAB+|33228.05812|3215.108635|144|99|5.13E-19|1.08E-17|
|A175|Community|IAB+|34423.63919|3337.614958|144|102|5.82E-19|1.11E-17|
|A161|Community|IAB+|35026.82739|3409.791572|144|103|7.45E-19|1.28E-17|
|A253|Community|IAB+|34817.69019|3398.549856|144|110|8.77E-19|1.28E-17|
|A281|Community|IAB+|35719.82409|3484.775709|144|114|8.50E-19|1.28E-17|
|A31|Community|IAB+|27907.52411|2768.099388|144|92|2.31E-18|3.14E-17|
|A103|Community|IAB+|-4047.986773|426.3939224|144|17|7.44E-17|9.43E-16|
My guess is that I am skipping the log2 transformation that Maaslin2 does to my data, and thus I get these values. When I try using a “LOG” transformation to my file, it gives me the following error:
Error in min(x[x > 0])/2 : non-numeric argument to binary operator
I suppose this is because I have negative values in my normalized output from PiCRUST2, correct? If that’s the case, I think I should stick to the coefficient values I am getting from Maaslin2 without applying normalization or transformation. But, when it comes to generating a volcano plot, I suppose people are ‘used to seeing Log2(FC)’. Is there a way where I can simply get the Log2(FC)? I considered using the non-normalized output from PiCRUST2 and then normalize it with Maaslin2, but given that PiCRUST2 already considers 16S variation and ASV abundance, I’d rather use that approach instead.
So I guess my questions are:
- Should I use the maaslin2 coefficients without transformation and normalization from the output I get?
- If so, is there a simple way to plot the coefficient numbers into a more ‘reader-friendly’ Log2(FC) using this data?
- Should I just throw this away and use PiCRUST2 non-normalized pathway output and normalize/transform using Maaslin2?
Thanks a bunch!
Daniel CM