毎回やる儀式

今日は多次元尺度構成法!

今日のモデルのRQ例

  • 音楽の好みはひとそれぞれ。なんか分類する方法ないかしら。
  • 先日のキングオブコント,バナナマンの設楽さんだけ評価が違ったような気がするんだけど,みんなどういう基準で評価してるんだ?
  • SMAP,TOKIO,嵐・・・五人組のユニットが多いけど,ユニットを作る共通次元みたいなものがあるのかしら。

今日のモデルのRQ例解説

  • 音楽はジャンルによって,似ているとか似ていないとかがあります。例えば,ジャズとスカは似ている,クラッシックとテクノは似ていないなどの評価をすることができます。この類似度評定を元に音楽ジャンルを分類します。(MDSで布置を得る)
  • 一対比較の類似度評定から分類するのは簡単ですが,対象が多くなると組み合わせ数が多くなり,一つ一つの判断が大変になります。そこで,特定の値同士の距離行列を類似度評定とみなして分類することを考えます。(距離行列からMDS)
  • 複数の類似度評定があるとき,これを「次元の歪み」として表現する発展的なモデルがあります(INDSCAL)。

ここからが本番

今回のテーマは 多次元尺度構成法 (MultiDimensional Scaling),略してMDSです。

前回まではクラスタリングで「まとめていく」話をしていました。変数間の距離の近いものをひとまとめにする,というものでした。 数字が似ていると近い,という話でしたが,距離があるということは,空間的に離れているということ。この空間を再現するのがMDSです。

MDSは 距離から地図を作る技術 ,ととらえてください。 少し抽象的な言い方をすると,「相対的な関係から,背景にある空間関係を見出す」とも言えます。

距離から地図を作る(計量MDS/metric MDS)

サンプルデータで確かめてみましょう。まずは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(ノンメトリックMDS)とよばれます。

非計量MDSは距離の大小関係を条件にする分析方法で,データが順序尺度水準であれば良いとされています。計量MDSは間隔尺度水準以上でなければなりません。計量MDSが物理的な距等,厳密な距離関係に向いている,非計量MDSが心理的な距離等,厳密さを少し緩めた仮定をもったデータに向いている,ととらえておけばいいでしょう。

今回のデータは実測値なので,前者のMDSを使います。関数はcmdscaleです。

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

距離データから地図がかけたでしょうか。ピンとこない人は,次のサイトを参考に実際の距離を計算し,MDSしてみましょう。 次に示すのは一例です。

http://www.alles.or.jp/~halcyon/

chu_goku <- matrix(c(    0, 93.2,292.1,203.7,230.8,
                      93.2,    0,204.5,132.6,137.6,
                     291.2,204.5,    0,107.4, 98.5,
                     203.7,132.6,107.4,    0,120.6,
                     230.8,137.6, 98.5,120.6,    0),ncol=5)
colnames(chu_goku)<-c("Yamaguchi","Hiroshima","Tottori","Ssimane","Okayama")
result.cmd <- cmdscale(chu_goku,2)
plot(result.cmd,type="n")
text(result.cmd,colnames(chu_goku))

心理的尺度や評定値から地図を作る(非計量的MDS/non-metric MDS)

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

library(MASS)

今回も前回と同じ,KOCの芸人距離行列をターゲットにします。

# データを読み込みます。owarai1.csvを使ってください。
# 一列目は評定者の名前が入っているので除外します
dat <- read.csv("owarai1.csv",fileEncoding = "UTF-8")
# t()はtranspose(転置)の関数で,行と列をひっくり返します
dat.dist <- dist(t(dat[,-1]),method="euclidian")
dat.dist
##                      アキナ カミナリ 相席スタート スリムクラブ ハライチ
## カミナリ           43.41659                                            
## 相席スタート       16.88194 33.52611                                   
## スリムクラブ       32.72614 35.52464     31.49603                      
## ハライチ           28.49561 46.11941     27.65863     37.13489         
## スーパーマラドーナ 34.87119 42.79019     28.47806     39.20459 23.79075
## さらば青春の光     30.78961 31.38471     19.87461     39.86226 30.62679
## 和牛               47.30750 37.93415     37.80212     53.15073 44.49719
## 銀シャリ           28.80972 36.56501     24.14539     38.63936 22.27106
##                    スーパーマラドーナ さらば青春の光     和牛
## カミナリ                                                     
## 相席スタート                                                 
## スリムクラブ                                                 
## ハライチ                                                     
## スーパーマラドーナ                                           
## さらば青春の光               27.31300                        
## 和牛                         33.10589       28.31960         
## 銀シャリ                     20.14944       20.24846 30.69202

これを元に,MDSをしてみます。

