第8回(12月17日) Task Check and Weekly Assignment

多次元尺度法による地図の作製

課題 □ 多次元尺度法により,次の土地間距離から地図を復元せよ 1.旭山動物園 2.東京ディズニーランド 3.海遊館 4.レオマワールド 5.AQUAS 6.ハウステンボス 7.美ら海水族館 8.(任意の観光地)

サンプルコード。

まずRのもってる土地データを使います。

data(eurodist)
eurodist
##                 Athens Barcelona Brussels Calais Cherbourg Cologne
## Barcelona         3313                                            
## Brussels          2963      1318                                  
## Calais            3175      1326      204                         
## Cherbourg         3339      1294      583    460                  
## Cologne           2762      1498      206    409       785        
## Copenhagen        3276      2218      966   1136      1545     760
## Geneva            2610       803      677    747       853    1662
## Gibraltar         4485      1172     2256   2224      2047    2436
## Hamburg           2977      2018      597    714      1115     460
## Hook of Holland   3030      1490      172    330       731     269
## Lisbon            4532      1305     2084   2052      1827    2290
## Lyons             2753       645      690    739       789     714
## Madrid            3949       636     1558   1550      1347    1764
## Marseilles        2865       521     1011   1059      1101    1035
## Milan             2282      1014      925   1077      1209     911
## Munich            2179      1365      747    977      1160     583
## Paris             3000      1033      285    280       340     465
## Rome               817      1460     1511   1662      1794    1497
## Stockholm         3927      2868     1616   1786      2196    1403
## Vienna            1991      1802     1175   1381      1588     937
##                 Copenhagen Geneva Gibraltar Hamburg Hook of Holland Lisbon
## Barcelona                                                                 
## Brussels                                                                  
## Calais                                                                    
## Cherbourg                                                                 
## Cologne                                                                   
## Copenhagen                                                                
## Geneva                1418                                                
## Gibraltar             3196   1975                                         
## Hamburg                460   1118      2897                               
## Hook of Holland        269    895      2428     550                       
## Lisbon                2971   1936       676    2671            2280       
## Lyons                 1458    158      1817    1159             863   1178
## Madrid                2498   1439       698    2198            1730    668
## Marseilles            1778    425      1693    1479            1183   1762
## Milan                 1537    328      2185    1238            1098   2250
## Munich                1104    591      2565     805             851   2507
## Paris                 1176    513      1971     877             457   1799
## Rome                  2050    995      2631    1751            1683   2700
## Stockholm              650   2068      3886     949            1500   3231
## Vienna                1455   1019      2974    1155            1205   2937
##                 Lyons Madrid Marseilles Milan Munich Paris Rome Stockholm
## Barcelona                                                                
## Brussels                                                                 
## Calais                                                                   
## Cherbourg                                                                
## Cologne                                                                  
## Copenhagen                                                               
## Geneva                                                                   
## Gibraltar                                                                
## Hamburg                                                                  
## Hook of Holland                                                          
## Lisbon                                                                   
## Lyons                                                                    
## Madrid           1281                                                    
## Marseilles        320   1157                                             
## Milan             328   1724        618                                  
## Munich            724   2010       1109   331                            
## Paris             471   1273        792   856    821                     
## Rome             1048   2097       1011   586    946  1476               
## Stockholm        2108   3188       2428  2187   1754  1827 2707          
## Vienna           1157   2409       1363   898    428  1249 1209      2105

この距離行列からMDSによって地図を作ります。MDSは大きく分けて二種類あって,計量MDSと非計量MDSとよばれます。 前者が物理的な距離等,厳密な距離関係に向いている,後者が心理的な距離等,厳密さを少し緩めた仮定をもったデータに向いている,ととらえておけばいいでしょう。 今回のデータは実測値なので,前者のMDSを使います。関数はcmdscaleです。

result.cmd <- cmdscale(eurodist, 2)
plot(result.cmd, type = "n")
text(result.cmd, rownames(result.cmd))

plot of chunk unnamed-chunk-2

距離データは素データから作ることも可能。 こちらのページ(http://www1.doshisha.ac.jp/~mjin/R/27/27.html)を参考に,アヤメのデータから距離行列を作って分析してみます。

data(iris)
summary(iris)
##   Sepal.Length   Sepal.Width    Petal.Length   Petal.Width 
##  Min.   :4.30   Min.   :2.00   Min.   :1.00   Min.   :0.1  
##  1st Qu.:5.10   1st Qu.:2.80   1st Qu.:1.60   1st Qu.:0.3  
##  Median :5.80   Median :3.00   Median :4.35   Median :1.3  
##  Mean   :5.84   Mean   :3.06   Mean   :3.76   Mean   :1.2  
##  3rd Qu.:6.40   3rd Qu.:3.30   3rd Qu.:5.10   3rd Qu.:1.8  
##  Max.   :7.90   Max.   :4.40   Max.   :6.90   Max.   :2.5  
##        Species  
##  setosa    :50  
##  versicolor:50  
##  virginica :50  
##                 
##                 
## 
head(iris[, -5])  #ラベルの部分を除く記法
##   Sepal.Length Sepal.Width Petal.Length Petal.Width
## 1          5.1         3.5          1.4         0.2
## 2          4.9         3.0          1.4         0.2
## 3          4.7         3.2          1.3         0.2
## 4          4.6         3.1          1.5         0.2
## 5          5.0         3.6          1.4         0.2
## 6          5.4         3.9          1.7         0.4
iris.dist <- dist(iris[, -5], method = "euclidean")
iris.cmd <- cmdscale(iris.dist)
plot(iris.cmd, type = "n")
text(iris.cmd, labels = iris[, 5], col = unclass(iris[, 5]))

plot of chunk unnamed-chunk-3

非計量なMDSはMASSパッケージのisoMDS関数を使います。

library(MASS)

例えば次のようなデータがあったとします(数値は変えてくれて結構!)。

ARASHI <- data.frame(list(names = c("Ohno", "Sakurai", "Aiba", "Nino", "Matujun"), 
    speed = c("3", "5", "4", "4", "7"), looks = c("3", "3", "4", "5", "6"), 
    pretty = c("5", "4", "2", "6", "1")))

ここから距離行列を作ってプロットしてみましょう。

A.dist <- dist(ARASHI[2:4])
result.iso <- isoMDS(A.dist, k = 2)
## initial  value 4.866698 
## final  value 0.000000 
## converged
result.iso$stress  #MDSの当てはまり評価
## [1] 2.504e-14
plot(result.iso$points, type = "n")
text(result.iso$points[, 1], result.iso$points[, 2], ARASHI$names)

plot of chunk unnamed-chunk-6

このように,印象評定のデータから類似度を計算し,分析に用いることもできます。実際マーケティングなんかでは使われてたりします。

こちらのサイトも参考にしてみてください。 http://d.hatena.ne.jp/download_takeshi/20100410/1270921957