トップ 差分 一覧 ソース 検索 ヘルプ RSS ログイン

ClusterAnalysis

クラスター分析  

  • サンプルを分類する
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))