tetsunosukeのnotebook

tetsunosukeのメモです

Rでクラスター分析

テキストに沿って行くと重回帰分析の話なのですが、R的にはネタにならないので、別のことを。

Rでクラスター分析をしてみました。

データは、セ・リーグの球団で好きな順、という想定にしてみました。

まず、以下のようなCSVファイルを読みます。

中日,ヤクルト,巨人,阪神,広島,横浜
1,2,3,4,5,6
2,1,4,3,5,6
1,3,4,2,5,6
3,2,1,4,6,5
5,6,1,3,2,4
6,5,4,3,2,1
1,2,4,3,5,6
2,3,1,5,6,4
4,5,3,1,6,2
2,4,6,3,5,1

読み込んだあとに、それぞれのデータに名前をつけます

csv = read.csv("baseball.csv")
rownames(csv) <- c("a", "b","c", "d", "e", "f","g", "h","i", "j")

これで、以下のようなデータになりました。

> csv
  中日 ヤクルト 巨人 阪神 広島 横浜
a    1        2    3    4    5    6
b    2        1    4    3    5    6
c    1        3    4    2    5    6
d    3        2    1    4    6    5
e    5        6    1    3    2    4
f    6        5    4    3    2    1
g    1        2    4    3    5    6
h    2        3    1    5    6    4
i    4        5    3    1    6    2
j    2        4    6    3    5    1

各データ間の距離を調べると下記のようになり

> csv.dist = dist(csv)
> csv.dist
         a        b        c        d        e        f        g        h        i
b 2.000000                                                                        
c 2.449490 2.449490                                                               
d 3.162278 3.741657 4.472136                                                      
e 7.071068 7.483315 6.928203 6.164414                                             
f 8.366600 8.124038 8.000000 7.745967 4.472136                                    
g 1.414214 1.414214 1.414214 4.000000 7.348469 8.246211                           
h 3.464102 4.690416 4.898979 2.000000 6.164414 7.615773 4.472136                  
i 6.633250 6.480741 5.656854 5.656854 5.477226 5.099020 6.324555 5.656854         
j 6.324555 6.164414 5.656854 6.928203 7.483315 5.477226 5.830952 6.324555 4.472136

このdistを使ってクラスター分析をすると

> hc = hclust(csv.dist)
> plot(hc)

f:id:kidd-number5:20111116082639p:image

このようなデンドログラムになり、たとえば
下記のように、阪神と巨人の順番が違うのみのaさんとgさんがほぼ同一のクラスタである、という分類ができます。

  中日 ヤクルト 巨人 阪神 広島 横浜
a    1        2    3    4    5    6
g    1        2    4    3    5    6


それぞれのクラスタの近さを視覚的に表す方法としてはこの他にも、http://eau.uijin.com/advstats/cluster.html のような方法が使えるみたい。