vegan (version 2.4-2)

wcmdscale: Weighted Classical (Metric) Multidimensional Scaling

Description

Weighted classical multidimensional scaling, also known as weighted principal coordinates analysis.

Usage

```wcmdscale(d, k, eig = FALSE, add = FALSE, x.ret = FALSE, w)
"plot"(x, choices = c(1, 2), type = "t", ...)
"scores"(x, choices = NA, ...)```

Arguments

d
a distance structure such as that returned by `dist` or a full symmetric matrix containing the dissimilarities.
k
the dimension of the space which the data are to be represented in; must be in \${1,2,\ldots,n-1}\$. If missing, all dimensions with above zero eigenvalue.
eig
indicates whether eigenvalues should be returned.
an additive constant \$c\$ is added to the non-diagonal dissimilarities such that all \$n-1\$ eigenvalues are non-negative. Alternatives are `"lingoes"` (default, also used with `TRUE`) and `"cailliez"` (which is the only alternative in `cmdscale`). See Legendre & Anderson (1999).
x.ret
indicates whether the doubly centred symmetric distance matrix should be returned.
w
Weights of points.
x
The `wcmdscale` result object when the function was called with options `eig = TRUE` or `x.ret = TRUE` (See Details).
choices
Axes to be returned; `NA` returns all real axes.
type
Type of graph which may be `"t"`ext, `"p"`oints or `"n"`one.
...
Other arguments passed to graphical functions.

Value

`eig = FALSE` and `x.ret = FALSE` (default), a matrix with `k` columns whose rows give the coordinates of points corresponding to positive eignenvalues. Otherwise, an object of class `wcmdscale` containing the components that are mostly similar as in `cmdscale`:

Details

Function `wcmdscale` is based on function `cmdscale` (package stats of base R), but it uses point weights. Points with high weights will have a stronger influence on the result than those with low weights. Setting equal weights `w = 1` will give ordinary multidimensional scaling.

With default options, the function returns only a matrix of scores scaled by eigenvalues for all real axes. If the function is called with `eig = TRUE` or `x.ret = TRUE`, the function returns an object of class `"wcmdscale"` with `print`, `plot`, `scores`, `eigenvals` and `stressplot` methods, and described in section Value.

The method is Euclidean, and with non-Euclidean dissimilarities some eigenvalues can be negative. If this disturbs you, this can be avoided by adding a constant to non-diagonal dissimilarities making all eigenvalues non-negative. The function implements methods discussed by Legendre & Anderson (1999): The method of Lingoes (`add="lingoes"`) adds the constant \$c\$ to squared dissimilarities \$d\$ using \$sqrt(d^2 + 2*c)\$ and the method of Cailliez (`add="cailliez"`) to dissimilarities using \$d + c\$. Legendre & Anderson (1999) recommend the method of Lingoes, and base R function `cmdscale` implements the method of Cailliez.

References

Gower, J. C. (1966) Some distance properties of latent root and vector methods used in multivariate analysis. Biometrika 53, 325--328.

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

Mardia, K. V., Kent, J. T. and Bibby, J. M. (1979). Chapter 14 of Multivariate Analysis, London: Academic Press.

The function is modelled after `cmdscale`, but adds weights (hence name) and handles negative eigenvalues differently. `eigenvals.wcmdscale` and `stressplot.wcmdscale` are some specific methods. Other multidimensional scaling methods are `monoMDS`, and `isoMDS` and `sammon` in package MASS.

Examples

Run this code
``````## Correspondence analysis as a weighted principal coordinates
## analysis of Euclidean distances of Chi-square transformed data
data(dune)
rs <- rowSums(dune)/sum(dune)
d <- dist(decostand(dune, "chi"))
ord <- wcmdscale(d, w = rs, eig = TRUE)
## Ordinary CA
ca <- cca(dune)
## Eigevalues are numerically similar
ca\$CA\$eig - ord\$eig
## Configurations are similar when site scores are scaled by
## eigenvalues in CA
procrustes(ord, ca, choices=1:19, scaling = "sites")
plot(procrustes(ord, ca, choices=1:2, scaling="sites"))
## Reconstruction of non-Euclidean distances with negative eigenvalues
d <- vegdist(dune)
ord <- wcmdscale(d, eig = TRUE)
## Only positive eigenvalues:
cor(d, dist(ord\$points))
## Correction with negative eigenvalues:
cor(d, sqrt(dist(ord\$points)^2 - dist(ord\$negaxes)^2))
``````

Run the code above in your browser using DataLab