result.iso <- isoMDS(dat.dist,k=2)
## initial  value 7.256674 
## iter   5 value 5.508022
## iter  10 value 5.085214
## iter  15 value 5.016502
## iter  15 value 5.014382
## iter  15 value 5.013850
## final  value 5.013850 
## converged
result.iso
## $points
##                          [,1]        [,2]
## アキナ              16.234685   4.5599662
## カミナリ            -6.756912 -24.9748213
## 相席スタート         4.750735  -1.5823185
## スリムクラブ        24.050961 -15.9084908
## ハライチ             6.210246  15.9794996
## スーパーマラドーナ  -5.403409  13.7553791
## さらば青春の光      -9.194414  -0.4752412
## 和牛               -28.000058   2.2876800
## 銀シャリ            -1.891833   6.3583470
## 
## $stress
## [1] 5.01385

ここで,$pointsとあるのは地図の座標です。

ところで,誰が二次元と決めたのでしょう? おかしなことをいうように思えるかもしれませんが,地図は二次元ですが,地球は三次元。数学的にはn次元空間というのもありえます。 心の空間は縦横に広がっているという決まりもありません。 数学的には何次元でもあり得るので,逆に二次元は少なすぎるということもあります。三次元,四次元と次元が増えて行ったほうが表現できる情報は多く,データもよりうまく再現できます。ただし,増えすぎると直感的にはわかりにくくなる。そこで,このバランスをどうとるのか,というのが問題になります。

MDSはデータと理論的な地図との距離を$stressという適合度で表現します。

