d <- read.table("inp_iris.txt",skip=1) x <-as.matrix(d[,-5]) n<-nrow(x) m<-ncol(x) xx <- x %*% t(x) ii <- matrix(1,nrow=n,ncol=n) dis <- (diag(n)*xx)%*%ii-2*xx+ii%*%(diag(n)*xx) #Distance matrix mat <- diag(n)-1/n*ii ary <- -0.5*mat %*% dis %*% mat #Young-Householder's transformation yy <- eigen(ary) emat<- matrix(0,nrow=n,ncol=n) for(i in 1:n){ if(0<=yy$values[i])emat[i,i]<-sqrt(yy$values[i]) if(yy$values[i]<0)emat[i,i]<-0 } plt <- yy$vectors %*% emat panel.text<-function(x, y, labels, cex, font, ...){ usr <- par("usr"); on.exit(par(usr)) par(usr = c(0,1,0,1) ) txt <- c("MDS") cex<-2 font<-"Helvetica" text(0.5, 0.5, txt, cex = cex) } pairs( plt[,1:4], diag.panel=NULL, text.panel=panel.text, pch=21, bg=c("red","green","blue")[unclass(d[,5])] ) eigen(ary)$values[1:4]