← 授業トップへ戻る


本日の目標

  1. 相関係数の意味を理解し,2変数の関係を解釈できる
  2. Rで相関係数を計算し(cor()),有意性検定を実行できる(cor.test())
  3. 散布図と相関係数を組み合わせてデータを説明できる
  4. 発展:相関係数 r の性質と,cor.test() の t統計量の式を,自分で導ける

準備:パッケージの読み込み

この回のコードは,すべて tidyverse を読み込んだ状態で動きます。 RStudioを起動したら,まずこれを実行してください。

library(tidyverse)

毎回必要です。読み込まないまま filter() や ggplot() を使うと, 「関数が見つかりません」というエラーになります。


1. 相関とは

2変数の関係を数値で表す

相関(correlation)とは,2つの変数の間にある直線的な関係の強さと方向を表す指標です。

相関の方向 意味 例
正の相関 一方が増えると他方も増える 身長と体重
負の相関 一方が増えると他方は減る 睡眠時間と疲労度
無相関 2変数に直線的関係がない 誕生月と学力

ピアソンの積率相関係数 r

\[r = \frac{\sum(x_i - \bar{x})(y_i - \bar{y})}{\sqrt{\sum(x_i - \bar{x})^2 \cdot \sum(y_i - \bar{y})^2}}\]

  • 値の範囲:-1 ≤ r ≤ 1
  • r = +1:完全な正の相関
  • r = -1:完全な負の相関
  • r = 0:相関なし
導出①:\(r\) は「共分散を,2つのばらつきで割ったもの」

上の式の分子と分母を,どちらも \(n-1\) で割ってみます。値は変わりません。

分子を \(n-1\) で割ったものが共分散です(R の cov() と同じ定義です)。

\[\mathrm{Cov}(x,y) = \frac{1}{n-1}\sum(x_i - \bar{x})(y_i - \bar{y})\]

分母を \(n-1\) で割ったものは,2つの標準偏差の積になります(R の sd() と同じ定義です)。

\[\frac{1}{n-1}\sqrt{\sum(x_i-\bar{x})^2 \cdot \sum(y_i-\bar{y})^2} = \sqrt{\frac{\sum(x_i-\bar{x})^2}{n-1}} \cdot \sqrt{\frac{\sum(y_i-\bar{y})^2}{n-1}} = s_x \, s_y\]

したがって

\[r = \frac{\mathrm{Cov}(x,y)}{s_x \, s_y}\]

共分散は「2つが一緒に動く量」ですが,単位が「cm×cm」のように掛け算になっていて大きさの比較ができません。そこでそれぞれのばらつきで割って単位を消したのが \(r\) です。

各データを標準化して \(z_x = (x_i - \bar{x})/s_x\),\(z_y = (y_i - \bar{y})/s_y\) と置くと(R の scale() がこの計算です),同じことが次のように書けます。

\[r = \frac{1}{n-1}\sum z_{x_i} z_{y_i}\]

\(r\) は標準化した値どうしの積を合計して \(n-1\) で割ったものである,ということです。

数値で確かめる:iris のがく片の長さと花びらの長さ(\(n = 150\))では,本文の定義式が \(0.8717538\),cor() が \(0.8717538\),cov(x, y) / (sd(x) * sd(y)) が \(0.8717538\),\(\frac{1}{n-1}\sum z_x z_y\) も \(0.8717538\) で,すべて一致します。

単位を変えても \(r\) は変わりません。 がく片を cm から mm に(\(\times 10\)),花びらを cm からインチに(\(\div 2.54\))換算しても \(r = 0.8717538\) のままです。分子も分母も同じ倍率で変わるので,割り算で消えるからです。

\(n\) で割る流儀もあります。 教科書によっては,共分散や標準偏差を \(n-1\) ではなく \(n\) で割って定義します。 \(r\) は共分散を標準偏差の積で割った比なので,どちらの流儀でも \(0.8717538\) と同じ値になります。

この資料は R に合わせて \(n-1\) で統一します。 sd()・cov()・scale() がすべてこの定義なので, 書かれている式をそのまま R で打って確かめられます。

使った数学:平均・分散・共分散の定義と,割り算で単位が消えること。

導出②:なぜ \(-1 \le r \le 1\) に収まるのか

標準化した値には,定義からすぐ出る性質が2つあります。

\[\sum z_x^2 = n-1, \qquad \sum z_y^2 = n-1, \qquad \sum z_x z_y = (n-1)\,r\]

(3つめは導出①の \(r = \frac{1}{n-1}\sum z_x z_y\) を移項しただけです。)

ここで二乗は決して負にならないという,ただそれだけの事実を使います。

\[\sum (z_x - z_y)^2 \ge 0\]

左辺を展開すると

\[\sum z_x^2 - 2\sum z_x z_y + \sum z_y^2 = (n-1) - 2(n-1)r + (n-1) = 2(n-1)(1 - r)\]

これが \(0\) 以上で,\(n \ge 2\) なら \(2(n-1) > 0\) ですから \(1 - r \ge 0\),つまり \(r \le 1\) が出ます。

