# Plotting MDS (multidimensional scaling)

4 messages
Open this post in threaded view
|

## Plotting MDS (multidimensional scaling)

 Hi, I just encountered what I thought was strange behavior in MDS. However, it turned out that the mistake was mine. The lesson learned from my mistake is that one should plot on a square pane when plotting results of an MDS. Not doing so can be very misleading. Follow the example of an equilateral triangle below to see what I mean. I hope this helps others to avoid this kind of headache. Let's say I have an equilateral triangle. Then, the three Euclidean distances between points A, B, and C  are all equal. That is, dist(AB)=dist(AC)=dist(BC). Let the points A, B, and C have (x,y)-coordinates  (0,0), (2,0), and (1,sqrt(3)). Then, MDS should reproduce an equilateral triangle, which it does if there are only three points. require(MASS) x=c(0,2,1,0,0,sqrt(3)) dim(x)=c(3,2) d1=dist(x) fit1<-isoMDS(d1) plot(fit1\$points, xlab="Coordinate 1", ylab="Coordinate 2",   main="Metric MDS",type="n") text(fit1\$points, labels = c('A','B','C'), cex=1) So far so good, until I add more points. Now assume, I add a fourth point D at {0,2*sqrt(3)}. This produces the rectangular triangle ABD with hypothenuse BD that encompasses the smaller triangle ABC such that C lies in the middle between B and D. Then, MDS should reproduce the rectangular triangle ABD and the equilateral triangle ABC within it. However, even though distance matrix d2 below still indicates that ABC is an equilateral triangle, the plot of the MDS does not confirm this. x=c(0,2,1,0,0,0,sqrt(3),2*sqrt(3)) dim(x)=c(4,2) d2=dist(x) fit2<-isoMDS(d2) plot(fit2\$points, xlab="Coordinate 1", ylab="Coordinate 2",   main="Metric MDS",type="n") text(fit2\$points, labels = c('A','B','C','D'), cex=1) The reason for this is that the dimension of the plot is automatically scaled to fit the points. This distorts the visual impression of the distances, angular relationships, and relative locations. If you plot on a square pane, however, peace and order are restored in the galaxy. plot(fit2\$points, xlab="Coordinate 1", ylab="Coordinate 2",   main="Metric MDS",type="n",xlim=c(-3,3),ylim=c(-3,3)) text(fit2\$points, labels = c('A','B','C','D'), cex=1) Best, Daniel
Open this post in threaded view
|

## Re: Plotting MDS (multidimensional scaling)

 Also try the asp parameter in plot. plot(fit2\$points, xlab="Coordinate 1", ylab="Coordinate 2",main="Metric MDS",type='n',asp=1) text(fit2\$points, labels = c('A','B','C','D'), cex=1) Hope it helps                                  mario On 02-Apr-11 22:07, Daniel Malter wrote: > Hi, > > I just encountered what I thought was strange behavior in MDS. However, it > turned out that the mistake was mine. The lesson learned from my mistake is > that one should plot on a square pane when plotting results of an MDS. Not > doing so can be very misleading. Follow the example of an equilateral > triangle below to see what I mean. I hope this helps others to avoid this > kind of headache. > > Let's say I have an equilateral triangle. Then, the three Euclidean > distances between points A, B, and C  are all equal. That is, > dist(AB)=dist(AC)=dist(BC). Let the points A, B, and C have > (x,y)-coordinates  (0,0), (2,0), and (1,sqrt(3)). Then, MDS should reproduce > an equilateral triangle, which it does if there are only three points. > > require(MASS) > x=c(0,2,1,0,0,sqrt(3)) > dim(x)=c(3,2) > d1=dist(x) > fit1<-isoMDS(d1) > plot(fit1\$points, xlab="Coordinate 1", ylab="Coordinate 2", >    main="Metric MDS",type="n") > text(fit1\$points, labels = c('A','B','C'), cex=1) > > So far so good, until I add more points. Now assume, I add a fourth point D > at {0,2*sqrt(3)}. This produces the rectangular triangle ABD with > hypothenuse BD that encompasses the smaller triangle ABC such that C lies in > the middle between B and D. Then, MDS should reproduce the rectangular > triangle ABD and the equilateral triangle ABC within it. However, even > though distance matrix d2 below still indicates that ABC is an equilateral > triangle, the plot of the MDS does not confirm this. > > x=c(0,2,1,0,0,0,sqrt(3),2*sqrt(3)) > dim(x)=c(4,2) > d2=dist(x) > fit2<-isoMDS(d2) > plot(fit2\$points, xlab="Coordinate 1", ylab="Coordinate 2", >    main="Metric MDS",type="n") > text(fit2\$points, labels = c('A','B','C','D'), cex=1) > > The reason for this is that the dimension of the plot is automatically > scaled to fit the points. This distorts the visual impression of the > distances, angular relationships, and relative locations. If you plot on a > square pane, however, peace and order are restored in the galaxy. > > plot(fit2\$points, xlab="Coordinate 1", ylab="Coordinate 2", >    main="Metric MDS",type="n",xlim=c(-3,3),ylim=c(-3,3)) > text(fit2\$points, labels = c('A','B','C','D'), cex=1) > > Best, > Daniel > > > > -- > View this message in context: http://r.789695.n4.nabble.com/Plotting-MDS-multidimensional-scaling-tp3422670p3422670.html> Sent from the R help mailing list archive at Nabble.com. > > ______________________________________________ > [hidden email] mailing list > https://stat.ethz.ch/mailman/listinfo/r-help> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html> and provide commented, minimal, self-contained, reproducible code. -- Ing. Mario Valle Data Analysis and Visualization Group            | http://www.cscs.ch/~mvalleSwiss National Supercomputing Centre (CSCS)      | Tel:  +41 (91) 610.82.60 v. Cantonale Galleria 2, 6928 Manno, Switzerland | Fax:  +41 (91) 610.82.82 ______________________________________________ [hidden email] mailing list https://stat.ethz.ch/mailman/listinfo/r-helpPLEASE do read the posting guide http://www.R-project.org/posting-guide.htmland provide commented, minimal, self-contained, reproducible code.