anova.cca {vegan}R Documentation

Permutation Test for Constrained Correspondence Analysis, Redundancy Analysis and Constrained Analysis of Principal Coordinates


The function performs an ANOVA like permutation test for Constrained Correspondence Analysis (cca), Redundancy Analysis (rda) or Constrained Analysis of Principal Coordinates (capscale) to assess the significance of constraints.


## S3 method for class 'cca':
anova(object, alpha=0.05, beta=0.01, step=100, perm.max=9999,
      by = NULL, ...)

permutest(x, ...)

## S3 method for class 'cca':
permutest(x, permutations = 100,
          model = c("reduced", "direct", "full"),
          first = FALSE, strata, ...)


object,x A result object from cca.
alpha Targeted Type I error rate.
beta Accepted Type II error rate.
step Number of permutations during one step.
perm.max Maximum number of permutations.
by Setting by = "axis" will assess significance for each constrained axis, and setting by = "terms" will assess significance for each term (sequentially from first to last), and setting by = "margin" will assess the marginal effects of the terms (each marginal term analysed in a model with all other variables).
... Parameters passed to other functions. anova.cca passes all arguments to permutest.cca. In anova with by = "axis" you can use argument cutoff (defaults 1) which stops permutations after exceeding the given level.
permutations Number of permutations for assessing significance of constraints.
model Permutation model (partial match).
first Assess only the significance of the first constrained eigenvalue; will be passed from anova.cca.
strata An integer vector or factor specifying the strata for permutation. If supplied, observations are permuted only within the specified strata.


Functions anova.cca and permutest.cca implement an ANOVA like permutation test for the joint effect of constraints in cca, rda or capscale. Functions anova.cca and permutest.cca differ in printout style and in interface. Function permutest.cca is the proper workhorse, but anova.cca passes all parameters to permutest.cca.

In anova.cca the number of permutations is controlled by targeted “critical” P value (alpha) and accepted Type II or rejection error (beta). If the results of permutations differ from the targeted alpha at risk level given by beta, the permutations are terminated. If the current estimate of P does not differ significantly from alpha of the alternative hypothesis, the permutations are continued with step new permutations (at the first step, the number of permutations is step - 1). However, with by = "terms" a fixed number of permutations will be used, and this is given by argument permutations, or if this is missing, by step.

The function permutest.cca implements a permutation test for the “significance” of constraints in cca, rda or capscale. Community data are permuted with choice model = "direct", residuals after partial CCA/RDA/CAP with choice model = "reduced" (default), and residuals after CCA/RDA/CAP under choice model = "full". If there is no partial CCA/RDA/CAP stage, model = "reduced" simply permutes the data and is equivalent to model = "direct". The test statistic is ``pseudo-F'', which is the ratio of constrained and unconstrained total Inertia (Chi-squares, variances or something similar), each divided by their respective ranks. If there are no conditions (“partial” terms), the sum of all eigenvalues remains constant, so that pseudo-F and eigenvalues would give equal results. In partial CCA/RDA/CAP, the effect of conditioning variables (“covariables” is removed before permutation, and these residuals are added to the non-permuted fitted values of partial CCA (fitted values of X ~ Z). Consequently, the total Chi-square is not fixed, and test based on pseudo-F would differ from the test based on plain eigenvalues. CCA is a weighted method, and environmental data are re-weighted at each permutation step using permuted weights.

The default test is for the sum of all constrained eigenvalues. Setting first = TRUE will perform a test for the first constrained eigenvalue. Argument first can be set either in anova.cca or in permutest.cca. It is also possible to perform significance tests for each axis or for each term (constraining variable) using argument by in anova.cca. Setting by = "axis" will perform separate significance tests for each constrained axis. All previous constrained axes will be used as conditions (“partialled out”) and a test for the first constrained eigenvalues is performed. You can stop permutation tests after exceeding a given significance level with argument cutoff to speed up calculations in large models. Setting by = "terms" will perform separate significance test for each term (constraining variable). The terms are assessed sequentially from first to last, and the order of the terms will influence their significances. Setting by = "margin" will perform separate significance test for each marginal term in a model with all other terms. The marginal test also accepts a scope argument for the drop.scope which can be a character vector of term labels that are analysed, or a fitted model of lower scope. The marginal effects are also known as “Type III” effects, but the current function only evaluates marginal terms. It will, for instance, ignore main effects that are included in interaction terms. In calculating pseudo-F, all terms are compared to the same residual of the full model. Permutations for all axes or terms will start from the same .Random.seed, and the seed will be advanced to the value after the longest permutation at the exit from the function.


Function permutest.cca returns an object of class "permutest.cca", which has its own print method. The function anova.cca calls permutest.cca, fills an anova table and uses print.anova for printing.


The default permutation model changed from "direct" to "reduced" in vegan version 1.14-11 (release version 1.15-0), and you must explicitly set model = "direct" for compatibility with the old version.

Tests by = "terms" and by = "margin" are consistent only when model = "direct".


Jari Oksanen


Legendre, P. and Legendre, L. (1998). Numerical Ecology. 2nd English ed. Elsevier.

See Also

cca, rda, capscale to get something to analyse. Function drop1.cca calls anova.cca with by = "margin", and add1.cca an analysis for single terms additions, which can be used in automatic or semiautomatic model building (see deviance.cca).


vare.cca <- cca(varespec ~ Al + P + K, varechem)
## overall test
## Test for axes
anova(vare.cca, by="axis", perm.max=500)
## Sequential test for terms
anova(vare.cca, by="terms", permu=200)
## Marginal or Type III effects
anova(vare.cca, by="margin")
## Marginal test knows 'scope'
anova(vare.cca, by = "m", scope="P")

[Package vegan version 1.16-32 Index]