library(MASS) data(eurodist) #ヨーロッパの都市間距離 eurodist (res<-cmdscale(eurodist,k=2,eig=T)) #2次元を指定して実行 固有値なども計算 #出力 各都市の座標 # [,1] [,2] #Athens 2290.274680 1798.80293 #Barcelona -825.382790 546.81148 #Brussels 59.183341 -367.08135 #Calais -82.845973 -429.91466 #Cherbourg -352.499435 -290.90843 #Cologne 293.689633 -405.31194 #Copenhagen 681.931545 -1108.64478 #Geneva -9.423364 240.40600 #Gibraltar -2048.449113 642.45854 #Hamburg 561.108970 -773.36929 #Hook of Holland 164.921799 -549.36704 #Lisbon -1935.040811 49.12514 #Lyons -226.423236 187.08779 #Madrid -1423.353697 305.87513 #Marseilles -299.498710 388.80726 #Milan 260.878046 416.67381 #Munich 587.675679 81.18224 #Paris -156.836257 -211.13911 #Rome 709.413282 1109.36665 #Stockholm 839.445911 -1836.79055 #Vienna 911.230500 205.93020
#$eig
#[1] 1.953838e+07 1.185656e+07 1.528844e+06 1.118742e+06 7.893472e+05 5.816552e+05 2.623192e+05 1.925976e+05 1.450845e+05 1.079673e+05 5.139484e+04
#[12] -3.259629e-09 -9.496124e+03 -5.305820e+04 -1.322166e+05 -2.573360e+05 -3.326719e+05 -5.162523e+05 -9.191491e+05 -1.006504e+06 -2.251844e+06
#$x#NULL
#$ac#[1] 0
#$GOF 2次元で86.7%を説明#[1] 0.7537543 0.8679134
#プロットする plot(res$points) text(res, rownames(res$points),pos=4,col="red")
#プロットする 南北=上下入れ替え plot(res$points[,1],-res$points[,2]) text(res$points[,1],-res$points[,2], rownames(res),pos=4,col="red")
dat<-matrix(c( NA, 40, 60, 5,5, 40, NA, 50, 4,6, 60, 50, NA, 3,3, 5, 4, 3, NA,20, 5, 6, 3, 20,NA),byrow=T,nrow=5,ncol=5) #類似度行列
rownames(dat)<-colnames(dat)<-c("A","B","C","D","E")
dat
#これは類似度行列なので距離に直す=最大値から引く= m<-max(dat,na.rm=T) dat2<-as.dist(m-dat) dat2
#多次元尺度法 2次元を指定 (res<-cmdscale(dat2,k=2, eig=T))
#出力 # [,1] [,2] 座標
#A -19.66022 -1.455319 #B -19.30554 2.257076 #C -22.74339 -1.073071 #D 31.30054 -19.837010 #E 30.40860 20.108323 #$eig #[1] 3.180896e+03 8.062155e+02 1.975403e+02 1.705303e-13 -4.465212e+01 #$x #NULL #$ac #[1] 0 #$GOF #[1] 0.9427347 0.9527941 plot(res$points) #プロット text(res$points,rownames(res),pos=2)