今回は5.01385とでました。isoパッケージの特徴で, stressがパーセンテージで表現されていることに注意して,参考となる大きさを見てみましょう。 (参考;[連載] フリーソフトによるデータ解析・マイニング 第27回Rと多次元尺度法

5.01は「0.05 よい(good)」なので,よしとしましょうか。 プロットしましょう。

plot(result.iso$points,type="n")
text(result.iso$points,row.names(result.iso$points))

スリムクラブと和牛のネタが両極に位置しています。ハライチとカミナリも両極ですね。このことから次元にどういう意味があるか考えてもいいかもしれません。

もちろんこれも前回同様,評定者の方を地図にして考えることもできます。 色々な表現方法があることを理解し,イメージしてみてください。

MDSの世界は広い

地図を描くことができれば,地図の意味を読み取ったり,地図の上に情報を書き加えたりすることができます。MDSでどんなことができるか,少しご紹介します。

  • 個人差MDSというのがあります。Rではsmacofパッケージを使うと簡単にできます。一人一人の違いを軸の拡大・縮小率で表現します。
  • 選好度MDSというのがあります。別名prefmapです。これは類似度に加えて選好度のデータを使い,「理想点」をプロットするというもので,マーケティングなどで使われています。
  • 非対称MDSというのがあります。これはなぜか日本が世界一進んでいるジャンルです。データが非対称な類似度データを使うので,ソシオマトリックスやブランドスイッチングデータなどがつかわれます。表現方法も様々で,複素数を使うモデル,フォンミーゼス分布を使うモデル,楕円モデルに風モデル,丘モデルなど色々あって楽しいです。

MDSのまとめ

  • 距離=相対的な関係から地図を再現することができる
  • 厳密な距離でない,順序尺度水準の評定値や一対比較法のデータからでも,地図を再現することができる(計量MDSと非計量MDSの違いを理解しておくこと)
  • 次元の意味を考えることで,心理的次元を見出す・考察することができる。

本日の課題

  • 打席数(PA),安打数(AB),ホームランの数(HR),三振の数(K)をつかって,野球選手を分類します。
  • ストレス値を算出し,「良い(0.1)」の基準を超えるには何次元必要か考えてください。
  • 第一・第二次元を使ったマップ,第3・4次元を使ったマップを描いてください。
  • 前回のクラスタリングの結果を踏まえて,4クラスタに色分けした次のマップを書いてください。
    • まずは階層的クラスタリング(前回の手法)で4クラスタ分類情報を得る
    • MDSの第一,第二次元の座標と4クラスタ情報をまとめたデータセットを作る
    • クラスタ情報はファクター型にするのを忘れずに。
    • ggplotのaesで色指定(color)しましょう。
## initial  value 0.000000 
## final  value 0.000000 
## converged
## $points
##           [,1]        [,2]        [,3]        [,4]
## 1  -203.169295 -42.5233449   9.7040167   2.3687038
## 2  -232.056579   3.8149666  -9.2372729  12.1928218
## 3    45.486848 -42.0379794   5.4199241   5.7647548
## 4  -113.492690 -11.0895851 -18.1208816  15.5899094
## 5   335.425708 -22.3989182  -4.8099385  -2.6086928
## 6  -147.912914 -28.1779918  -2.2955071  11.1410792
## 7   183.261878 -39.7308868 -14.1440378  -8.2341751
## 8  -105.988662 -26.0128557   5.4569408  10.3868476
## 9    88.783116  13.2494547  -8.3581800  11.1403166
## 10  246.382438 -24.8679480  -0.9302963   3.5677307
## 11 -119.255793 -48.4902692  -9.7919175  -3.0005138
## 12 -206.088281  -4.8773910  -7.1751219  -2.5665123
## 13  152.929249 -26.3854843  -4.8671160   5.2109207
## 14   59.013247 -30.3632440  -5.7461809   0.1920359
## 15 -184.294161 -28.8084918  -3.6832277   6.6598321
## 16 -248.397790  24.4998739 -28.0373700  14.7727019
## 17    2.688398 -22.9243608 -15.7581467   6.9695723
## 18 -101.609528  22.1551308  -4.1090039   4.7157847
## 19   88.996118   7.2624368  12.8209007  -4.5618102
## 20  274.353884  -1.7772232   9.0194771   0.6662412
## 21   -6.790480  34.2195280  10.9156187   4.4721604
## 22 -198.138459 -55.4652853  -5.3654959 -12.1263526
## 23 -277.019964  -4.3089768  10.8527024   1.7195980
## 24  213.593021  14.6791710  -3.5344914   3.2551628
## 25 -265.564962   3.4415520  -9.6919756  -6.5646307
## 26  301.716845  14.1260078  26.0963534   4.6330909
## 27  156.687964  11.0035370  -2.1275836  -0.3951575
## 28 -208.732949  31.4549213  -6.9809482  -8.8059923
## 29   81.788736   4.4912465  -4.2945285  -0.3861387
## 30  219.564767  12.9391261 -11.3844470  -3.7225652
## 31 -233.887559  12.0562986  15.8411312  -1.7284427
## 32 -225.599279  30.9647115  -0.3010930  -7.9898273
## 33 -234.811257  20.4549980   0.3857944   0.4489860
## 34 -239.450936 -27.8122199  14.6073590  -1.8954032
## 35  -68.562867  22.1378191   4.1865686   8.3353740
## 36 -293.651142  13.1992331   2.4046920   7.2420642
## 37 -105.898117  32.4859159 -18.4769571  -2.9942608
## 38    1.057944  15.4149063   8.3873134  -6.5003560
## 39 -207.242005 -26.1355788 -20.1651438  -2.6995717
## 40  205.844044  -3.1651199   5.9671435   2.1355332
## 41  231.946212  -9.3052004  -1.4689358  -5.3264329
## 42  240.822106   1.2262361  -9.0268103  -4.8952906
## 43 -244.736972   5.4218288   4.6487091  -9.6659323
## 44  361.895199   2.8416289  -1.5320267  -0.2557883
## 45  329.187907  -1.3359634  -0.1716320  -1.2202112
## 46  376.218866  -2.5376073  -1.4481418  -2.2279315
## 47 -273.324355  14.0230580 -13.6932439   0.8389767
## 48 -159.509809  -0.6700883 -25.2779294 -17.7662819
## 49   13.006671  12.6272756  -7.1630162   4.5741318
## 50  170.650177  15.0917059  -0.4514835   1.1967478
## 51  274.435940 -17.6604737  -1.4674405  -0.9891072
## 52 -121.618092  29.0344863 -13.0068323  -7.1231538
## 53  345.667658   6.9590156   3.8411940   2.7178539
## 54  242.328612  13.7058726  -8.6010978  -1.6077564
## 55  175.099580  12.4249958   3.2896317   0.8876657
## 56 -202.496839  45.5448438  13.4334209  -0.5695758
## 57  -62.262623 -35.8931634   6.0290794   4.0555195
## 58  -58.057814  21.1664159   6.2107052  -4.9161584
## 59 -139.319726  -8.9547715   1.8863249  -3.0412060
## 60  -71.559481  -5.4049563  -1.9660639  -7.5252987
## 61  145.017560 -17.1198788   4.4023560 -11.7192481
## 62 -113.460646  -6.7018065  -8.4926510  -2.3277787
## 63 -165.572112  36.8561454  10.6274430  -3.9158485
## 64  107.114508  -1.2540691   2.3858338  -6.8645172
## 65  116.336921  29.4757409  -5.3729735  -0.1991741
## 66 -304.153297  -4.6336514  23.4229400 -13.9222031
## 67  120.037378   1.6454511  31.5659506  -3.8457436
## 68 -205.372462 -16.4665978  16.7934206   6.3602373
## 69  172.246472  36.5973318   5.2814353   5.0817881
## 70  185.200544  28.2258734  -2.4109060  12.1485122
## 71 -105.845440  -3.3818131  14.6034884   2.3149169
## 72  222.164020  -7.8806529  -2.1935624  -2.2032472
## 73  137.129210   6.2286411   5.2475405  -5.8963433
## 74 -133.048558 -34.1159928  24.1516515   7.6284061
## 75  173.805140  17.0754931 -13.4898072  -2.1368558
## 76   76.686010 -10.8049301   2.0601160  -4.0749944
## 77  -91.636678   4.8732719   8.1932212  12.7491458
## 78 -194.980321  16.3786247   6.4810193  -3.1186422
## 
## $stress
## [1] 5.106277e-12