vegan (version 2.0-10)

metaMDS: Nonmetric Multidimensional Scaling with Stable Solution from Random Starts, Axis Scaling and Species Scores

Description

Function metaMDS performs Nonmetric Multidimensional Scaling (NMDS), and tries to find a stable solution using several random starts. In addition, it standardizes the scaling in the result, so that the configurations are easier to interpret, and adds species scores to the site ordination. The metaMDS function does not provide actual NMDS, but it calls another function for the purpose. Currently monoMDS is the default choice, and it is also possible to call the isoMDS (MASS package).

Usage

metaMDS(comm, distance = "bray", k = 2, trymax = 20, 
    engine = c("monoMDS", "isoMDS"), autotransform =TRUE,
    noshare = (engine == "isoMDS"), wascores = TRUE, expand = TRUE, 
    trace = 1, plot = FALSE, previous.best,  ...)
## S3 method for class 'metaMDS':
plot(x, display = c("sites", "species"), choices = c(1, 2),
    type = "p", shrink = FALSE,  ...)
## S3 method for class 'metaMDS':
points(x, display = c("sites", "species"),
    choices = c(1,2), shrink = FALSE, select, ...)
## S3 method for class 'metaMDS':
text(x, display = c("sites", "species"), labels, 
    choices = c(1,2), shrink = FALSE, select, ...)
## S3 method for class 'metaMDS':
scores(x, display = c("sites", "species"), shrink = FALSE, 
    choices, ...)
metaMDSdist(comm, distance = "bray", autotransform = TRUE, 
    noshare = TRUE, trace = 1, commname, zerodist = "ignore", 
    distfun = vegdist, ...)
metaMDSiter(dist, k = 2, trymax = 20, trace = 1, plot = FALSE, 
    previous.best, engine = "monoMDS", maxit = 200, ...)   
initMDS(x, k=2)
postMDS(X, dist, pc=TRUE, center=TRUE, halfchange, threshold=0.8,
    nthreshold=10, plot=FALSE, ...)
metaMDSredist(object, ...)

Arguments

