Learn R Programming

vegan (version 1.6-0)

initMDS: Random Start and Axis Scaling for isoMDS

Description

Function initMDS gives a random start for multidimensional scaling, and postMDS performs some post-standardizations for multidimensional scaling, in order to make the configurations easier to interpret

Usage

initMDS(x, k=2)
postMDS(X, dist, pc=TRUE, center=TRUE, halfchange=TRUE, threshold=0.8,
        nthreshold=10, plot=FALSE)

Arguments

x
Dissimilarity matrix for isoMDS.
k
Number of dimensions.
X
Configuration from multidimensional scaling.
dist
Dissimilarity matrix used in multidimensional scaling.
pc
Rotate to principal components.
center
Centre the configuration.
halfchange
Scale axes to half-change units.
threshold
Largest dissimilarity used in half-change scaling.
nthreshold
Minimum number of points in half-change scaling.
plot
Show half-change scaling plot.

Value

  • Function initMDS returns a random configuration which is intended to be used within isoMDS only. Function postMDS returns the result of isoMDS with updated configuration.

Details

Non-metric Multidimensional Scaling (NMDS) is commonly regarded as the most robust unconstrained ordination method in community ecology (Minchin 1987). Functions initMDS and postMDS together with some other functions are intended to help run NMDS in isoMDS like recommended by Minchin (1987) -- NMDS is not a strong choice unless used correctly:
  1. You should use a dissimilarity index that has a good rank order relation with ecological gradients. Functionrankindexmay help in choosing an adequate index. Often a gooda priorichoice is to use Bray--Curtis index, perhaps withwisconsindouble standardization. Some recommended indices are available in functionvegdist.
  2. NMDS should be run with several random starts. It is dangerous to follow the common default of starting with metric scaling (cmdscale), because this may be close to a local optimum which will trap the iteration. FunctioninitMDSprovides such random starts.
  3. NMDS solutions with minimum stress should be compared for consistency. You should be satisfied only when several minimum stress solutions have similar configurations. In particular in large data sets, single points may be unstable even with about equal stress. FunctionpostMDSprovides a simple solution for fixing the scaling of NMDS. Functionprocrustesprovides Procrustes rotation for more formal inspection.

Function postMDS provides the following ways of ``fixing'' the indeterminacy of scaling and orientation of axes in NMDS: Centring moves the origin to the average of each axis. Principal components rotate the configuration so that the variance of points is maximized on first dimensions. Half-change scaling scales the configuration so that one unit means halving of community similarity from replicate similarity. Half-change scaling is based on closer dissimilarities where the relation between ordination distance and community dissimilarity is rather linear; the limit is controlled by parameter threshold. If there are enough points below this threshold (controlled by the the parameter nthreshold), dissimilarities are regressed on distances. The intercept of this regression is taken as the replicate dissimilarity, and half-change is the distance where similarity halves according to linear regression. Obviously the method is applicable only for dissimilarity indices scaled to $0 \ldots 1$, such as Kulczynski, Bray-Curtis and Canberra indices.

References

Minchin, P.R. (1987) An evaluation of relative robustness of techniques for ecological ordinations. Vegetatio 71, 145-156.

See Also

isoMDS, cmdscale, procrustes.

Examples

Run this code
## The recommended way of running NMDS (Minchin 1987)
##
data(varespec)
data(varechem)
library(MASS) ## isoMDS
library(mva)  ## cmdscale: default start to isoMDS
# Select a good dissimilarity index
rankindex(scale(varechem),varespec)
rankindex(scale(varechem),wisconsin(varespec))
vare.dist <- vegdist(wisconsin(varespec), "bray")
# Get the baseline solution: start with cmdscale
mds.null <- isoMDS(vare.dist, tol=1e-7)
## See if you can get any better.
repeat{
  mds.1<- isoMDS(vare.dist, initMDS(vare.dist), maxit=200, trace=FALSE, tol=1e-7)
  if(mds.1$stress < mds.null$stress) break
}
# Scale solutions ("fix translation, rotation and scale")
mds.null <- postMDS(mds.null, vare.dist)
mds.1 <- postMDS(mds.1, vare.dist)
# Compare solutions
plot(procrustes(mds.1, mds.null))

Run the code above in your browser using DataLab