同じことを足し算の側でやると

\[\sum (z_x + z_y)^2 = 2(n-1)(1 + r) \ge 0\]

から \(r \ge -1\) が出ます。あわせて \(-1 \le r \le 1\) です。

等号はいつ成り立つか。 \(\sum(z_x - z_y)^2 = 0\) になるのは,すべての個体で \(z_x = z_y\) のときだけです。これは「標準化したら完全に同じ値」,つまり \(y\) が \(x\) の1次式でぴったり書ける(すべての点が1本の右上がりの直線に乗る)場合です。\(r = -1\) は右下がりの直線です。

数値で確かめる:iris では \(n - 1 = 149\) で,\(\sum z_x^2 = 149\),\(\sum z_x z_y = 129.8913\)(\(= 149 \times 0.8717538\))です。 \(\sum(z_x - z_y)^2 = 38.2174\),理論値 \(2(n-1)(1-r) = 2 \times 149 \times (1 - 0.8717538) = 38.2174\) で一致します。 足し算の側も \(\sum(z_x + z_y)^2 = 557.7826\),\(2(n-1)(1+r) = 557.7826\) で一致します。 scale() で標準化すれば,そのまま手元で確かめられます。

使った数学:二乗は負にならない,という事実だけ。特別な定理は使っていません。

相関係数の目安(絶対値)

r
0.0〜0.2 ほとんど相関なし
0.2〜0.4 弱い相関
0.4〜0.6 中程度の相関
0.6〜0.8 強い相関
0.8〜1.0 非常に強い相関

目安であり,分野や文脈によって解釈が変わることに注意。


2. 散布図で関係を「見る」

# iris データ:がく片の長さと花びらの長さの散布図
ggplot(iris, aes(x = Sepal.Length, y = Petal.Length)) +
  geom_point(color = "steelblue", alpha = 0.6) +
  labs(title = "散布図:がく片の長さと花びらの長さ",
       x = "がく片の長さ (cm)", y = "花びらの長さ (cm)") +
  theme_bw()

# 種ごとに色を分ける
ggplot(iris, aes(x = Sepal.Length, y = Petal.Length, color = Species)) +
  geom_point(alpha = 0.6) +
  geom_smooth(method = "lm", se = FALSE) +
  scale_color_brewer(palette = "Dark2") +
  labs(title = "種ごとの散布図と回帰直線",
       x = "がく片の長さ (cm)", y = "花びらの長さ (cm)") +
  theme_bw()


3. Rで相関係数を計算する

cor():相関係数の計算

# 2変数の相関係数
cor(iris$Sepal.Length, iris$Petal.Length)
## [1] 0.8717538
# 複数変数の相関行列
iris |>
  select(Sepal.Length, Sepal.Width, Petal.Length, Petal.Width) |>
  cor()
##              Sepal.Length Sepal.Width Petal.Length Petal.Width
## Sepal.Length    1.0000000  -0.1175698    0.8717538   0.8179411
## Sepal.Width    -0.1175698   1.0000000   -0.4284401  -0.3661259
## Petal.Length    0.8717538  -0.4284401    1.0000000   0.9628654
## Petal.Width     0.8179411  -0.3661259    0.9628654   1.0000000
# 四捨五入して見やすく
iris |>
  select(Sepal.Length, Sepal.Width, Petal.Length, Petal.Width) |>
  cor() |>
  round(2)
##              Sepal.Length Sepal.Width Petal.Length Petal.Width
## Sepal.Length         1.00       -0.12         0.87        0.82
## Sepal.Width         -0.12        1.00        -0.43       -0.37
## Petal.Length         0.87       -0.43         1.00        0.96
## Petal.Width          0.82       -0.37         0.96        1.00

4. cor.test():相関の有意性検定

相関係数が「偶然ではなく本当に存在する」かどうかを検定します。

仮説の設定

  • 帰無仮説 H₀:母相関係数 ρ = 0(相関はない)
  • 対立仮説 H₁:母相関係数 ρ ≠ 0(相関がある)
# 相関の有意性検定
cor.test(iris$Sepal.Length, iris$Petal.Length)
## 
##  Pearson's product-moment correlation
## 
## data:  iris$Sepal.Length and iris$Petal.Length
## t = 21.646, df = 148, p-value < 2.2e-16
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
##  0.8270363 0.9055080
## sample estimates:
##       cor 
## 0.8717538

結果の読み方

Pearson's product-moment correlation

t = 21.646, df = 148, p-value < 2.2e-16
95 percent confidence interval:
 0.8270363 0.9055080
sample estimates:
      cor
0.8717538
項目 意味
t t統計量
df 自由度(n - 2)
p-value p値(< 0.05 なら有意)
95% CI 相関係数の95%信頼区間
cor 標本相関係数 r の推定値
導出③:cor.test() の \(t\) 値はどこから来るのか ―― 「強い」と「有意」は別

cor.test() は \(r\) から次の統計量を作り,自由度 \(n - 2\) の \(t\) 分布と照らして \(p\) 値を出しています。

