2つの変量の間の関係を表す相関(correlation)について勉強します。“数学チュートリアル やさしく語る 確率統計 西岡康夫(著)”の2.4節 相関係数の例題をRで解きます。
例題
次のデータは10人の学生の科目Aと科目Bの試験成績(10点満点)である。
科目Aの成績(学生番号順)
7 8 4 9 6 5 8 7 8 8
科目Bの成績(学生番号順)
8 10 5 8 10 7 9 9 8 6
科目Aと科目Bの間にどのような相関関係があると考えられるか相関係数rを求めて述べよ。
ある2つの変量\(x\)と\(y\)が対等な関係(一方が他方を決定しない関係)であるとき、両者の間の関係を定量的に表す手法が相関です。相関係数(correlation coefficient)は相関の強弱を表す数値です。
問いの相関係数を求める前に、データを散布図でプロットして相関関係を目で見ます。
科目AとBの試験成績のデータをそれぞれ変数a
とb
に代入します。
a <- c(7, 8, 4, 9, 6, 5, 8, 7, 8, 8)
a
## [1] 7 8 4 9 6 5 8 7 8 8
b <- c(8, 10, 5, 8, 10, 7, 9, 9, 8, 6)
b
## [1] 8 10 5 8 10 7 9 9 8 6
a
とb
の散布図をggplotでプロットします。
# Install ggplot2
if (!require("ggplot2")) {
install.packages("ggplot2", repos="https://cloud.r-project.org/")
library(ggplot2)
}
## Loading required package: ggplot2
# Make data frame for ggplot
df <- data.frame(a, b)
df
## a b
## 1 7 8
## 2 8 10
## 3 4 5
## 4 9 8
## 5 6 10
## 6 5 7
## 7 8 9
## 8 7 9
## 9 8 8
## 10 8 6
# Add plot layers
g <- ggplot(df, aes(x = a, y = b))
g <- g + geom_point() # set scatter diagram
g <- g + xlab("Subject A") # x label
g <- g + ylab("Subject B") # y label
g <- g + ggtitle("Scatter plot by ggplot2") # title
# Plot
plot(g)
科目Aのデータa
が増加すると、科目Bのデータb
も少し増加する傾向(正の弱い相関関係)があるような気もしますが、プロットが10点しかないのでよくわかりません。
共分散(covariance)は相関の正負を示す値です。2つの変量\(x\)と\(y\)の共分散\(s_{xy}\)は、\(x\)と\(y\)それぞれの偏差の積の平均値(相加平均)です。次の式で定義されます。
\[ s_{xy} = \frac{\sum_{k=1}^n (x_k - \bar{x})(y_k - \bar{y})}{n} \]
\(n\)はデータの個数、\(\bar{x}\)と\(\bar{y}\)はそれぞれ\(x\)と\(y\)の平均です。
科目AとBの試験成績a
とb
の共分散を計算するために、それぞれの偏差を求めます。
# The deviation of A
dev_a <- a - mean(a)
dev_a
## [1] 0 1 -3 2 -1 -2 1 0 1 1
# The deviation of B
dev_b <- b - mean(b)
dev_b
## [1] 0 2 -3 0 2 -1 1 1 0 -2
求めたa
とb
の偏差の積の和をデータの個数10で割って共分散を計算します。
# The product of deviation a and b
dev_a * dev_b
## [1] 0 2 9 0 -2 2 1 0 0 -2
# The covariance of a and b
s_ab <- sum(dev_a * dev_b) / length(a)
s_ab
## [1] 1
共分散s_ab
= 1 > 0なので、正の相関関係があるといえます1。(共分散が負なら負の相関関係です)
2つの変量\(x\)と\(y\)の相関の強弱を表す相関係数\(r\)は、共分散\(s_{xy}\)を\(x\)の標準偏差\(s_x\)と\(y\)の標準偏差\(s_y\)の積で割った値です。
\[ r = \frac{s_{xy}}{s_x s_y} \]
科目AとBの試験成績a
とb
の共分散を計算するために、標準偏差を計算します。標準偏差の説明は過去の記事絶対平均偏差、分散、標準偏差をRで計算するにあります。
# The standard deviation of a
s_a <- sqrt(sum(dev_a^2) / length(a))
s_a
## [1] 1.48324
# The standard deviation of b
s_b <- sqrt(sum(dev_b^2) / length(b))
s_b
## [1] 1.549193
求めたa
とb
の共分散と標準偏差を用いて相関係数を計算します。
r_ab <- s_ab / (s_a * s_b)
r_ab
## [1] 0.4351941
相関係数と相関関係の強弱の目安を次の表に示します2。
共分散\(s_{xy}\) | 相関係数\(r\) | 相関関係 |
---|---|---|
\( s_{xy} \gt 0 \) | \( 0.7 \leq r \leq 1 \) | 強い正の相関 |
\( s_{xy} \gt 0 \) | \( 0.4 \leq r \lt 0.7 \) | やや強い正の相関 |
\( s_{xy} \gt 0 \) | \( 0.2 \leq r \lt 0.4 \) | 弱い正の相関 |
\( s_{xy} \approx 0 \) | \( -0.2 \lt r \lt 0.2 \) | ほとんど相関がない |
\( s_{xy} \lt 0 \) | \( -0.4 \lt r \leq -0.2 \) | 弱い負の相関 |
\( s_{xy} \lt 0 \) | \( -0.7 \lt r \leq -0.4 \) | やや強い負の相関 |
\( s_{xy} \lt 0 \) | \( -0.7 \leq r \leq -1 \) | 強い負の相関 |
この表を目安にすると、求めた相関係数r_ab
= 0.44から相関関係は、やや強い正の相関であるといえます。
数学チュートリアル やさしく語る 確率統計 西岡康夫(著)の2.3節 共分散にある、共分散の正負と相関関係の正負の関係の説明より。↩
数学チュートリアル やさしく語る 確率統計 西岡康夫(著)の2.4節 相関関係より。↩