ZINB results interpretation (2-part model?)


I’ve been trying to find the best method to fit my models, where we are interested in examining association between a selection of genera (relative abundancies) and obesity, while controlling for confounders. Because we have high proportions of zeros, I believe a zero-inflated model would fit best. However, when I run Maaslin2 without transformation, without normalization, and with method=ZINB (note: I have converted our relative abundancies to integers), I get results for about half of my genera (I get warning messages similar to this: “system is computationally singular: reciprocal condition number = 7.43528e-38FALSE”). So, I have two questions:

  1. My interpretation of the warning messages above is that for some reason some of the model did not converge for some of the taxa. Is this assumption correct, and why may that be?

  2. My main question is actually about the interpretation: my understanding is that ZINB is a two-part model, and I am used to getting two different sets of results: for the count part and for the zero-inflated part and I know to interpret them separately. How does Maaslin2 compute a single set of results and how do I interpret them? I know Maaslin2 uses function zeroinfl from package pscl. When I run my model on pscl, I get the results for the two parts separately, but also, since the results are with log link (count model) and logit link (zero-inflation model), I have to exponentiate my coefficients in order to interpret them. Is this also needed in Maaslin2?

Thank you so much for your help!


  1. Correct. Optimizing zero-inflated likelihood functions is tricky – they can be very flat in some regions, meaning the parameters are poorly identified. The optimization parameters used by pscl are reasonable defaults chosen to balance speed and accuracy, but they can fail as you observed. One could in theory mess around with these by editing the control argument of pscl::zeroinfl() but we don’t provide an interface to that (and my guess is that there wouldn’t be a single set of control settings you could find that would work for everything).
  2. Maaslin2 reports the coefficients for the count model, not the zero inflation component. You can see exactly what parts it extracts here.

Thanks so much, that’s very helpful.