以下のコードを使う。  

clust <- XXX  #分析したいデータを入れる

# 距離の計算
uclust <-  dist(clust)^2   #ユークリッド距離の平方

result <- hclust(uclust, method="ward.D2") #Ward法

groups <- cutree(result, k=4) #クラスタ数を4つとする
groups <- factor(groups)

#クラスタに名前を付ける
levels(groups)[1]<-"Group1"
levels(groups)[2]<-"Group2"
levels(groups)[3]<-"Group3"
levels(groups)[3]<-"Group4"

table(groups)

clust$groups<-groups
aggregate(.~groups, data=clust, FUN=mean)

クラスタ数の分析

 クラスタ数を選定する方法として、The Calinski-Harabasz indexがある。
 クラスター数ごとに、クラスタ内の距離の2乗の合計値(within sum of squares; WSS)を算出し、その曲線のエルボーを探す。クラスタ数が増加すると、total WSSが減少するのだが、理想的なクラスター数を超えるとWSSの減少割合が落ちるという見込みからエルボー探しをする。
 また、Calinski-Harabasz基準とは、WSSに対するクラスター間の分散(データセットの重心からすべてのクラスターの重心の分散)の割合である。

library(psych)
clust<-epi.bfi[,6:10]

 エルボー…4…かな?

クラスタ分析

# 距離の計算
uclust <-  dist(clust)^2   #ユークリッド距離の平方

result <- hclust(uclust, method="ward.D2") #Ward法

groups <- cutree(result, k=4) #クラスタ数を4つとする
groups <- factor(groups)

#クラスタに名前を付ける
levels(groups)[1]<-"Group1"
levels(groups)[2]<-"Group2"
levels(groups)[3]<-"Group3"
levels(groups)[4]<-"Group4"

table(groups)
## groups
## Group1 Group2 Group3 Group4 
##     71     67     35     58
clust$groups<-groups
per<-aggregate(.~groups, data=clust, FUN=mean)
per
##   groups  bfagree     bfcon     bfext    bfneur   bfopen
## 1 Group1 126.1408 116.29577 106.46479  62.95775 120.0986
## 2 Group2 115.0299  96.50746  99.85075  98.94030 123.6119
## 3 Group3 114.2000 106.20000  62.88571  88.60000 101.1714
## 4 Group4 141.6207 133.12069 123.32759 105.53448 140.7241
#図示
library(ggplot2)
library(reshape2)
meltd<-melt(per, id.vars="groups",variable.names="items",value.name="per")

ggplot(meltd,aes(x=groups, y=per, fill=variable))+
  geom_bar(stat="identity",position = "dodge", colour ="black",width=0.6)+
  xlab("Personality")+ylab("score")+
  scale_fill_grey(start =0.1, end=1.0)+
  scale_y_continuous(expand = c(0,0))+
  theme_classic()+
  guides(fill=guide_legend(title=NULL))+
  guides(fill=guide_legend(nrow=7))+
  theme(legend.position="right")+
  theme(legend.text=element_text(10))