Rを使った分析(クラスター分析)

■ 分析前にやっておくこと

(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) クラスターの平均点を使って変数ごとに分散分析すれば,クラスター分けが
うまくできているか確認することも可能。