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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26  metaMDS(comm, distance = "bray", k = 2, try = 20, 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, try = 20, trymax = 20, trace = 1, plot = FALSE,
previous.best, engine = "monoMDS", maxit = 200,
parallel = getOption("mc.cores"), ...)
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 
distance 
Dissimilarity index used in 
k 
Number of dimensions. NB., the number of points n should be n > 2*k + 1, and preferably higher in nonmetric MDS. 
try, trymax 
Minimum and maximum numbers of random starts in
search of stable solution. After 
engine 
The function used for MDS. The default is to use the

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

noshare 
Triggering of calculation stepacross or extended
dissimilarities with function 
wascores 
Calculate species scores using function

expand 
Expand weighted averages of species in

trace 
Trace the function; 
plot 
Graphical tracing: plot interim results. You may want to set

previous.best 
Start searches from a previous solution. 
x 

choices 
Axes shown. 
type 
Plot type: 
display 
Display 
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 
X 
Configuration from multidimensional scaling. 
commname 
The name of 
zerodist 
Handling of zero dissimilarities: either

distfun 
Dissimilarity function. Any function returning a

maxit 
Maximum number of iterations in the single NMDS run;
passed to the 
parallel 
Number of parallel processes or a predefined socket
cluster. If you use predefined socket clusters (say,

dist 
Dissimilarity matrix used in multidimensional scaling. 
pc 
Rotate to principal components. 
center 
Centre the configuration. 
halfchange 
Scale axes to halfchange units. This defaults

threshold 
Largest dissimilarity used in halfchange scaling. 
nthreshold 
Minimum number of points in halfchange scaling. 
object 
A result object from 
... 
Other parameters passed to functions. Function

Details
Nonmetric 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:
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 performssqrt
transformation. Both of these standardizations are generally found to improve the results. However, the limits are completely arbitrary (at present, data maximum 50 triggerssqrt
and >9 triggerswisconsin
). If you want to have a full control of the analysis, you should setautotransform = FALSE
and standardize and transform data independently. Theautotransform
is intended for community data, and for other data types, you should setautotransform = FALSE
. This step is perfomed usingmetaMDSdist
.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 BrayCurtis dissimilarity, because it often is the test winner. However, any other dissimilarity index in
vegdist
can be used. Functionrankindex
can 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
.Stepacross dissimilarities: Ordination may be very difficult if a large proportion of sites have no shared species. In this case, the results may be improved with
stepacross
dissimilarities, or flexible shortest paths among all sites. The default NMDSengine
ismonoMDS
which 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 usestepacross
withmonoMDS
. FunctionisoMDS
does not handle tied values adequately, and therefore the default is to usestepacross
always when there are sites with no shared species withengine = "isoMDS"
. Thestepacross
is 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
.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 in
metaMDS
is to first run NMDS starting with the metric scaling (cmdscale
which usually finds a good solution but often close to a local optimum), or use theprevious.best
solution if supplied, and take its solution as the standard (Run 0
). ThenmetaMDS
starts NMDS from several random starts (minimum number is given bytry
and maximum number bytrymax
). These 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,metaMDS
compares two solutions using Procrustes analysis (functionprocrustes
with optionsymmetric = TRUE
). If the solutions are very similar in their Procrustesrmse
and the largest residual is very small, the solutions are regarded as convergent and the better one is taken as the new standard. The conditions are stringent, and you may have found good and relatively stable solutions although the function is not yet satisfied. Settingtrace = TRUE
will monitor the final stresses, andplot = TRUE
will display Procrustes overlay plots from each comparison. This step is performed usingmetaMDSiter
. This is the only step performed if input data (comm
) were dissimilarities.Scaling of the results:
metaMDS
will runpostMDS
for the final result. FunctionpostMDS
provides the following ways of “fixing” the 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 functionMDSrotate
you can alternatively rotate the configuration so that the first axis is parallel to an environmental variable); Halfchange scaling scales the configuration so that one unit means halving of community similarity from replicate similarity. Halfchange 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 halfchange is the distance where similarity halves according to linear regression. Obviously the method is applicable only for dissimilarity indices scaled to 0 … 1, such as Kulczynski, BrayCurtis and Canberra indices. If halfchange scaling is not used, the ordination is scaled to the same range as the original dissimilarities.Species scores: Function adds the species scores to the final solution as weighted averages using function
wascores
with given value of parameterexpand
. The expansion of weighted averages can be undone withshrink = TRUE
inplot
orscores
functions, and the calculation of species scores can be suppressed withwascores = FALSE
.
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
… 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.
Convergence Problems
The function tries hard to find two convergent solutions, but it
may fail. With default engine = "monoMDS"
the function will
tabulate the stopping criteria used, so that you can see which
criterion should be made more stringent. The criteria can be given
as arguments to metaMDS
and their current values are
described in monoMDS
. In particular, if you reach
the maximum number of iterations, you should increase the value of
maxit
. You may ask for a larger number of random starts
without losing the old ones giving the previous solution in
argument previous.best
.
In addition to too slack convergence criteria and too low number
of random starts, wrong number of dimensions (argument k
)
is the most common reason for not finding convergent
solutions. NMDS is usually run with a low number dimensions
(k=2
or k=3
), and for complex data increasing
k
by one may help. If you run NMDS with much higher number
of dimensions (say, k=10
or more), you should reconsider
what you are doing and drastically reduce k
. For very
heterogeneous data sets with partial disjunctions, it may help to
set stepacross
, but for most data sets the default
weakties = TRUE
is sufficient.
Please note that you can give all arguments of other
metaMDS*
functions and NMDS engine (default
monoMDS
) in your metaMDS
command,and you
should check documentation of these functions for details.
Warning
metaMDS
uses monoMDS
as its
NMDS engine
from vegan version 2.00, when it replaced
the isoMDS
function. You can set argument
engine
to select the old engine.
Note
Function metaMDS
is a simple wrapper for an NMDS engine
(either monoMDS
or isoMDS
) and
some support functions (metaMDSdist
,
stepacross
, metaMDSiter
, initMDS
,
postMDS
, wascores
). You can call these support
functions separately for better control of results. Data
transformation, dissimilarities and possible
stepacross
are made in function metaMDSdist
which returns a dissimilarity result. Iterative search (with
starting values from initMDS
with monoMDS
) is
made in metaMDSiter
. Processing of result configuration is
done in postMDS
, and species scores added by
wascores
. If you want to be more certain of reaching
a global solution, you can compare results from several independent
runs. You can also continue analysis from previous results or from
your own configuration. Function may not save the used
dissimilarity matrix (monoMDS
does), but
metaMDSredist
tries to reconstruct the used dissimilarities
with original data transformation and possible
stepacross
.
The metaMDS
function was designed to be used with community
data. If you have other type of data, you should probably set some
arguments to nondefault values: probably at least wascores
,
autotransform
and noshare
should be FALSE
. If
you have negative data entries, metaMDS
will set the previous
to FALSE
with a warning.
Author(s)
Jari Oksanen
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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15  ## 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
