ほくそ笑む

R言語と統計解析について

主座標分析について簡単に紹介するよ!


(Principal Coordinate Analysis; PCoA)
(Classical Multidimensional Scaling; CMDS)
使23使
*1
*2使
使

データを用意する



使 eurodist 
21
 3313 km 
アテネ バルセロナ ブリュッセル カレー シェルブール ケルン
アテネ 0
バルセロナ 3313 0
ブリュッセル 2963 1318 0
カレー 3175 1326 204 0
シェルブール 3339 1294 583 460 0
ケルン 2762 1498 206 409 785 0





やってみよう


R cmdscale() 
cmdscale() 
eurodist  dist 
data(eurodist)
data <- as.matrix(eurodist)


result <- cmdscale(data,k= 2)
plot(result, type = "n")
text(result, labels = rownames(result))

2

比べてみよう


調
citynames <-c("アテネ", "バルセロナ", "ブリュッセル", "カレー", "シェルブール",
               "ケルン", "コペンハーゲン", "ジュネーブ", "ジブラルタル", "ハンブルク",
               "オランダのフック", "リスボン","ライオンズ", "マドリード", "マルセイユ",
               "ミラノ", "ミュンヘン", "パリ","ローマ", "ストックホルム", "ウィーン")
colors <-c(2, 4, 1, 1, 1,
            1, 6, 1, 1, 6,
            1, 3, 1, 3, 4,
            4, 5, 5, 2, 6, 5)
plot(result, type = "n")
text(result, labels = citynames, col = colors, cex = 0.8, font = 2)


 Google Map 


plot(result[,1], -result[,2], type = "n")
text(result[,1], -result[,2], labels = citynames, col = colors, cex = 0.8, font = 2)



2

縮約できる次元の限界



 Mardia 

k<- 2                                      # 縮約したい次元数
result <- cmdscale(data,k=k, eig = TRUE) # 固有値を計算するように指定
eig <- result$eig                           # 求まった固有値
p1 <- sum(abs(eig[1:k])) / sum(abs(eig))    # Mardia 第一基準の計算
p2 <- sum(eig[1:k] ^ 2) / sum(eig ^ 2)      # Mardia 第二基準の計算
cat("Mardia fit measure 1 = ", p1, "\n")
cat("Mardia fit measure 2 = ", p2, "\n")
 


Mardia fit measure 1 = 0.7537543 
Mardia fit measure 2 = 0.977388 


 0.8 
eurodist 2Mardia OK

まとめ





調使

(PDF) 

*1:主成分分析が簡単にできるサイトを作った http://d.hatena.ne.jp/hoxo_m/20120106/p1 参照

*2:正確には非類似度