\[t = \frac{r\sqrt{n-2}}{\sqrt{1-r^2}}\]

自由度が \(n-2\) なのは,直線を当てるのに切片と傾きの2つを標本から決めているためです。

数値で確かめる:iris では \(r = 0.8717538\),\(n = 150\) なので

\[t = \frac{0.8717538 \times \sqrt{148}}{\sqrt{1 - 0.8717538^2}} = 21.6460\]

上の出力の t = 21.646, df = 148 と一致します。

この式の右辺で,\(n\) は \(r\) とは別のところに入っています。 \(r\) を固定したまま \(n\) だけ動かすと,\(t\) は \(\sqrt{n}\) におよそ比例して大きくなり,\(p\) は小さくなります。

\(r\) \(n\) \(t\) \(p\)
0.8718 4 2.52 0.128
0.8718 5 3.08 0.054
0.8718 10 5.03 0.0010
0.8718 150 21.65 \(1.0 \times 10^{-47}\)

\(r = 0.87\) という非常に強い相関でも,\(n = 4\) なら有意になりません。

逆の方向も見てみます。iris のがく片の長さと幅は \(r = -0.1176\)(ほとんど相関なし)で,\(n = 150\) では \(t = -1.44\),\(p = 0.152\) となり有意ではありません。しかし \(r\) が同じまま \(n\) が増えると,

\(r\) \(n\) \(p\)
−0.1176 150 0.152
−0.1176 279 0.050
−0.1176 1000 0.00019
−0.1176 2000 \(1.3 \times 10^{-7}\)

\(n = 279\) を超えると有意になります。関係の強さは何も変わっていないのに,です。

「相関が強い」と「相関が有意」は,別のことを言っています。 \(r\) は関係の強さそのもの(\(n\) を増やしても動かない),\(p\) はその関係が偶然で説明しにくいかどうか(\(n\) を増やせば小さくなる)。だから報告では \(r\) と \(p\) を必ず両方書きます。本文5節の書き方 r(148) = .87, p < .001 は,まさにその2つを並べたものです。

なお,\(t\) 分布の密度関数そのものを導くのは,この科目の範囲外です。ここでは「\(r\) と \(n\) から \(t\) が決まる」という関係だけを押さえてください。

有意であっても,強くても,因果があるという意味にはなりません。 これは標本の揺れの話だけをしていて,なぜ2つが一緒に動くのかには何も答えていないからです。第6節を必ず併せて読んでください。

使った数学:平方根と分数の変形。自由度の数え方(第10回・第13回でも同じ考え方を使います)。


5. 結果の報告

論文・レポートでの記述例:

がく片の長さと花びらの長さの間には強い正の相関が見られた,r(148) = .87,p < .001。

APA形式での相関係数の書き方: - イタリック体で r - 括弧内に自由度(= n - 2) - p 値は .001, .01, .05 の水準で報告


6. 注意:相関と因果

相関関係は因果関係を意味しない!

相関があっても,それは「一緒に変化する」ことを示すだけで, 「原因と結果」の関係があるとは限りません。

  • アイスクリームの売り上げと溺死事故件数の相関 → 第3の変数(気温)
  • 「見かけ上の相関」(spurious correlation)に注意

演習

演習1:散布図の作成

mtcars データを使って,馬力(hp)と燃費(mpg)の散布図を作成してください。 - 回帰直線(geom_smooth(method = "lm"))を追加する - 適切なタイトル・軸ラベルをつける

ggplot(mtcars, aes(x = ___, y = ___)) +
  geom_point(color = "___") +
  geom_smooth(method = "lm", se = TRUE) +
  labs(title = "___", x = "___", y = "___") +
  theme_bw()

演習2:相関係数の計算と検定

  1. mtcars の hp と mpg の相関係数を計算してください
  2. cor.test() で有意性を検定し,結果を解釈してください
# 相関係数
cor(mtcars$___, mtcars$___)

# 有意性検定
cor.test(mtcars$___, mtcars$___)

演習3:相関行列

mtcars の mpg, hp, wt, qsec(0から1/4マイルまでの加速時間・秒)の相関行列を作成し, どの変数の組み合わせが最も強い相関を持つか調べてください。

演習4:結果の記述

演習2の結果を,論文・レポートの記述として1〜2文でまとめてください。 (例:「〇〇と〇〇の間には,〇〇な相関が見られた,r(〇〇) = .〇〇, p < .〇〇。」)

このデータの \(r\) は負の値になります。符号を落とさないでください。 「馬力が大きいほど燃費が悪い」という向きを,日本語でも書き添えます。


本日のまとめ

  • 相関係数 r は -1〜+1 の範囲で2変数の直線的関係を表す
  • cor() で相関係数,cor.test() で有意性検定
  • 散布図と組み合わせてデータを理解する
  • 相関関係 ≠ 因果関係

宿題・予習

  • 演習2・3の結果をスクリプトに保存
  • 次回はカテゴリデータの分析(カイ二乗検定)を学びます
  • 教科書のカイ二乗検定に関する章を読んでおく

← 授業トップへ戻る