isoMDS {MASS} | R Documentation |
Kruskal's Non-metric Multidimensional Scaling
Description
One form of non-metric multidimensional scaling
Usage
isoMDS(d, y = cmdscale(d, k), k = 2, maxit = 50, trace = TRUE,
tol = 1e-3, p = 2)
Shepard(d, x, p = 2)
Arguments
d |
distance structure of the form returned by |
y |
An initial configuration. If none is supplied, |
k |
The desired dimension for the solution, passed to |
maxit |
The maximum number of iterations. |
trace |
Logical for tracing optimization. Default |
tol |
convergence tolerance. |
p |
Power for Minkowski distance in the configuration space. |
x |
A final configuration. |
Details
This chooses a k-dimensional (default k = 2) configuration to minimize the stress, the square root of the ratio of the sum of squared differences between the input distances and those of the configuration to the sum of configuration distances squared. However, the input distances are allowed a monotonic transformation.
An iterative algorithm is used, which will usually converge in around
10 iterations. As this is necessarily an O(n^2)
calculation,
it is slow for large datasets. Further, since for the default p = 2
the configuration is only determined up to rotations and reflections
(by convention the centroid is at the origin), the result can vary
considerably from machine to machine.
Value
Two components:
points |
A k-column vector of the fitted configuration. |
stress |
The final stress achieved (in percent). |
Side Effects
If trace
is true, the initial stress and the current stress
are printed out every 5 iterations.
References
T. F. Cox and M. A. A. Cox (1994, 2001) Multidimensional Scaling. Chapman & Hall.
Ripley, B. D. (1996) Pattern Recognition and Neural Networks. Cambridge University Press.
Venables, W. N. and Ripley, B. D. (2002) Modern Applied Statistics with S. Fourth edition. Springer.
See Also
Examples
swiss.x <- as.matrix(swiss[, -1])
swiss.dist <- dist(swiss.x)
swiss.mds <- isoMDS(swiss.dist)
plot(swiss.mds$points, type = "n")
text(swiss.mds$points, labels = as.character(1:nrow(swiss.x)))
swiss.sh <- Shepard(swiss.dist, swiss.mds$points)
plot(swiss.sh, pch = ".")
lines(swiss.sh$x, swiss.sh$yf, type = "S")