クラスター分析
library(MASS) data(Boston) names(Boston) plot(Boston) attach(Boston) plot(tax,nox) #グループが見える?
summary(Boston) #変数によって単位などが異なるので、そのまま距離を算出することは不適切。変数を減少させて結果を解釈しやすくする。また因子得点は平均0、分散1に標準化されているので、距離への寄与は等しくなる。→因子分析を実行。 (res3v<-factanal(Boston[,-c(4,14)],factors=3,rotation="varimax",scores="regression")) plot(res3v$scores)
#距離行列の作成
d<-dist(res3v$scores) res.hc<-hclust(d) #全変数を使って 階層型クラスタ分析 plot(res.hc) #クラスタ数の目安をつける
set.seed(1234) #kmeansは確率的手法なので、そのたびに結果が変化する可能性あり。そうしないために乱数開始点を固定 cl2<-kmeans(res3v$scores,2) #2クラスタを指定して実行 cl2 #結果 names(cl2) cl2$size cl2$centers #もとのデータに因子得点、クラスタ番号をつける Boston2<-data.frame(Boston, res3v$scores, cl2$cluster) head(Boston2) #プロットしてみる par(mfrow=c(1,3)) plot(Boston2$Factor1,Boston2$Factor2,col=Boston2$cl2.cluster) plot(Boston2$Factor1,Boston2$Factor3,col=Boston2$cl2.cluster) plot(Boston2$Factor2,Boston2$Factor3,col=Boston2$cl2.cluster)
#クラスタ毎に各因子の平均値 by(Boston2$Factor1 ,Boston2$cl2.cluster,mean) by(Boston2$Factor2 ,Boston2$cl2.cluster,mean) by(Boston2$Factor3 ,Boston2$cl2.cluster,mean)
#クラスタ別に因子得点が異なるか検定(分散分析)
summary(aov(Factor1~as.factor(cl2.cluster),data=Boston2)) summary(aov(Factor2~as.factor(cl2.cluster),data=Boston2)) summary(aov(Factor3~as.factor(cl2.cluster),data=Boston2))