分散分析と回帰分析
このページの趣旨 「分散分析と回帰分析は結果として同じことをやっている」ということを理解する。
[推定と検定]のページにある[1元配置分散分析]であげられている例を考えてみよう。
これは最も単純な例で,観測地という1つの要因があり,その要因にはA地点,B地点,C地点という3つの水準が含まれている。まずはこれを通常通り「3群の平均値の差の検定」として分散分析してみよう。
A地点(cm) | B地点(cm) | C地点(cm) | |
No.1 | 23.5 | 16.5 | 28.8 |
No.2 | 20.9 | 17.0 | 26.5 |
No.3 | 19.2 | 15.9 | 30.1 |
No.4 | 21.0 | 18.2 | 29.5 |
No.5 | 23.8 | 20.1 | 26.9 |
No.6 | 20.4 | 16.4 | 27.0 |
> x <- c( + 23.5, 20.9, 19.2, 21.0, 23.8, 20.4, + 16.5, 17.0, 15.9, 18.2, 20.1, 16.4, + 28.8, 26.5, 30.1, 29.5, 26.9, 27.0) > g <- rep(1:3, c(6, 6, 6)) > myData <- data.frame(x = x, g = as.factor(g)) > summary(aov(x~g, myData)) Df Sum Sq Mean Sq F value Pr(>F) g 2 355.34 177.67 66.326 3.560e-08 *** Residuals 15 40.18 2.68 --- Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
結果を見て分かるように,観測地によってマスの体長が異なっているようである。ただし,これはA地点とB地点とを比べてどちらが大きいかということには着目していない。そのような場合は多重比較を行う必要があるが,ここでは触れない。
続いてこれを「ダミー変数を用いた回帰分析」によって分析を試みてみよう。下の表はTable 1のデータをダミー変数に置き換えたもので,x11は「A地点で観測された1匹目(No.1)のマス」であることを示している。x21は「A地点-2匹目」,x31は「A地点-3匹目」といったようになっている。
A地点 | B地点 | C地点 | マスの体長 | |
x11 | 1 | 0 | 0 | 23.5 |
x21 | 1 | 0 | 0 | 20.9 |
x31 | 1 | 0 | 0 | 19.2 |
x41 | 1 | 0 | 0 | 21.0 |
x51 | 1 | 0 | 0 | 23.8 |
x61 | 1 | 0 | 0 | 20.4 |
x12 | 0 | 1 | 0 | 16.5 |
x22 | 0 | 1 | 0 | 17.0 |
x32 | 0 | 1 | 0 | 15.9 |
x42 | 0 | 1 | 0 | 18.2 |
x52 | 0 | 1 | 0 | 20.1 |
x62 | 0 | 1 | 0 | 16.4 |
x13 | 0 | 0 | 1 | 28.8 |
x23 | 0 | 0 | 1 | 26.5 |
x33 | 0 | 0 | 1 | 30.1 |
x43 | 0 | 0 | 1 | 29.5 |
x53 | 0 | 0 | 1 | 26.9 |
x63 | 0 | 0 | 1 | 27.0 |
この表において,観測地点を独立変数,マスの体長を従属変数として回帰分析を行ってみる。なお,実際に分析するときは独立変数を1つだけ削除して行う必要がある。今回はA地点のデータ列を削除した。
> dat [,1] [,2] [,3] [1,] 0 0 23.5 [2,] 0 0 20.9 [3,] 0 0 19.2 [4,] 0 0 21.0 [5,] 0 0 23.8 [6,] 0 0 20.4 [7,] 1 0 16.5 [8,] 1 0 17.0 [9,] 1 0 15.9 [10,] 1 0 18.2 [11,] 1 0 20.1 [12,] 1 0 16.4 [13,] 0 1 28.8 [14,] 0 1 26.5 [15,] 0 1 30.1 [16,] 0 1 29.5 [17,] 0 1 26.9 [18,] 0 1 27.0 > result <- lm(dat[,3] ~ dat[,1] + dat[,2]) > summary(result) Call: lm(formula = dat[, 3] ~ dat[, 1] + dat[, 2]) Residuals: Min 1Q Median 3Q Max -2.2667 -1.1167 -0.5167 1.2375 2.7500 Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 21.4667 0.6682 32.127 3.02e-15 *** dat[, 1] -4.1167 0.9449 -4.357 0.000564 *** dat[, 2] 6.6667 0.9449 7.055 3.91e-06 *** --- Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 Residual standard error: 1.637 on 15 degrees of freedom Multiple R-Squared: 0.8984, Adjusted R-squared: 0.8849 F-statistic: 66.33 on 2 and 15 DF, p-value: 3.560e-08
結果を分かりやすくまとめると次のようになる。A地点の係数は0になっているが,要するにこれは「A地点のマスの体長を基準(=0)としている」ということである。つまりB地点のマスの体長はA地点よりも-4.12小さいということであり,C地点では6.67大きいということである。
(マスの体長) = 21.47 + 0 * (A地点) - 4.12 * (B地点) + 6.67 * (C地点)
なおこの回帰方程式についての分散分析表を作成すると次のとおりになる。これは最初にやった分散分析の場合と一致している。ただし2元配置の場合はこうにならないことを了承しておいて欲しい。
$anova 平方和 自由度 平均平方 F 値 P 値 回帰 355.34333 2 177.671667 66.32565 3.559632e-08 残差 40.18167 15 2.678778 NA NA 全体 395.52500 17 23.266176 NA NA
それから最後にもう1つ面白いことを紹介しておこう。上の回帰方程式の定数項である21.47と各地点の係数を足してみて欲しい。すると,これは各観測地点のマスの体長の平均値と一致するのだ。
定数項 + 係数 | 平均値 | |
A地点 | 21.4667 + 0 = 21.47 | 21.47 |
B地点 | 21.4667 - 4.1167 = 17.35 | 17.35 |
C地点 | 21.4667 + 6.6667 = 28.13 | 28.13 |
数学的にいえば分散分析も回帰分析も同じ線形モデルであるので結果が同じであることは当たり前なのです。まぁ,この辺りの詳しい理屈までは理解しなくても良いでしょう。