Differential analysis with gneiss


When calculating balances, only in the lowest nodes, we can easily group numerators or denominators, but in the high nodes, based on the balance equation, numerators can become denominator or reversely. I am wondering how gneiss can generate the list of numerators and denominators shown in the balance taxonomy plot.

I hope my question is clear!

Thank you,


Hi @Toan, not entirely sure what your question is, but let me take a stab.

  1. How is the numerator / denominator chosen? This part depends on standards (similar to which one is your right hand or left hand). In short, the assignment of numerator / denominator doesn’t really matter, so long as it is consistent across all of the samples. Here, we do this using the tree - the left subtree is the denominator and the right subtree is the numerator.

  2. The numerators / denominators are generated in balance_taxonomy for a specified internal node using the orientation described above. As mentioned before, it doesn’t really matter who is in numerator / denominator or vice versa, since it is only a difference in a minus sign. The main thing to note is that these form two different contrasting groups of taxa.

Hi @mortonjt,

Thanks a lot for your reply! It really make things clearer to me. But as I understand “numerator” is the number above the line of the fraction and “denominator” is the one below. In the tree image which I have attached, in balance X3, specie O2 is denominator, but in the balance X2, specie O2 become numerator. That’s why I don’t understand how gneiss can group “numerator” and “denominator”.

When I run the command “qiime gneiss ols-regression”, i get an error “Plugin error from gneiss: Detected zero variance balances - double check your table for unobserved features. Debug info has been saved to /tmp/qiime2-q2cli-err-5incqi6o.log”

I thought gneiss automatically add pseudocount when running this command. Do you have any ideas why i get this error?

And which statistical test I should use to analyse the difference between balances?

Thanks so much!



Its because each of the coordinates are independent of each other. In X3, the O1 is on the left (hence it is the numerator) and O2 is on the right (hence it is the denominator). In X2, Both O1 and O2 are on the left (so those are in the numerator), and O3 is on the right (so that is now in the denominator in for X2).

Regarding the plugin error, I’d check out one of the multiple posts about this


Regarding the statistical test, there is only 2 available - lme-regression for longitudinal analysis and ols-regression. ols-regression is the simplest and is typically the default.

Hi @mortonjt,

Thanks for your explanation! O2 is sometimes the numerator, sometimes is the denominator. So in the end where O2 should be grouped?

Regarding the plugin error, thanks for the link, it is really useful. What i did was pulling out the biom file of balances and i found lots of zero balances. How can add pseudocount into them, could you please give me the command to try?

Sorry for a lot of naive questions :slight_smile:

Thank you so much for your support!

1 Like

Hi @Toan, O2 can belong to multiple groups - its a change of coordinates.

I’d suggest reading our paper on this here and the references on the ILR transform in that paper. There is also a pretty nice wikipedia article that breaks this down.

The pseudocounts are added directly in the ilr transform commands. See qiime gneiss ilr-hierarchical --help or qiime gneiss ilr-phylogenetic --help

Hi @mortonjt,

I solve the zero balances problem. Thanks a lot for your help!



1 Like

This topic was automatically closed 31 days after the last reply. New replies are no longer allowed.