似たようなグループをクラスター分析でサックリ作ってみるぞ
ここからは、先ほど作成した基準化後のデータを使って似ているグループを作ってみましょう。使用する方法は次の通りです。
- 階層クラスター
- Kmeansクラスター
階層クラスター分析を行う前に距離行列というものを作成する必要があります。似ていると距離が近くなり、似ていないと距離が遠くなる、そんなイメージです。
距離行列を求めるコードは次の通りです。
d1<-dist(scale.dummy)
続いて、階層クラスター分析を行います!
cluster1<-hclust(d1,method="ward.D2")
と、気合を入れてもたったこれだけです。
補足
- hclust()……()内の1つ目の変数は、先ほど作成した距離行列を指定します。
- method=の後は、階層クラスター分析の手法を指定します。様々、用意されていますがポピュラーなウォード法を使用してみましょう。
- help(hclust)……と入力すると英語ですがヘルプを参照できます。
- Rのバージョンが3.1以降であれば"ward.D2"を指定して下さい。3.0以下であれば"ward.D"とお願いします。
階層クラスター分析の結果を表示するには下記のように入力してください。
plot(cluster1)

この結果を見ると大きく2つに分割されてその後、細かく分割されていくことが確認できますね。せっかくですので結果を使ってみたいですよね!(半分強制)
ただし、細かく細かくグループ分けしてしまうとそれって一人一人のデータになってしまうので使い道がありません。。。ここでは、先ほどの図の結果を使って4つに分類してみます。
cutree1<-data.frame(cutree(cluster1,k=4))
cluster1を使用して、k=4で4つのグループに分ける設定しています。
内容を確認すると…
head(cutree1)

一つ一つのデータに対して、どのグループに属しているか結果が出ていますね。
もう一つのクラスター分析の手法であるkmeansを使ってみましょう。ここでも4つのグループに分割してみます。
kmeansは、指定したグループに分割してくれるのでなかなか使い勝手がよい手法です。
kmeans<-kmeans(d1,4)
どのグループになったのか結果を抽出するには下記のコードを入力します。
kmeans$cluster
階層クラスター分析の結果とkmeansの結果を比較してみましょう。こんな時に、何が要因として効いているのか?
クロス集計で一つ一つ確認していては、深夜0時から放送の「乃木坂ってどこ?」の放送開始に間に合わなくなってしまう可能性が高いです。避けたいところです。
そこで!
前回やりました決定木を使うことであっさり超えていけます。
結果をまとめつつ、最初のテーブルとマージしましょう。
result<-cbind(sample1,data.frame(kmeans$cluster),cutree1)
からの、変数名の変更です。
names(result)<-c("ID","CV","AGE","SEX","AD","kmeans","cluster")
で、次がとってもとっても大事です。
何が大事かというと、今回の階層クラスターとkmeansの結果は数値データで得られていますが、これらの数字の大小に意味は……
ないんです!!!
ないの。ただのラベルなの。代わりはいるもの。
str(result)
確認するとintになってますね? Factorに変えないとダメ、ゼッタイ。
result$kmeans<-as.factor(result$kmeans)
result$cluster <-as.factor(result$cluster)
str(result)
Factorに変わってますね?
では前回を踏まえて決定木を行ってみましょう。
library(rpart)
library(rattle)
library(rpart.plot)
tree1<-rpart(result$kmeans~CV+AGE+SEX+AD,data=result)
tree2<-rpart(result$cluster~CV+AGE+SEX+AD,data=result)
fancyRpartPlot(tree1)

fancyRpartPlot(tree2)

clusterのtree2の結果を例に取って解説します。
まず2つに分割される右側を確認すると、CV=yesがno…なので、CVしていないとオレンジのグループ3に割り当てられています。
CVしている場合、次はADがMailかそれ以外かで分割されています。ADがMailの場合にはグリーンのグループ1が割り当てられています。
ADがMailでなかった場合、Listingでなければパープルのグループ4が、Listingであればブルーのグループ2となっています。
但し、ブルーの中身を見ると
グループ1:15%(.15)、グループ2:85%(.85)、グループ3:0%(.00)、グループ4:0%(.00)
となっていますので、グループ1とグループ2になっている人が混在していますね。
kmeansの結果(tree1)ではグループ3が
グループ1:23%(.23)、グループ2:0%(.00)、グループ3:62%(.62)、グループ4:15%(.15)
と誤分類されてしまうケースが多くなっていました。
今回は、クラスター分析の結果に対して決定木を用いることで、データの構造を明らかにしました。
さてさて冒頭でも書きましたが、本連載はこれで最終回となります。Rという少々とっつきにくいテーマを扱ってきましたが、便利な道具であることは間違いありません。この連載をきっかけとしてみなさんがRと触れあう機会ができたのであれば、大変嬉しく思います。
またどこかでお会いできることを楽しみにしています!! お付き合いいただきありがとうございました!!
簡単! 2015年2月10日「3つ」覚えて分析から視覚化まで即実践!Rでできるデータ分析講座開催
Rをインストールしたが、無骨なUIに「今日はこのへんで……」と、そっと閉じてしまった方にオススメです!
本講座では実機を使って「できるだけわかりやすく」グラフ化&データ分析をワークショップ形式で簡単に身に付けることができます。