Adding more functions to PERMANOVA


In QIIME2, PERMANOVA is used to evaluate whether between-group distances are larger than within-group distance. Based on what I read in the GUSTA ME website, I have the following suggestions to extend PERMANOVA functions in QIIME2 that can be really useful to users:

1.Testing homogeneity of multivariate dispersions. “Anderson (2001) warns that groups of objects with different dispersions, yet no significant differences in centres (centres are similar to means, but may be non-Euclidean), may result in misleadingly low P-values. It is thus recommended that the dispersion be evaluated and considered when interpreting the results of NPMANOVA.”

2. Enabling restricted permutations to handle nested or hierarchical designs. In my studies, experimental animals are kept in tanks. The tank is usually treated as a random effect nested within experimental treatments. Thus, “the analyst must define “strata” within which to restrict permutations.”


1 Like

Thanks @yanxianl! I believe both of these are already on our radar and we will post here when those make it into a future :qiime2: release.

See this issue

See this issue


1 Like

Hi Nicholas,

I found the issue related to my second feature request on enabling restricted permutation in QIIME2 was closed on the github as a result of the addition of multi-way PERMANVOA in the 2019.1 release. Can the multi-way PERMANOVA be used to handle cluster data as well? In my case, animals are kept in tanks which produces clustered data. Can it be analyzed using the newly implemented adonis?


Yes! I am not sure how to handle nested designs specifically, but to test something like a cage effect you could just use the formula treatment+cage. More complicated formulae should be possible — you would need to consult the vegan-adonis documentation to see how this would be done in R-vegan. QIIME 2 is just wrapping vegan-adonis, so the same formula structure should work.

1 Like

Hi Nicholas, if I understand the vegan documentation correctly, to run nested PERMANOVA, one needs to use the strata argument or how() function to define the permutation scheme. The following R codes shall do the same work:

  1. Use strata

adonis2(dist.matrix~treatment, data = metadata, permutations = 999, strata = “Tank”)

  1. Define permutation scheme via how()

perm <- how(nperm = 999,
within = Within(type = “none”),
plots = with(metadata, Plots(strata = Tank, type = “free”)))

adonis2(dist.matrix~treatment, data = metadata, permutations = perm)

However, neither is available in the current adonis visualization. Would be nice to have these features in the future releases of QIIME2, allowing for running PERMANOVA for complicated experiment designs.

In addition, it’ll be great to also enable users to run pairwise or selected pairs of PERMANOVA in adonis as shown in this github repository github repository.

Thanks @yanxianl! I have opened feature requests for these here and here. I do not know how quickly we can implement these changes, but we always welcome/encourage PRs from the community and it looks like you have already worked out the changes needed, so please feel free to contribute :wink: