Distance-based redundancy analysis (dbRDA) is an ordination method
similar to Redundancy Analysis (`rda`

), but it allows
non-Euclidean dissimilarity indices, such as Manhattan or
Bray-Curtis distance. Despite this non-Euclidean feature, the
analysis is strictly linear and metric. If called with Euclidean
distance, the results are identical to `rda`

, but dbRDA
will be less efficient. Functions `dbrda`

is constrained
versions of metric scaling, a.k.a. principal coordinates analysis,
which are based on the Euclidean distance but can be used, and are
more useful, with other dissimilarity measures. Function
`capscale`

is a simplified version based on Euclidean
approximation of dissimilarities. The functions can also perform
unconstrained principal coordinates analysis, optionally using
extended dissimilarities.

```
dbrda(formula, data, distance = "euclidean", sqrt.dist = FALSE,
add = FALSE, dfun = vegdist, metaMDSdist = FALSE,
na.action = na.fail, subset = NULL, ...)
capscale(formula, data, distance = "euclidean", sqrt.dist = FALSE,
comm = NULL, add = FALSE, dfun = vegdist, metaMDSdist = FALSE,
na.action = na.fail, subset = NULL, ...)
```

The functions return an object of class `dbrda`

or

`capscale`

which inherit from `rda`

. See

`cca.object`

for description of the result object.

- formula
Model formula. The function can be called only with the formula interface. Most usual features of

`formula`

hold, especially as defined in`cca`

and`rda`

. The LHS 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`

or function given in`dfun`

will be used to find the dissimilarities. The RHS defines the constraints. The constraints can be continuous variables or factors, they can be transformed within the formula, and they can have interactions as in a typical`formula`

. The RHS can have a special term`Condition`

that defines variables to be “partialled out” before constraints, just like in`rda`

or`cca`

. This allows the use of partial dbRDA.- data
Data frame containing the variables on the right hand side of the model formula.

- distance
The name of the dissimilarity (or distance) index if the LHS of the

`formula`

is a data frame instead of dissimilarity matrix.- sqrt.dist
Take square roots of dissimilarities. See section

`Details`

below.- comm
Community data frame which will be used for finding species scores when the LHS of the

`formula`

was a dissimilarity matrix. This is not used if the LHS is a data frame. If this is not supplied, the “species scores” are unavailable when dissimilarities were supplied. N.B., this is only available in`capscale`

:`dbrda`

does not return species scores. Function`sppscores`

can be used to add species scores if they are missing.- add
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).`"lingoes"`

(or`TRUE`

) uses the recommended method of Legendre & Anderson (1999: “method 1”) and`"cailliez"`

uses their “method 2”. The latter is the only one in`cmdscale`

.- dfun
Distance or dissimilarity function used. Any function returning standard

`"dist"`

and taking the index name as the first argument can be used.- metaMDSdist
Use

`metaMDSdist`

similarly as in`metaMDS`

. This means automatic data transformation and using extended flexible shortest path dissimilarities (function`stepacross`

) when there are many dissimilarities based on no shared species.- na.action
Handling of missing values in constraints or conditions. The default (

`na.fail`

) is to stop with missing values. Choices`na.omit`

and`na.exclude`

delete rows with missing values, but differ in representation of results. With`na.omit`

only non-missing site scores are shown, but`na.exclude`

gives`NA`

for scores of missing observations. Unlike in`rda`

, no WA scores are available for missing constraints or conditions.- subset
Subset of data rows. This can be a logical vector which is

`TRUE`

for kept observations, or a logical expression which can contain variables in the working environment,`data`

or species names of the community data (if given in the formula or as`comm`

argument).- ...
Other parameters passed to underlying functions (e.g.,

`metaMDSdist`

).

Jari Oksanen

Functions `dbrda`

and `capscale`

provide two alternative
implementations of dbRDA. Function `dbrda`

is based on McArdle
& Anderson (2001) and directly decomposes dissimilarities. With
Euclidean distances results are identical to `rda`

.
Non-Euclidean dissimilarities may give negative eigenvalues
associated with imaginary axes. Function `capscale`

is based on
Legendre & Anderson (1999): the dissimilarity data are first
ordinated using metric scaling, and the ordination results are
analysed as `rda`

. `capscale`

ignores the imaginary
component and will not give negative eigenvalues (but will report
the magnitude on imaginary component).

If the user supplied a community data frame instead of
dissimilarities, the functions will find dissimilarities using
`vegdist`

or distance function given in `dfun`

with
specified `distance`

. The functions will accept distance
objects from `vegdist`

, `dist`

, or any other
method producing compatible objects. The constraining variables can be
continuous or factors or both, they can have interaction terms, or
they can be transformed in the call. Moreover, there can be a
special term `Condition`

just like in `rda`

and
`cca`

so that “partial” analysis can be performed.

Function `dbrda`

does not return species scores, and they can
also be missing in `capscale`

, but they can be added after the
analysis using function `sppscores`

.

Non-Euclidean dissimilarities can produce negative eigenvalues
(Legendre & Anderson 1999, McArdle & Anderson 2001). If there are
negative eigenvalues, the printed output of `capscale`

will add
a column with sums of positive eigenvalues and an item of sum of
negative eigenvalues, and `dbrda`

will add a column giving the
number of real dimensions with positive eigenvalues. If negative
eigenvalues are disturbing, functions let you distort the
dissimilarities so that only non-negative eigenvalues will be
produced with argument `add = TRUE`

. Alternatively, with
`sqrt.dist = TRUE`

, square roots of dissimilarities can be
used which may help in avoiding negative eigenvalues (Legendre &
Anderson 1999).

The functions can be also used to perform ordinary metric scaling
a.k.a. principal coordinates analysis by using a formula with only a
constant on the right hand side, or `comm ~ 1`

. With
`metaMDSdist = TRUE`

, the function can do automatic data
standardization and use extended dissimilarities using function
`stepacross`

similarly as in non-metric multidimensional
scaling with `metaMDS`

.

Anderson, M.J. & Willis, T.J. (2003). Canonical analysis of principal
coordinates: a useful method of constrained ordination for
ecology. *Ecology* 84, 511--525.

Gower, J.C. (1985). Properties of Euclidean and non-Euclidean
distance matrices. *Linear Algebra and its Applications* 67, 81--97.

Legendre, P. & Anderson, M. J. (1999). Distance-based redundancy
analysis: testing multispecies responses in multifactorial ecological
experiments. *Ecological Monographs* 69, 1--24.

Legendre, P. & Legendre, L. (2012). *Numerical Ecology*. 3rd English
Edition. Elsevier.

McArdle, B.H. & Anderson, M.J. (2001). Fitting multivariate models
to community data: a comment on distance-based redundancy
analysis. *Ecology* 82, 290--297.

`rda`

, `cca`

, `plot.cca`

,
`anova.cca`

, `vegdist`

,
`dist`

, `cmdscale`

, `wcmdscale`

for underlying and related functions. Function `sppscores`

can add species scores or replace existing species scores.

The function returns similar result object as `rda`

(see
`cca.object`

). This section for `rda`

gives a
more complete list of functions that can be used to access and
analyse dbRDA results.

```
data(varespec, varechem)
## dbrda
dbrda(varespec ~ N + P + K + Condition(Al), varechem, dist="bray")
## avoid negative eigenvalues with sqrt distances
dbrda(varespec ~ N + P + K + Condition(Al), varechem, dist="bray",
sqrt.dist = TRUE)
## avoid negative eigenvalues also with Jaccard distances
(m <- dbrda(varespec ~ N + P + K + Condition(Al), varechem, dist="jaccard"))
## add species scores
sppscores(m) <- wisconsin(varespec)
```

Run the code above in your browser using DataLab