文書の過去の版を表示しています。
杉山髙一先生が統計科学研究所で公開してらっしゃる成績データを例に、相関分析に用いる、幾つかの部品(ヒストグラム、箱ひげ図、散布図、相関係数行列など)を用意する流れを用意しました。
# とある成績のデータを用いる。
# このデータには9科目の点数が収められている。
# 科目名は次の通りで、この順
# "kokugo" "shakai" "sugaku" "rika" "ongaku" "bijutu" "taiiku" "gika" "eigo"
# データの読み込み
csv.file = "https://statistics.co.jp/reference/statistical_data/seiseki.csv"
seiseki = read.csv(file(csv.file,
encoding='cp932'))
# require.with.install.packages:
# リストで与えられたライブラリがインストール済みかどうかをチェックし、
# 必要ならインストールした上で、利用可能にする関数。
# この関数は理解しなくても大丈夫。
require.with.install.packages = function(packages) {
require.2 = function(p) {
if( eval(parse(text = paste0("require(",p,")" ) ) ) ) {
cat(paste(p, "is loaded. \n"))
} else {
cat(paste("trying to install", p, "... \n"))
install.packages(p)
if( eval(parse(text = paste0("require(",p,")" ) ) ) ) {
cat(paste(p, "is loaded. \n"))
} else {
stop(paste(p, "could not be installed. \n"))
}
}
}
if(is.list(packages)) {
for( k in packages) {
require.2(k)
}
} else {
require.2(packages)
}
}
# この演習で用いるライブラリをインストールする
require.with.install.packages(c("qgraph", "psych"))
# 科目ごとに点数のヒストグラムを描く
par(mfrow=c(5,1))
for( k in c(1:length(names(seiseki)) ) ) {
hist(seiseki[,k], main="", xlab=names(seiseki)[k], xlim=c(0,100))
}
par(mfrow=c(1,1))
# 全科目の箱ひげ図を並べて描く
boxplot(seiseki)
# 全科目の散布図行列を描く
# 楕円などは描かない
pairs(seiseki, pch=20, cex=0.1)
# 共分散行列を推定する
cov(seiseki)
# 相関係数行列を推定する
# この行列は後に図示する
cor(seiseki)
## car.plot:
## 相関係数行列をヒートマップを用いて図示する関数
## 引数は相関係数行列と、描画オプション。
## psychパッケージに含まれている。
## グラフの描画領域を十分に多く確保しないと、
## 右側の-1から1の色を表す縦方向のバーを描くことに失敗する。
# 相関係数行列を図示する
cor.plot(cor(seiseki),numbers=T, cex=0.75)
## pair.panels:
## 多変量データをヒストグラムと散布図と相関係数行列の組み合わせで図示する関数
## 引数はデータそのものと、描画オプション。
## psychパッケージに含まれている。
# もう少しかっこいい、ヒストグラムと散布図と相関係数行列を組み合わせた図を描く
pairs.panels(seiseki, pch=20, cex=0.75)
## qgraph:
## グラフを描画する関数
## 引数はノード間のウェイトを格納した行列、またはエッジのリストとウェイト
## qgraphパッケージに含まれている。
# 相関係数行列をグラフとして描画する
qgraph(cor(seiseki),
edge.labels=T,
minimum=.2,
edge.color="black")
## cor.test:
## 相関係数の検定を行うプログラム
## 引数は2つの変数それぞれのデータをおさめた2つのリスト
## statパッケージに含まれていて、最初からロードされている
# 相関係数の検定をすべての科目のペアで実行して、
# P値を行列 seiseki.cor.test に格納する
seiseki.cor.test = matrix(0, nrow=9, ncol=9)
colnames(seiseki.cor.test) = names(seiseki)
rownames(seiseki.cor.test) = names(seiseki)
for( i in c(1:8) ) {
for( j in c((i + 1):9) ) {
seiseki.cor.test[i, j] = cor.test(seiseki[,i], seiseki[,j])$p.value
seiseki.cor.test[j, i] = seiseki.cor.test[i, j]
}
}
# 行列 seiseki.cor.test を、関数 cor.plot を用いて図示する
cor.plot(seiseki.cor.test,numbers=T, cex=0.75)