comm
Community data. Alternatively, dissimilarities either as a dist structure or as a symmetric square matrix. In the latter case all other stages are skipped except random starts and centring and pc
distance
Dissimilarity index used in vegdist.
k
Number of dimensions. NB., the number of points $n$ should be $n > 2k + 1$, and preferably higher in non-metric MDS.
trymax
Maximum number of random starts in search of stable solution.
engine
The function used for MDS. The default is to use the monoMDS function in vegan, but for backward compatibility it is also possible to use isoMDS
autotransform
Use simple heuristics for possible data transformation of typical community data (see below). If you do not have community data, you should probably set autotransform = FALSE.
noshare
Triggering of calculation step-across or extended dissimilarities with function stepacross. The argument can be logical or a numerical value greater than zero and less than one. If TRUE
wascores
Calculate species scores using function wascores.
expand
Expand weighted averages of species in wascores.
trace
Trace the function; trace = 2 or higher will be more voluminous.
plot
Graphical tracing: plot interim results. You may want to set par(ask = TRUE) with this option.
previous.best
Start searches from a previous solution.
x
metaMDS result (or a dissimilarity structure for initMDS.
choices
Axes shown.
type
Plot type: "p" for points, "t" for text, and "n" for axes only.
display
Display "sites" or "species".
shrink
Shrink back species scores if they were expanded originally.
labels
Optional test to be used instead of row names.
select
Items to be displayed. This can either be a logical vector which is TRUE for displayed items or a vector of indices of displayed items.
X
Configuration from multidimensional scaling.
commname
The name of comm: should not be given if the function is called directly.
zerodist
Handling of zero dissimilarities: either "fail" or "add" a small positive value, or "ignore". monoMDS accepts zero dissimilarities and the default is ze
distfun
Dissimilarity function. Any function returning a dist object and accepting argument method can be used (but some extra arguments may cause name conflicts).
maxit
Maximum number of iterations in the single NMDS run; passed to the engine function monoMDS or isoMDS.
dist
Dissimilarity matrix used in multidimensional scaling.
pc
Rotate to principal components.
center
Centre the configuration.
halfchange
Scale axes to half-change units. This defaults TRUE when dissimilarities were evaluated within metaMDS and the dissimilarity index has an upper limit of $1$. If FALSE, the ordination dissimilarities are scaled
threshold
Largest dissimilarity used in half-change scaling.
nthreshold
Minimum number of points in half-change scaling.
object
A result object from metaMDS.
...
Other parameters passed to functions. Function metaMDS passes all arguments to its component functions metaMDSdist, metaMDSiter, postMDS, and to distfun and engine.

Value

  • Function metaMDS returns an object of class metaMDS. The final site ordination is stored in the item points, and species ordination in the item species, and the stress in item stress (NB, the scaling of the stress depends on the engine: isoMDS uses percents, and monoMDS proportions in the range $0 \ldots 1$). The other items store the information on the steps taken and the items returned by the engine function. The object has print, plot, points and text methods. Functions metaMDSdist and metaMDSredist return vegdist objects. Function initMDS returns a random configuration which is intended to be used within isoMDS only. Functions metaMDSiter and postMDS returns the result of NMDS with updated configuration.

encoding

UTF-8

Warning

metaMDS uses monoMDS as its NMDS engine from vegan version 2.0-0, when it replaced the isoMDS function. You can set argument engine to select the old engine.

Details

Non-metric Multidimensional Scaling (NMDS) is commonly regarded as the most robust unconstrained ordination method in community ecology (Minchin 1987). Function metaMDS is a wrapper function that calls several other functions to combine Minchin's (1987) recommendations into one command. The complete steps in metaMDS are:
  1. Transformation: If the data values are larger than common abundance class scales, the function performs a Wisconsin double standardization (wisconsin). If the values look very large, the function also performssqrttransformation. Both of these standardizations are generally found to improve the results. However, the limits are completely arbitrary (at present, data maximum 50 triggerssqrtand$>9$triggerswisconsin). If you want to have a full control of the analysis, you should setautotransform = FALSEand standardize and transform data independently. Theautotransformis intended for community data, and for other data types, you should setautotransform = FALSE. This step is perfomed usingmetaMDSdist.
  2. Choice of dissimilarity: For a good result, you should use dissimilarity indices that have a good rank order relation to ordering sites along gradients (Faith et al. 1987). The default is Bray-Curtis dissimilarity, because it often is the test winner. However, any other dissimilarity index invegdistcan be used. Functionrankindexcan be used for finding the test winner for you data and gradients. The default choice may be bad if you analyse other than community data, and you should probably select an appropriate index using argumentdistance. This step is performed usingmetaMDSdist.
  3. Step-across dissimilarities: Ordination may be very difficult if a large proportion of sites have no shared species. In this case, the results may be improved withstepacrossdissimilarities, or flexible shortest paths among all sites. The default NMDSengineismonoMDSwhich is able to break tied values at the maximum dissimilarity, and this often is sufficient to handle cases with no shared species, and therefore the default is not to usestepacrosswithmonoMDS. FunctionisoMDSdoes not handle tied values adequately, and therefore the default is to usestepacrossalways when there are sites with no shared species withengine = "isoMDS". Thestepacrossis triggered by optionnoshare. If you do not like manipulation of original distances, you should setnoshare = FALSE. This step is skipped if input data were dissimilarities instead of community data. This step is performed usingmetaMDSdist.
  4. NMDS with random starts: NMDS easily gets trapped into local optima, and you must start NMDS several times from random starts to be confident that you have found the global solution. The strategy inmetaMDSis to first run NMDS starting with the metric scaling (cmdscalewhich usually finds a good solution but often close to a local optimum), or use theprevious.bestsolution if supplied, and take its solution as the standard (Run 0). ThenmetaMDSstarts NMDS from several random starts (maximum number is given bytrymax). FunctionmonoMDSdefaults random starts, butisoMDSdefaults tocmdscale, and there random starts are generated byinitMDS. If a solution is better (has a lower stress) than the previous standard, it is taken as the new standard. If the solution is better or close to a standard,metaMDScompares two solutions using Procrustes analysis (functionprocrusteswith optionsymmetric = TRUE). If the solutions are very similar in their Procrustesrmseand the largest residual is very small, the solutions are regarded as convergent and the better one is taken as the new standard. Please note that the conditions are stringent, and you may have found good and relatively stable solutions although the function is not yet satisfied. Settingtrace = TRUEwill monitor the final stresses, andplot = TRUEwill display Procrustes overlay plots from each comparison. This step is performed usingmetaMDSiter. This is the only step performed if input data (comm) were dissimilarities.
  5. Scaling of the results:metaMDSwill runpostMDSfor the final result. FunctionpostMDSprovides the following ways offixingthe indeterminacy of scaling and orientation of axes in NMDS: Centring moves the origin to the average of the axes; Principal components rotate the configuration so that the variance of points is maximized on first dimension (with functionMDSrotateyou can alternatively rotate the configuration so that the first axis is parallel to an environmental variable); 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 set by argumentthreshold). If there are enough points below this threshold (controlled by the parameternthreshold), 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. If half-change scaling is not used, the ordination is scaled to the same range as the original dissimilarities.
  6. Species scores: Function adds the species scores to the final solution as weighted averages using functionwascoreswith given value of parameterexpand. The expansion of weighted averages can be undone withshrink = TRUEinplotorscoresfunctions, and the calculation of species scores can be suppressed withwascores = FALSE.

References

Faith, D. P, Minchin, P. R. and Belbin, L. (1987). Compositional dissimilarity as a robust measure of ecological distance. Vegetatio 69, 57--68.

Minchin, P.R. (1987) An evaluation of relative robustness of techniques for ecological ordinations. Vegetatio 69, 89--107.

See Also

monoMDS (and isoMDS), decostand, wisconsin, vegdist, rankindex, stepacross, procrustes, wascores, MDSrotate, ordiplot.

Examples

Run this code
## The recommended way of running NMDS (Minchin 1987)
##
data(dune)
# Global NMDS using monoMDS
sol <- metaMDS(dune)
sol
plot(sol, type="t")
## Start from previous best solution
sol <- metaMDS(dune, previous.best = sol)
## Local NMDS and stress 2 of monoMDS
sol2 <- metaMDS(dune, model = "local", stress=2)
sol2
## Use Arrhenius exponent 'z' as a binary dissimilarity measure
sol <- metaMDS(dune, distfun = betadiver, distance = "z")
sol

Run the code above in your browser using DataLab