adonis: Permutational Multivariate Analysis of Variance Using...

Description Usage Arguments Details Value Note Author(s) References See Also Examples


Analysis of variance using distance matrices — for partitioning distance matrices among sources of variation and fitting linear models (e.g., factors, polynomial regression) to distance matrices; uses a permutation test with pseudo-F ratios.


adonis(formula, data, permutations = 999, method = "bray",
       strata = NULL, contr.unordered = "contr.sum",
       contr.ordered = "contr.poly", parallel = getOption("mc.cores"), ...)



a typical model formula such as Y ~ A + B*C, but where Y is either a dissimilarity object (inheriting from class "dist") or data frame or a matrix; A, B, and C may be factors or continuous variables. If a dissimilarity object is supplied, no species coefficients can be calculated (see Value below).


the data frame from which A, B, and C would be drawn.


a list of control values for the permutations as returned by the function how, or the number of permutations required, or a permutation matrix where each row gives the permuted indices.


the name of any method used in vegdist to calculate pairwise distances if the left hand side of the formula was a data frame or a matrix.


groups (strata) within which to constrain permutations.

contr.unordered, contr.ordered

contrasts used for the design matrix (default in R is dummy or treatment contrasts for unordered factors).


Number of parallel processes or a predefined socket cluster. With parallel = 1 uses ordinary, non-parallel processing. The parallel processing is done with parallel package.


Other arguments passed to vegdist.


adonis is a function for the analysis and partitioning sums of squares using semimetric and metric distance matrices. Insofar as it partitions sums of squares of a multivariate data set, it is directly analogous to MANOVA (multivariate analysis of variance). M.J. Anderson (McArdle and Anderson 2001, Anderson 2001) refers to the method as “permutational manova” (formerly “nonparametric manova”). Further, as its inputs are linear predictors, and a response matrix of an arbitrary number of columns (2 to millions), it is a robust alternative to both parametric MANOVA and to ordination methods for describing how variation is attributed to different experimental treatments or uncontrolled covariates. It is also analogous to redundancy analysis (Legendre and Anderson 1999).

Typical uses of adonis include analysis of ecological community data (samples X species matrices) or genetic data where we might have a limited number of samples of individuals and thousands or millions of columns of gene expression data (e.g. Zapala and Schork 2006).

adonis is an alternative to AMOVA (nested analysis of molecular variance, Excoffier, Smouse, and Quattro, 1992; amova in the ade4 package) for both crossed and nested factors.

If the experimental design has nestedness, then use strata to test hypotheses. For instance, imagine we are testing whether a plant community is influenced by nitrate amendments, and we have two replicate plots at each of two levels of nitrate (0, 10 ppm). We have replicated the experiment in three fields with (perhaps) different average productivity. In this design, we would need to specify strata = field so that randomizations occur only within each field and not across all fields . See example below.

Like AMOVA (Excoffier et al. 1992), adonis relies on a long-understood phenomenon that allows one to partition sums of squared deviations from a centroid in two different ways (McArdle and Anderson 2001). The most widely recognized method, used, e.g., for ANOVA and MANOVA, is to first identify the relevant centroids and then to calculated the squared deviations from these points. For a centered n x p response matrix Y, this method uses the p x p inner product matrix Y'Y. The less appreciated method is to use the n x n outer product matrix YY'. Both AMOVA and adonis use this latter method. This allows the use of any semimetric (e.g. Bray-Curtis, aka Steinhaus, Czekanowski, and Sørensen) or metric (e.g. Euclidean) distance matrix (McArdle and Anderson 2001). Using Euclidean distances with the second method results in the same analysis as the first method.

Significance tests are done using F-tests based on sequential sums of squares from permutations of the raw data, and not permutations of residuals. Permutations of the raw data may have better small sample characteristics. Further, the precise meaning of hypothesis tests will depend upon precisely what is permuted. The strata argument keeps groups intact for a particular hypothesis test where one does not want to permute the data among particular groups. For instance, strata = B causes permutations among levels of A but retains data within levels of B (no permutation among levels of B). See permutations for additional details on permutation tests in Vegan.

