相関の問題

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の試験成績のデータをそれぞれ変数abに代入します。

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

abの散布図を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の試験成績abの共分散を計算するために、それぞれの偏差を求めます。

# 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

求めたabの偏差の積の和をデータの個数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の試験成績abの共分散を計算するために、標準偏差を計算します。標準偏差の説明は過去の記事絶対平均偏差、分散、標準偏差を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

求めたabの共分散と標準偏差を用いて相関係数を計算します。

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から相関関係は、やや強い正の相関であるといえます。


  1. 数学チュートリアル やさしく語る 確率統計 西岡康夫(著)の2.3節 共分散にある、共分散の正負と相関関係の正負の関係の説明より。

  2. 数学チュートリアル やさしく語る 確率統計 西岡康夫(著)の2.4節 相関関係より。