1 日 30 分くらい，30 日で何とかＲをそこそこ使えるようになるための練習帳：Mac 版	 
ver.0.95（ほぼ完成版）	 

23 日目：階層的クラスター分析	  本日は階層的クラスター分析をやってみます。SPSS でやると，結構表示が遅い感じがするのですが，R はサクサクと結果を出してくれます。	  クラスター分析は，因子分析の方法と似ていて，様々な手法があります。距離の計算の仕方しかり，クラスタリングの方法しかり。いろいろと組み合わせることができますし，クラスター数をいくつにするかも特に基準があるわけではありません。そのため，やはり複数の結果を比較検討して決めるという手間がかかる分析です。	  今回は，データとして sam3.xlsx にある，「知識欲」「不可欠さ」「本好き」の３変数を使って，対象をクラスターに分けてみます。	  X という名前でデータを読み込んだら，以下のようにして変数を取り出し，標準化して，データフレーム形式にしておきます。
x0 <- c("知識欲","不可欠さ","本好き")
x1 <- x[x0]x2 <- scale(x1)x2<- data.frame(x2)	  間隔尺度であれば，基本的には（単位に特に意味がないなら）標準化したものを使うことが推奨されるようです。	  次に距離行列を求めます。
xd <- dist(x2, method="euclidean")	  dist は，距離行列を求める関数です。カッコの中は，ファイル名と，method=で求める方法を指定します。"euclidean"は，ユークリッド距離のことです。SPSS では，「測定方法」で，「ユークリッド距離」と，「平方ユークリッド距離」を選択できますが，dist では「平方ユークリッド距離」を直接計算できないので，後で二乗してやります。	  ヘルプを見ると，ユークリッドの他には"maximum"，"manhattan"，"canberra"，"binary"，"minkowski"の方法が選べるようです。間隔尺度のデータであるなら，基本的には，ユークリッドでよいのではないでしょうか…。
	  行列が準備できたらクラスター分析を実行させます。関数は，hclust です。カッコの中には，距離行列とクラスター分析の方法を指定します。なお，先に平方ユークリッド距離を23-1

1 日 30 分くらい，30 日で何とかＲをそこそこ使えるようになるための練習帳：Mac 版	 
ver.0.95（ほぼ完成版）	 

使う場合は，後で二乗するということを書きましたが，ここで二乗しています。方法は一般的なウォード法（method="ward"）を使っています。
clus1 <- hclust(xd^2, method="ward")	  方法には"ward"の他に，"single"，"complete"，"average"，"mcquitty"，"median"，"centroid"，"complete"（これがデフォルト）が指定できるようです。	  なお，これは余談かもしれませんが，以前の SPSS は，ウォード法（"ward"）や重心法（"centroid"），メディアン法（"median"）では，距離行列に平方ユークリッド距離のみが用いられていました（少なくとも SPSS の ver.4 のマニュアルにはそのように記載があります）。また web を見ても，（当然のように）そのように記載されている場合があります。ウォード法の場合，平方ユークリッド距離でなければならないのか否か…が気になりますが…
わかりません…
	  結果の表示ですが，clus1で中身を見ると，極めてそっけなく，クラスター分析の方法，距離行列，人数のみを返してきます。	  デンドログラムを表示させるには…
plot(clus1)

Cluster Dendrogram
300	  これで右図のようなデンドログラムを作成してくれ

この図とにらめっこしていても，それぞれのクラスターの特徴はまったくわかり

863743145
21159
75
113
55
125
39116
64122
156
2620588274
103
2770
158
34
137
127
67
143
17141
585
3263
23357748
114
12876
7281110135493443352
56
146
10123
133
5089111
7980
134
160
102
95
241284
51
130
155
139
149
151
11799
128
87
1160
90
30971441483853622240
1357
105
98
154
14106
121
104
132
6591
119
129
36474694
296167
162
59118
15115
83
131
100
150
66
9671
16157
126
54147
140
6873124
153
112
109
152
161
314113878
136459108107120269442892
25
1988
93
142
18101	  しかし，悩むといっても，0抽出するか悩みましょう。

Heightら，いくつのクラスターを50 100200ます。これを参考にしながません。
実際に取り出して，特徴を比較してみなければはじまらないでしょう。

xd^2hclust (*, "ward")23-2

1 日 30 分くらい，30 日で何とかＲをそこそこ使えるようになるための練習帳：Mac 版	 
ver.0.95（ほぼ完成版）	 	  そこで，クラスター数を指定して，それぞれのクラスターに特定の番号を付し，クラスター間の異同を検討してみます。
x2$cl1 <- cutree(clus1, k=4)	  cutree は，デンドログラムを指定する位置で切断し，各クラスターに番号を振ってくれます。カッコの中は，クラスター分析の結果と，k=で取り出すクラスター数を指定します。
この例であれば，４つのクラスターを抽出し，分類番号を x2 に cl1 という変数名で保存しなさいという意味になります。	 	  ついでに，３つを抽出する	 
x2$cl2 <- cutree(clus1, k=3)
もやっておいて結果を比較してみましょう。	  これらを実行した後，cl1 と cl2 のクロス表を作成してみると右のようになりました。	  ３クラスターを抽出した場合の２が，４クラスターを抽出した時の２と４に分かれていることがわかります。クラスターの番号は，単にデンドログラムの右からとか，左から順にふられているわけではないようです。	  さて，それぞれのクラスターの特徴把握ですが，もちろん describe.by などでクラスターごとの平均を計算し，エクセルにコピペしてグラフ化することができます。
またR上でも，以前紹介した plotmeans や boxplot を使って概略を把握することができます。	  boxplot を使って，３つのクラスターと４つのクラスターの場合を比較できるようやってみました。ここに貼り込むと図が小さくなりましたが，９日目に紹介した方法で，横を画面いっぱいまで広げて，３つのグラフを横に並べて表示してみました。なお，xlab=で各グラフの下に表示する内容を指定できます。
par(family="Osaka", mfrow=c(1,3))
boxplot(x2$知識欲 ~ x2$cl1, xlab="知識欲")
boxplot(x2$不可欠さ ~ x2$cl1, xlab="不可欠さ")
boxplot(x2$本好き ~ x2$cl1, xlab="本好き")
boxplot(x2$知識欲 ~ x2$cl2, xlab="知識欲")
boxplot(x2$不可欠さ ~ x2$cl2, xlab="不可欠さ")
boxplot(x2$本好き ~ x2$cl2, xlab="本好き")
23-3

-2-3-2-2-1-1-100011122

1 日 30 分くらい，30 日で何とかＲをそこそこ使えるようになるための練習帳：Mac 版	 
ver.0.95（ほぼ完成版）	 

1234

1234

12

不可欠さ

34

本好き

2

知識欲-2-3-2-2-1-1-10001112	 	 	 123

知識欲

12
不可欠さ

3123

本好き	 	  ３つのクラスターの２が，４つのクラスターの２，４に分かれたわけなので，これだけを見ると，４つの方がよさそうです。	 	 	  こんな作業を繰り返しながら，適切なクラスターを抽出していくことになります。	 	 

23-4