The default contrasts are different than in R in general. Specifically, they use “sum” contrasts, sometimes known as “ANOVA” contrasts. See a useful text (e.g. Crawley, 2002) for a transparent introduction to linear model contrasts. This choice of contrasts is simply a personal pedagogical preference. The particular contrasts can be set to any contrasts specified in R, including Helmert and treatment contrasts.

Rules associated with formulae apply. See "An Introduction to R" for an overview of rules.

print.adonis shows the component of the output.


This function returns typical, but limited, output for analysis of variance (general linear models).

Typical AOV table showing sources of variation, degrees of freedom, sequential sums of squares, mean squares, F statistics, partial R-squared and P values, based on N permutations.


matrix of coefficients of the linear model, with rows representing sources of variation and columns representing species; each column represents a fit of a species abundance to the linear model. These are what you get when you fit one species to your predictors. These are NOT available if you supply the distance matrix in the formula, rather than the site x species matrix


matrix of coefficients of the linear model, with rows representing sources of variation and columns representing sites; each column represents a fit of a sites distances (from all other sites) to the linear model. These are what you get when you fit distances of one site to your predictors.


an N by m matrix of the null F statistics for each source of variation based on N permutations of the data. The permutations can be inspected with permustats and its support functions.


The model.matrix for the right hand side of the formula.


The terms component of the model.


Anderson (2001, Fig. 4) warns that the method may confound location and dispersion effects: significant differences may be caused by different within-group variation (dispersion) instead of different mean values of the groups (see Warton et al. 2012 for a general analysis). However, it seems that adonis is less sensitive to dispersion effects than some of its alternatives (anosim, mrpp). Function betadisper is a sister function to adonis to study the differences in dispersion within the same geometric framework.


Martin Henry H. Stevens, adapted to vegan by Jari Oksanen.


Anderson, M.J. 2001. A new method for non-parametric multivariate analysis of variance. Austral Ecology, 26: 32–46.

Crawley, M.J. 2002. Statistical Computing: An Introduction to Data Analysis Using S-PLUS

Excoffier, L., P.E. Smouse, and J.M. Quattro. 1992. Analysis of molecular variance inferred from metric distances among DNA haplotypes: Application to human mitochondrial DNA restriction data. Genetics, 131:479–491.

Legendre, P. and M.J. Anderson. 1999. Distance-based redundancy analysis: Testing multispecies responses in multifactorial ecological experiments. Ecological Monographs, 69:1–24.

McArdle, B.H. and M.J. Anderson. 2001. Fitting multivariate models to community data: A comment on distance-based redundancy analysis. Ecology, 82: 290–297.

Warton, D.I., Wright, T.W., Wang, Y. 2012. Distance-based multivariate analyses confound location and dispersion effects. Methods in Ecology and Evolution, 3, 89–101.

Zapala, M.A. and N.J. Schork. 2006. Multivariate regression analysis of distance matrices for testing associations between gene expression patterns and related variables. Proceedings of the National Academy of Sciences, USA, 103:19430–19435.

See Also

mrpp, anosim, mantel, varpart.


adonis(dune ~ Management*A1, data=dune.env, permutations=99)

### Example of use with strata, for nested (e.g., block) designs.

dat <- expand.grid(rep=gl(2,1), NO3=factor(c(0,10)),field=gl(3,1) )
Agropyron <- with(dat, as.numeric(field) + as.numeric(NO3)+2) +rnorm(12)/2
Schizachyrium <- with(dat, as.numeric(field) - as.numeric(NO3)+2) +rnorm(12)/2
total <- Agropyron + Schizachyrium
dotplot(total ~ NO3, dat, jitter.x=TRUE, groups=field,
        type=c('p','a'), xlab="NO3", auto.key=list(columns=3, lines=TRUE) )

Y <- data.frame(Agropyron, Schizachyrium)
mod <- metaMDS(Y)
### Hulls show treatment
with(dat, ordihull(mod, group=NO3, show="0"))
with(dat, ordihull(mod, group=NO3, show="10", col=3))
### Spider shows fields
with(dat, ordispider(mod, group=field, lty=3, col="red"))

