R: Choose a Model by Permutation Tests in Constrained Ordination

ordistep {vegan} | R Documentation

## Choose a Model by Permutation Tests in Constrained Ordination

### Description

Automatic stepwise model building for constrained ordination methods (`cca`, `rda`, `capscale`). The function `ordistep` is modelled after `step` and can do forward, backward and stepwise model selection using permutation tests. Function `ordiR2step` performs forward model choice solely on adjusted R2 and P-value, for ordination objects created by `rda` or `capscale`.

### Usage

    ordistep(object, scope, direction = c("both", "backward", "forward"),
       Pin = 0.05, Pout = 0.1, permutations = how(nperm = 199), steps = 50,
       trace = TRUE, ...)
    ordiR2step(object, scope, Pin = 0.05, R2scope = TRUE,
       permutations = how(nperm = 499), trace = TRUE, R2permutations = 1000, ...)

### Arguments

`object` | In `ordistep`, an ordination object inheriting from `cca` or `rda`. In `ordiR2step`, the object must inherit from `rda`, that is, it must have been computed using `rda` or `capscale`.
`scope` | Defines the range of models examined in the stepwise search. This should be either a single formula, or a list containing components `upper` and `lower`, both formulae. See `step` for details. In `ordiR2step`, this defines the upper scope; it can also be an ordination object from with the model is extracted.
`direction` | The mode of stepwise search, can be one of `"both"`, `"backward"`, or `"forward"`, with a default of `"both"`. If the `scope` argument is missing, the default for `direction` is `"backward"` in `ordistep` (and `ordiR2step` does not have this argument, but only works forward).
`Pin, Pout` | Limits of permutation P-values for adding (`Pin`) a term to the model, or dropping (`Pout`) from the model. Term is added if P <= `Pin`, and removed if P > `Pout`.
`R2scope` | Use adjusted R2 as the stopping criterion: only models with lower adjusted R2 than scope are accepted.
`permutations` | 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. This is passed to `anova.cca`: see there for details.
`steps` | Maximum number of iteration steps of dropping and adding terms.
`trace` | If positive, information is printed during the model building. Larger values may give more information.
`R2permutations` | Number of permutations used in the estimation of adjusted R2 for `cca` using `RsquareAdj`.
`...` | Any additional arguments to `add1.cca` and `drop1.cca`.

### Details

The basic functions for model choice in constrained ordination are `add1.cca` and `drop1.cca`. With these functions, ordination models can be chosen with standard R function `step` which bases the term choice on AIC. AIC-like statistics for ordination are provided by functions `deviance.cca` and `extractAIC.cca` (with similar functions for `rda`). Actually, constrained ordination methods do not have AIC, and therefore the `step` may not be trusted. This function provides an alternative using permutation P-values.

Function `ordistep` defines the model, `scope` of models considered, and `direction` of the procedure similarly as `step`. The function alternates with `drop` and `add` steps and stops when the model was not changed during one step. The `-` and `+` signs in the summary table indicate which stage is performed. It is often sensible to have `Pout` > `Pin` in stepwise models to avoid cyclic adds and drops of single terms.

Function `ordiR2step` builds model forward so that it maximizes adjusted R2 (function `RsquareAdj`) at every step, and stopping when the adjusted R2 starts to decrease, or the adjusted R2 of the `scope` is exceeded, or the selected permutation P-value is exceeded (Blanchet et al. 2008). The second criterion is ignored with option `R2scope = FALSE`, and the third criterion can be ignored setting `Pin = 1` (or higher). Adjusted R2 cannot be calculated if the number of predictors is higher than the number of observations, but such models can be analysed with `R2scope = FALSE`. The R2 of `cca` is based on simulations (see `RsquareAdj`) and different runs of `ordiR2step` can give different results.

Functions `ordistep` (based on P values) and `ordiR2step` (based on adjusted R2 and hence on eigenvalues) can select variables in different order.

### Value

Functions return the selected model with one additional component, `anova`, which contains brief information of steps taken. You can suppress voluminous output during model building by setting `trace = FALSE`, and find the summary of model history in the `anova` item.

### Author(s)

Jari Oksanen

### References

Blanchet, F. G., Legendre, P. & Borcard, D. (2008) Forward selection of explanatory variables. Ecology 89, 2623–2632.

### See Also

The function handles constrained ordination methods `cca`, `rda`, `dbrda` and `capscale`. The underlying functions are `add1.cca` and `drop1.cca`, and the function is modelled after standard `step` (which also can be used directly but uses AIC for model choice, see `extractAIC.cca`). Function `ordiR2step` builds upon `RsquareAdj`.

### Examples

    ## See add1.cca for another example

    ### Dune data
    data(dune)
    data(dune.env)
    mod0 <- rda(dune ~ 1, dune.env)  # Model with intercept only
    mod1 <- rda(dune ~ ., dune.env)  # Model with all explanatory variables

    ## With scope present, the default direction is "both"
    ordistep(mod0, scope = formula(mod1), perm.max = 200)

    ## Example without scope. Default direction is "backward"
    ordistep(mod1, perm.max = 200)

    ## Example of ordistep, forward
    ## Not run:
    ordistep(mod0, scope = formula(mod1), direction="forward", perm.max = 200)

    ## End(Not run)
    ### Mite data
    data(mite)
    data(mite.env)
    mite.hel = decostand(mite, "hel")
    mod0 <- rda(mite.hel ~ 1, mite.env)  # Model with intercept only
    mod1 <- rda(mite.hel ~ ., mite.env)  # Model with all explanatory variables

    ## Example of ordiR2step with default direction = "both"
    ## (This never goes "backward" but evaluates included terms.)
    step.res <- ordiR2step(mod0, mod1, perm.max = 200)
    step.res$anova  # Summary table

    ## Example of ordiR2step with direction = "forward"
    ## Not run:
    step.res <- ordiR2step(mod0, scope = formula(mod1), direction="forward")
    step.res$anova  # Summary table

    ## End(Not run)

[Package vegan version 2.4-3 Index]