Multidimensional Scaling Producing a map of distances from proximities
Goals Given a matrix of proximities produce a map (preferably two dimensional) Fit is measured by stress – how well the proximities (data) match the distances (map) Proximities can be metric (interval) or non-metric (ordinal)
Procedure Unlike principal components or correspondence analysis, there is no direct solution A random configuration (map) is generated and gradually improved in a series of iterations It is possible to be trapped in a local minimum
Number of Dimensions Usually fit 2 dimensions, but more are possible As with cluster analysis or principal components, we can look at changes in stress as the number of dimensions is increased
Distances between U.S. Cities
> (Map <- isoMDS(as.matrix(USA))) # Print and save results initial value final value converged $points [,1] [,2] Albuquerque, NM Atlanta, GA Billings, MT Boston, MA Chicago, IL Columbus, OH Dallas, TX Denver, CO Fargo, ND Kansas City, MO Los Angeles, CA Miami, FL New Orleans, LA New York, NY Portland, ME Salt Lake City, UT Seattle, WA $stress [1]
> str(Map) List of 2 $ points: num [1:17, 1:2] attr(*, "dimnames")=List of 2....$ : chr [1:17] "Albuquerque, NM " $ : NULL $ stress: num 3.46 > windows(10, 5, record=TRUE) > plot(Map$points, xlim=c(-2000, 2000), type="n", asp=1) > text(Map$points, labels=dimnames(Map$points)[[1]], cex=.8) > plot(-Map$points, xlim=c(-2000, 2000), type="n", asp=1) > text(-Map$points, labels=dimnames(Map$points)[[1]], cex=.8) > plot(as.dist(USA), dist(Coord)) > abline(a=0, b=1)
> (DarlMDS <- isoMDS(dist(DarlPoints[,6:9]))) initial value iter 5 value iter 10 value iter 15 value final value converged $points [,1] [,2] $stress [1] > plot(DarlMDS$points, xaxp=c(-3, 4, 7), yaxp=c(-1, 1, 2), las=1, pch=16, asp=1) > plot(dist(DarlPoints[,6:9]), dist(DarlMDS$points)) > abline(a=0, b=1)