### Correct hypothesis test (with strata)
adonis(Y ~ NO3, data=dat, strata=dat$field, perm=999)

### Incorrect (no strata)
adonis(Y ~ NO3, data=dat, perm=999)

Example output

Loading required package: permute
Loading required package: lattice
This is vegan 2.4-3

adonis(formula = dune ~ Management * A1, data = dune.env, permutations = 99) 

Permutation: free
Number of permutations: 99

Terms added sequentially (first to last)

              Df SumsOfSqs MeanSqs F.Model      R2 Pr(>F)  
Management     3    1.4686 0.48953  3.2629 0.34161   0.02 *
A1             1    0.4409 0.44089  2.9387 0.10256   0.02 *
Management:A1  3    0.5892 0.19639  1.3090 0.13705   0.20  
Residuals     12    1.8004 0.15003         0.41878         
Total         19    4.2990                 1.00000         
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
   rep NO3 field
1    1   0     1
2    2   0     1
3    1  10     1
4    2  10     1
5    1   0     2
6    2   0     2
7    1  10     2
8    2  10     2
9    1   0     3
10   2   0     3
11   1  10     3
12   2  10     3
Run 0 stress 0.03248018 
Run 1 stress 0.1220157 
Run 2 stress 0.03248021 
... Procrustes: rmse 8.465921e-05  max resid 0.0002226793 
... Similar to previous best
Run 3 stress 0.03669575 
Run 4 stress 0.03248024 
... Procrustes: rmse 8.018295e-05  max resid 0.0002075907 
... Similar to previous best
Run 5 stress 0.03669584 
Run 6 stress 0.03248017 
... New best solution
... Procrustes: rmse 2.125228e-05  max resid 4.842529e-05 
... Similar to previous best
Run 7 stress 0.03248019 
... Procrustes: rmse 2.429663e-05  max resid 5.258833e-05 
... Similar to previous best
Run 8 stress 0.03248028 
... Procrustes: rmse 0.0001012927  max resid 0.0002628411 
... Similar to previous best
Run 9 stress 0.03248018 
... Procrustes: rmse 2.08818e-05  max resid 3.890347e-05 
... Similar to previous best
Run 10 stress 0.03669573 
Run 11 stress 0.03248023 
... Procrustes: rmse 8.914505e-05  max resid 0.0002318408 
... Similar to previous best
Run 12 stress 0.03248017 
... Procrustes: rmse 1.011436e-05  max resid 2.601106e-05 
... Similar to previous best
Run 13 stress 0.03669576 
Run 14 stress 0.0324802 
... Procrustes: rmse 5.933878e-05  max resid 0.0001542295 
... Similar to previous best
Run 15 stress 0.1619843 
Run 16 stress 0.1619842 
Run 17 stress 0.03248018 
... Procrustes: rmse 3.382356e-05  max resid 8.756129e-05 
... Similar to previous best
Run 18 stress 0.0324803 
... Procrustes: rmse 0.0001319686  max resid 0.0003451238 
... Similar to previous best
Run 19 stress 0.03248034 
... Procrustes: rmse 0.0001438231  max resid 0.0003732738 
... Similar to previous best
Run 20 stress 0.03669567 
*** Solution reached

adonis(formula = Y ~ NO3, data = dat, permutations = 999, strata = dat$field) 

Blocks:  strata 
Permutation: free
Number of permutations: 999

Terms added sequentially (first to last)

          Df SumsOfSqs   MeanSqs F.Model     R2 Pr(>F)  
NO3        1  0.026737 0.0267369     2.9 0.2248  0.011 *
Residuals 10  0.092197 0.0092197         0.7752         
Total     11  0.118934                   1.0000         
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

adonis(formula = Y ~ NO3, data = dat, permutations = 999) 

Permutation: free
Number of permutations: 999

Terms added sequentially (first to last)

          Df SumsOfSqs   MeanSqs F.Model     R2 Pr(>F)  
NO3        1  0.026737 0.0267369     2.9 0.2248  0.094 .
Residuals 10  0.092197 0.0092197         0.7752         
Total     11  0.118934                   1.0000         
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

vegan documentation built on May 2, 2019, 5:51 p.m.