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-
adonis2(formula, data, permutations = 999, method = "bray",
sqrt.dist = FALSE, add = FALSE, by = "terms",
parallel = getOption("mc.cores"), na.action = na.fail,
strata = NULL, ...)
The function returns an anova.cca
result object with a
new column for partial by = "margin"
) the
Model formula. The left-hand side (LHS) of the formula
must be either a community data matrix or a dissimilarity matrix,
e.g., from vegdist
or dist
. If the LHS
is a data matrix, function vegdist
will be used to
find the dissimilarities. The right-hand side (RHS) of the formula
defines the independent variables. These can be continuous variables
or factors, they can be transformed within the formula, and they can
have interactions as in a typical formula
.
the data frame for the independent variables.
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.
Take square root of dissimilarities. This often euclidifies dissimilarities.
Add a constant to the non-diagonal dissimilarities such
that all eigenvalues are non-negative in the underlying Principal
Co-ordinates Analysis (see wcmdscale
for
details). Choice "lingoes"
(or TRUE
) use the
recommended method of Legendre & Anderson (1999: “method
1”) and "cailliez"
uses their “method 2”.
by = "terms"
will assess significance for each term
(sequentially from first to last), setting by = "margin"
will assess the marginal effects of the terms (each marginal term
analysed in a model with all other variables), by = "onedf"
will analyse one-degree-of-freedom contrasts sequentially, by =
NULL
will assess the overall significance of all terms
together. The arguments is passed on to anova.cca
.
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.
Handling of missing values on the right-hand-side
of the formula (see na.fail
for explanation and
alternatives). Missing values are not allowed on the
left-hand-side. NB, argument subset
is not implemented.
Groups within which to constrain permutations. The traditional non-movable strata are set as Blocks in the permute package, but some more flexible alternatives may be more appropriate.
Other arguments passed to vegdist
.
Martin Henry H. Stevens and Jari Oksanen.
adonis2
is a function for the analysis and partitioning sums of
squares using dissimilarities. The function is based on the principles
of McArdle & Anderson (2001) and can perform sequential, marginal and
overall tests. The function also allows using additive constants or
squareroot of dissimilarities to avoid negative eigenvalues, but can
also handle semimetric indices (such as Bray-Curtis) that produce
negative eigenvalues. The adonis2
tests are identical to
anova.cca
of dbrda
. With Euclidean
distances, the tests are also identical to anova.cca
of
rda
.
The function partitions 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. The method is also analogous to distance-based
redundancy analysis in functions dbrda
and
capscale
(Legendre and Anderson 1999), and provides
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.
Anderson, M.J. 2001. A new method for non-parametric 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. 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.
mrpp
, anosim
,
mantel
, varpart
.
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, trace = FALSE)
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)
adonis2(Y ~ NO3, data = dat, permutations = 199)
## Correct with strata
with(dat, adonis2(Y ~ NO3, data = dat, permutations = 199, strata = field))
Run the code above in your browser using DataLab