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 pseudoF ratios.
1 2 3 4 5 6  adonis2(formula, data, permutations = 999, method = "bray",
sqrt.dist = FALSE, add = FALSE, by = "terms",
parallel = getOption("mc.cores"), ...)
adonis(formula, data, permutations = 999, method = "bray",
strata = NULL, contr.unordered = "contr.sum",
contr.ordered = "contr.poly", parallel = getOption("mc.cores"), ...)

formula 
Model formula. The LHS must be either a community
data matrix or a dissimilarity matrix, e.g., from

data 
the data frame for the independent variables. 
permutations 
a list of control values for the permutations
as returned by the function 
method 
the name of any method used in 
sqrt.dist 
Take square root of dissimilarities. This often euclidifies dissimilarities. 
add 
Add a constant to the nondiagonal dissimilarities such
that all eigenvalues are nonnegative in the underlying Principal
Coordinates Analysis (see 
by 

strata 
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). 
parallel 
Number of parallel processes or a predefined socket
cluster. With 
... 
Other arguments passed to 
adonis2
and adonis
are functions for the analysis and
partitioning sums of squares using dissimilarities. Function
adonis
is directly based on the algorithm of Anderson (2001) and
performs a sequential test of terms. Function adonis2
is based on
the principles of McArdle & Anderson (2001) and can perform sequential,
marginal and overall tests. Function adonis2
also allows using
additive constants or squareroot of dissimilarities to avoid negative
eigenvalues. but both functions can handle semimetric indices (such as
BrayCurtis) that produce negative eigenvalues. Function adonis2
can be much slower than adonis
, in particular with several
terms. With the same random permutation, tests are identical in both
functions, and the results are also identical to anova.cca
of dbrda
and capscale
. With Euclidean
distances, the tests are also identical to anova.cca
of
rda
.
The functions partition sums of squares of a multivariate data set, and
they are directly analogous to MANOVA (multivariate analysis of
variance). McArdle and Anderson (2001) and Anderson (2001) refer to the
method as “permutational manova” (formerly “nonparametric
manova”). Further, as the inputs are linear predictors, and a response
matrix of an arbitrary number of columns, they are a robust alternative
to both parametric MANOVA and to ordination methods for describing how
variation is attributed to different experimental treatments or
uncontrolled covariates. Functions are also analogous to distancebased
redundancy analysis in functions dbrda
and
capscale
(Legendre and Anderson 1999). Functions provide
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.
Function adonis2
returns an anova.cca
result
object. Function adonis
returns an object of class
"adonis"
with following components:
aov.tab 
Typical AOV table showing sources of variation, degrees of freedom, sequential sums of squares, mean squares, F statistics, partial Rsquared and P values, based on N permutations. 
coefficients 
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 
coef.sites 
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. 
f.perms 
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

model.matrix 
The 
terms 
The 
Anderson (2001, Fig. 4) warns that the method may confound
location and dispersion effects: significant differences may be caused
by different withingroup 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 (adonis
) and Jari Oksanen
(adonis2
).
Anderson, M.J. 2001. A new method for nonparametric multivariate analysis of variance. Austral Ecology, 26: 32–46.
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. Distancebased 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 distancebased redundancy analysis. Ecology, 82: 290–297.
Warton, D.I., Wright, T.W., Wang, Y. 2012. Distancebased multivariate analyses confound location and dispersion effects. Methods in Ecology and Evolution, 3, 89–101.
mrpp
, anosim
,
mantel
, varpart
.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31  data(dune)
data(dune.env)
## default test by terms
adonis2(dune ~ Management*A1, data = dune.env)
## overall tests
adonis2(dune ~ Management*A1, data = dune.env, by = NULL)
### 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) )
dat
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)
plot(mod)
### Ellipsoid hulls show treatment
with(dat, ordiellipse(mod, field, kind = "ehull", label = TRUE))
### Spider shows fields
with(dat, ordispider(mod, field, lty=3, col="red"))
### Incorrect (no strata)
perm < how(nperm = 199)
adonis2 (Y ~ NO3, data = dat, permutations = perm)
## Correct with strata
setBlocks(perm) < with(dat, field)
adonis2(Y ~ NO3, data = dat, permutations = perm)

Questions? Problems? Suggestions? Tweet to @rdrrHQ or email at ian@mutexlabs.com.
All documentation is copyright its authors; we didn't write any of that.