■ 分析前にやっておくこと
(1) Rのインストール
(2) 作業ディレクトリの確認と変更をしておく
(3) 作業ディレクトリにデータを入れておく
(4) 必要なパッケージをインストールしておく
データの読み込み
書籍使用データ(右クリックで「別名で保存」して作業ディレクトリに入れる)
dat <- read.csv("ch13cluster.csv", header=TRUE, fileEncoding="CP932") # fileEncoding="CP932"はMacの場合入れる dat <- dat[,-1] # IDの入っている一列目以外を指定
もしくは,Excel を開いてデータ範囲をコピーしてから読み込む
(クリップボードからのデータ読み込み)
Macの場合
dat <- read.table(pipe("pbpaste"), header=TRUE) # header=TRUEで変数名を含む,FALSEにすると含まない
Windowsの場合
dat <- read.table("clipboard", header=TRUE) # header=TRUEで変数名を含む,FALSEにすると含まない
記述統計
library(psych) # psychパッケージ使用 describe(dat)
その他はこちらを参照
変数間の相関係数の確認
cor(dat) round(cor(dat),3) # 小数点以下3桁で繰り上げ
# psychパッケージを使って散布図作成(相関係数,ヒストグラム,回帰直線) library(psych) par(family="HiraKakuPro-W3") #Macで日本語表示する pairs.panels(dat)
クラスター分析の実行
# 今回のデータは変数によって最大・最小が違うため標準得点を使用 z <- scale(dat) # 得点を標準化 z <- data.frame(z) # データフレーム形式に戻す # 距離の計算 z.d <- dist(z)^2 # ユークリッド距離の平方(2乗) # クラスター分析(Ward法と平方ユークリッド距離使用) result <- hclust(z.d, method="ward") # デンドログラム作図 plot(result)
上記のデンドログラムを見て,いくつのクラスターに
分けるか決定する。ここでは3つにした。
cluster <- cutree(result, k=3) # K=でいくつのクラスターに分けるか指定 cluster <- factor(cluster) # 因子の型に変更 table(cluster) # それぞれのクラスターの人数確認
クラスターごとの分析
標準得点のデータフレームと元(raw data)のデータフレームに
クラスター分けの結果を加える。
x <- cbind(z, cluster) # 標準得点のデータフレーム y <- cbind(dat, cluster) # 素点のデータフレーム
クラスターごとの平均の確認
describeBy(x[,1:6], group = x$cluster) # 標準得点 describeBy(y[,1:6], group = y$cluster) # 素点
クラスターの平均点を使って変数ごとに分散分析すれば,クラスター分けが
うまくできているか確認することも可能。
グラフ化でクラスターごとの特徴を探る
変数ごとにクラスターの平均を箱ひげ図で表示する場合(素点を使用)
attach(y) # dat$TOEICとわざわざ書かなくていいようにattach par(mfrow=c(2,3)) # 縦に2つ,横に3つのグラフを並べる boxplot(TOEIC~cluster, main="TOEIC", xlab="Cluster") boxplot(Oral_Rehearsal~cluster, main="Oral Rehearsal", xlab="Cluster") boxplot(Association ~cluster, main="Association", xlab="Cluster") boxplot(Extrinsic_Motivation~cluster, main="Extrinsic Motivation", xlab="Cluster") boxplot(Intrinsic_Motivation~cluster, main="Intrinsic_Motivation", xlab="Cluster") boxplot(Time~cluster, main="Time", xlab="Cluster")
書籍のように標準得点で折れ線グラフにする場合
(上述の標準得点を使って Excel で作った方が早いかもしれませんが・・・)
# 標準得点の平均をリストから抽出 means <- aggregate(x[, 1:ncol(x)-1], by=list(x$cluster), FUN=mean) means <- means[,-1] Cluster1 <- as.numeric(means[1,]) Cluster2 <- as.numeric(means[2,]) Cluster3 <- as.numeric(means[3,]) # 外枠範囲と軸名指定 par(family="HiraKakuPro-W3") #Macで日本語表記するため par(xaxt="n") #横軸に座標を書かない指定 plot(c(0,0),xlim=c(1,6),ylim=c(-1.5, 1.5),type="n",xlab="変数",ylab="z 得点") # 横軸に変数名を入れる par(xaxt="s") #横軸に座標を再度書く指定 axis(1, c(1,2,3,4,5,6), c("TOEIC","音声","関連づけ","外発的動機","内発的動機","学習時間")) # 凡例の追加 legend("topright", legend = c("Cluster 1","Cluster 2", "Cluster 3"), lty = c(1,2,3), pch = c(1,2,3), col=c(1,2,3)) # y軸の0で横線を引いて,実線(lty=1)を0.2の太さで引く abline(h=0, lwd=0.2, lty=1) # クラスターごとにプロットの点や線の指定(点や線,色は凡例に合わせている) points(Cluster1, pch=1, col=1);lines(Cluster1, col=1, lty=1) points(Cluster2, pch=2, col=2);lines(Cluster2, col=2, lty=2) points(Cluster3, pch=3, col=3);lines(Cluster3, col=3, lty=3)
■ Rcommanderを使う場合
library(Rcmdr) # Rcommanderパッケージの読み込み
コンソールでデータの読み込みができている場合は,
<アクティブデータセットなし>をクリックし,datを選択。
参照 Rコマンダーでデータを読み込む場合
記述統計と相関係数
(1) 記述統計は,[統計量]→[要約]→[数値による要約]を選ぶ。
(2) 相関係数は,[統計量]→[要約]→[相関行列]で変数を選択する。
(3) 散布図は,[グラフ]→[散布図行列]で変数を選択する。
「対角位置に」で「ヒストグラム」を選択しておけば,
ヒストグラムを表示する事が可能。
クラスター分析の実行
(1) [データ]→[アクティブデータセット内の変数の管理]→[変数の標準化]
から,すべての変数を選択し,OKをクリック。
(2) [統計量]→[次元解析]→[クラスタ分析]→[階層的クラスタ分析]を選び,
Z.TOEICなどのZ.のついた変数をすべて選択する。
「クラスタリングの方法」はウォード法,「距離の測度」は
ユークリッド距離の平方,そしてデンドログラムを描く にチェックを
入れて,OKをクリック。 デンドログラムを確認して,いくつの
クラスターに分けるのか考える。
クラスターに分ける
(1) [統計量]→[次元解析]→[クラスタ分析]→[階層的クラスタリングの結果を
データセットに保存]を選択。
(2) 「クラスタリング解の1つを選択」で上記までで行った分析結果を
選択し,クラスタ数を指定。
(3) クラスターごとの人数や平均は,[統計量]→[次元解析]→[クラスタ分析]
→[階層的クラスタリングの要約]で確認する事が可能。
(4) クラスターごとの特徴は,[グラフ]→[平均のプロット]や,[箱ひげ図]を
描く事によって確認する。
(5) クラスターの平均点を使って変数ごとに分散分析すれば,クラスター分けが
うまくできているか確認することも可能。