Rで相関分析
相関係数
相関係数とは
二つのデータの直線的な関係を強さを-1~1で表現してくれる統計量
相関係数自体は効果量の一種である(標準化されている)
cor(data)
dataは2列以上のデータ
3列以上ある場合には,相関行列を作ってくれる
欠損値がある場合のオプション
デフォルトだとすべてのデータを使用するため,欠損値があると計算ができないため,NA(not applicable/not available)という結果が返される
use = "complete.obs"
データセットからNAの行を予め除いてから計算する
NAがないペアにまで影響がでる
use = "pairwise.complete.obs"
あるペアの相関係数を計算するときに,その都度NAを除いて計算する
NAがないペアのときにはデータが減らない
obsはobservationの意味
相関係数の算出
library(openxlsx)
data <- read.xlsx("pone.0226832.s001.xlsx")
# 出力される数値の桁数を制御する
options(digits=3)
# round(result,3)のように丸めるのでもOK
# オプション指定なし
result <- cor(data)
result
# NAがある行を除く
result <- cor(data,use = "complete.obs")
result
# NAがあるときだけ除く
result <- cor(data,use = "pairwise.complete.obs")
result
# 結果がどう変わっているのかを確認してみよう
> result <- cor(data)
> result
Kusho Static Circle MMSE Age Education Vocabulary.score.(100.RAKAN)
Kusho 1.000 0.834 0.715 NA 0.134 0.177 NA
Static 0.834 1.000 0.805 NA 0.271 0.516 NA
Circle 0.715 0.805 1.000 NA 0.239 0.347 NA
MMSE NA NA NA 1 NA NA NA
Age 0.134 0.271 0.239 NA 1.000 0.107 NA
Education 0.177 0.516 0.347 NA 0.107 1.000 NA
Vocabulary.score.(100.RAKAN) NA NA NA NA NA NA 1
> result <- cor(data,use = "complete.obs")
> result
Kusho Static Circle MMSE Age Education Vocabulary.score.(100.RAKAN)
Kusho 1.000 0.867 0.816 0.4249 0.622 0.156 0.4811
Static 0.867 1.000 0.856 0.6372 0.761 0.534 0.5219
Circle 0.816 0.856 1.000 0.3114 0.678 0.388 0.6849
MMSE 0.425 0.637 0.311 1.0000 0.176 0.407 -0.0613
Age 0.622 0.761 0.678 0.1756 1.000 0.684 0.7991
Education 0.156 0.534 0.388 0.4066 0.684 1.000 0.5152
Vocabulary.score.(100.RAKAN) 0.481 0.522 0.685 -0.0613 0.799 0.515 1.0000
> result <- cor(data,use = "pairwise.complete.obs")
> result
Kusho Static Circle MMSE Age Education Vocabulary.score.(100.RAKAN)
Kusho 1.000 0.834 0.715 0.4362 0.1343 0.177 0.4811
Static 0.834 1.000 0.805 0.5237 0.2713 0.516 0.5219
Circle 0.715 0.805 1.000 0.2092 0.2390 0.347 0.6849
MMSE 0.436 0.524 0.209 1.0000 0.0341 0.281 -0.0613
Age 0.134 0.271 0.239 0.0341 1.0000 0.107 0.7991
Education 0.177 0.516 0.347 0.2810 0.1066 1.000 0.5152
Vocabulary.score.(100.RAKAN) 0.481 0.522 0.685 -0.0613 0.7991 0.515 1.0000
相関係数の検定
相関係数がゼロ(無相関)じゃないことを示すための検定
無相関検定と呼ばれることがある(帰無仮説は相関=0)
t値を用いる
cor.test(x,y)
x,yにそれぞれ一列のデータを指定
cor.testは3列以上のデータを一気に検定することはできない
仮説に関するオプション
alternative = "two.sided" / "less" / "greater"
手法に関するオプション
method = "pearson" / "kendall" / "spearman"
欠損値がある場合には,NAを除いた計算をおこなう
相関係数の無相関検定
result <- cor.test(data$Kusho,data$Static)
result
Pearson's product-moment correlation
data: data$Kusho and data$Static
t = 7, df = 24, p-value = 1e-07
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
0.659 0.923
sample estimates:
cor
0.834
p.valueが1e-07となっているが,これは1×0.0000001ということ
結果の値を得る
resultに保存された結果をひとつずつ取り出す
result$statistic: t値
result$parameter: 自由度
result$p.value: p値
result$estimate: 相関係数
result$null.value: 0 (帰無仮説)
result$conf.int: 相関係数の95%信頼区間
偏相関分析
偏相関分析とは
他の要因(データ)の影響を除いた相関係数を算出する手法
AとBのデータが相関している場合,Cという他のデータによって相関が媒介されている可能性がある(偽相関)
このとき,Cの要因を排除したAとBの相関を計算してくれるのが偏相関分析
足のサイズ(要因A)とバスケのパフォーマンス(要因B)が相関している
でも,足のサイズは身長(要因C)と相関する
「身長の要因を除いた」足のサイズ(要因A)とバスケのパフォーマンス(要因B)の相関⇒偏相関
ppcorパッケージ
install.packages("ppcor") :インストール(一回だけ)
library(ppcor)
pcor(data)で相関行列を作成
ppcorでないことに注意(pの数)
欠損値(NA)があると計算できないことに注意
あらかじめ抜いておくことで対処する
偏相関係数の算出
# とりあえず3つのデータのみを使用する
result <- pcor(data[,1:3])
result
# 普通のcorの結果との違いを確認しよう
> result
$`estimate`
Kusho Static Circle
Kusho 1.0000000 0.6229357 0.1311250
Static 0.6229357 1.0000000 0.5429849
Circle 0.1311250 0.5429849 1.0000000
$p.value
Kusho Static Circle
Kusho 0.0000000000 0.0008808909 0.532124476
Static 0.0008808909 0.0000000000 0.005035315
Circle 0.5321244758 0.0050353148 0.000000000
$statistic
Kusho Static Circle
Kusho 0.0000000 3.818992 0.6343303
Static 3.8189918 0.000000 3.1010273
Circle 0.6343303 3.101027 0.0000000
$n
[1] 26
$gp
[1] 1
$method
[1] "pearson"
結果の値を得る
result$estimate: 偏相関係数
result$parameter: 自由度
result$p.value: p値
result$statistic: t値
検定をひとつずつおこなう場合
pcor.test(x, y, z)
zの影響を除いたxとyの相関係数を算出し,検定をおこなう
pcor.test(data[,1], data[,2], data[,3])
便利なパッケージ
corrplotパッケージ
install.packages("corrplot") :インストール(一回だけ)
library(corrplot)
詳しいオプションはhelp(corrplot)を参照してください
# 列名長いので名前変える
names(data)[7] <-"Vocabulary"
# 相関行列を計算する
result <- cor(data, use = "pairwise.complete.obs")
# corrplotを使用してプロットする
# tl.colはテキストラベルの色。デフォルトだとなぜか赤字で気持ち悪い
corrplot(result, tl.col="black")
psychパッケージ
install.packages("psych") :インストール(一回だけ)
心理学関連の便利なものがたくさん入っている
help(psych)で関数一覧を出力
library(psych)
# numbers は相関係数の値,Fだと色分けだけ
cor.plot(result, numbers=T)
cor.plot(result, numbers=F)
xlas=2でXラベルを垂直にできる
# 散布図
pairs(result)
# 分布とかいろんな情報
pairs.panels(result)
> Error in plot.new() : figure margins too large
というエラーメッセージは,プロットするエリアの高さや幅が足りない時にでる
領域をドラッグして大きくしてあげると出ない
cor.test
pairs
pairs.panels