データについて
概要
- 中学2年生の成績(各教科100点満点)
- 標本数:166
- 変数の数:科目数=9
- 国語,社会,数学,理科,音楽,英語,体育,技術家庭科,英語
- 使用データのダウンロード
- 成績のデータ(csv)
分析の方向性
- 分析目的
9科目の得点を適当に組み合わせた変数を作り,できるだけ少ない変数で生徒の特徴を捉えたい. - 基礎集計
異常値や外れ値を確認し,全体の特徴を把握する. - 主成分分析
次元縮約の手法として主成分分析を用いる. - 結果の解釈
主成分分析から得られた軸の解釈を行い,評価する
基礎集計
体育と他の科目との相関が低いように見て取れる.筆記科目と体育科目に分けることができそうである.
# 箱ひげ図の作成
par(family="Osaka")
boxplot(sample)
# データの読み込み
sample <- read.csv("seiseki.csv",header=T)
# パッケージの準備
install.packages("psych")
library("psych")
# プロットの作成
pairs.panels(sample)
主成分分析
① 主成分を求める
# 主成分分析
result <- prcomp(sample,scale=T)
# 固有ベクトル(主成分軸の係数)
result$rotation
-
関数
prcomp
の引数scale
引数scale=T
を指定することで相関行列から主成分分析を行う.引数scale=F
を指定することで分散共分散行列から主成分分析を行う. -
第1主成分
=0.363×国語+0.369×社会+0.357×数学+0.367×理科+0.354×音楽+0.313×美術+0.139×体育+0.317×技術家庭+0.357×英語 -
第2主成分
=-0.149×国語+0.147×社会+0.181×数学+0.251×理科-0.010×音楽-0.312×美術**-0.859×体育**+0.149×技術家庭+0.047×英語 -
格納変数の意味
$ | 意味 |
---|---|
x | 固有ベクトル |
rotation | 主成分得点 |
sdev | 固有値の平方根 |
- 各主成分の固有ベクトルの結果
|
---|
- 累積寄与率
第1主成分で67%,第2主成分で79%の情報を締めている.第3主成分以降の変化率が緩いので第2主成分まで選択する.
|
---|
③ 因子負荷量を求める
# 因子負荷量の算出
result.fl<- sweep(result$rotation,MARGIN=2,result$sdev,FUN="*")
subject <- c("国", "社", "数", "理", "音", "美", "体", "技", "英")
# 第1主成分に関する因子負荷量のプロット
plot(result.fl[,1], pch=subject, ylim=c(-1,1),
main="PC1", ylab="PC1", cex=3, cex.lab=1.5)
abline(h = 0)
# 第2主成分に関する因子負荷量のプロット
plot(result.fl[,2], pch=subject, ylim=c(-1,1),
main="PC1", ylab="PC2", cex=3, cex.lab=1.5)
abline(h = 0)
# 2次元でプロット
plot(result.fl[,1],result.fl[,2],pch=subject,
xlim=c(-1,1),ylim=c(-1,1),main=title,
xlab="PC1",ylab="PC2", cex=3, cex.lab=1.5)
abline(h = 0)
abline(v = 0)
- 因子負荷量
固有ベクトルresult$rotation
と,対応した固有値の平方根result$sdev
との積をとる.sweep関数の使い方
|
---|
④主成分得点
# 固有値ベクトル
PC12_eigen_vec<- 3*cbind(0,0,result.fl[,1],result.fl[,2])
# 主成分得点をプロット
plot(result$x[,1:2],ylim=c(-4,4))
# 矢印
for (i in 1:nrow(PC12_eigen_vec)) {
arrows(PC12_eigen_vec[i,1],PC12_eigen_vec[i,2],
PC12_eigen_vec[i,3],PC12_eigen_vec[i,4],
col="blue")
text(PC12_eigen_vec[i,3]+0.3, PC12_eigen_vec[i,4],
subject[i],col="blue", cex=1.2, cex.lab=1.5)
}
# 水平線
abline(h = 0)
abline(v = 0)
# 簡単に解釈しやす形でプロットできるがごちゃごちゃするので代わりにplotを使い描写
# biplot(result)
- 第1主成分の解釈
筆記試験の総合得点を表しており,右にあるデータであればあるほど筆記試験の総合得点が高い. - 第2主成分の解釈
体育の因子で,下にあるデータであればあるほど体育の成績がいい - 主成分得点のプロット