分散分析と回帰分析とt検定は同じものである。
これがわかれば、重回帰分析(共分散分析)が交絡因子調整した群間比較に使われる理由がわかるだろう。
t検定は回帰分析でもできるし、分散分析は二群でもできる
ここで、t検定は、いわゆる t 検定のことであり、独立した二群の平均値の差の検定のことを言っている。
t検定は回帰分析でもできる。
分散分析でもできる。
Rの関数を使って計算してみる。
使うデータはsleepというデータで、extraという変数をgroup間で比較する。
t検定の結果
t.test()を使って計算する。
等分散性を仮定した方法にする(var=T)。
t.test(extra~group, var=T, data=sleep)
結果は以下の通り。
Group1の平均が0.75、Group2の平均が2.33で、かなり離れてはいそうだが、サンプルサイズが小さいからか、分散が大きいためか統計学的有意ではない(p=0.07919)。
> t.test(extra~group, var=T, data=sleep)
Two Sample t-test
data: extra by group
t = -1.8608, df = 18, p-value = 0.07919
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
-3.363874 0.203874
sample estimates:
mean in group 1 mean in group 2
0.75 2.33
回帰分析の結果
lm()を使って回帰分析を行う。
lm()のなかの「~」を挟んで、左が連続量(目的変数、従属変数、Y)、右がグループ変数(説明変数、独立変数、X)だ。
カテゴリ変数を説明変数にした回帰分析ということである。
lm.res1 <- lm(extra~group, data=sleep)
summary(lm.res1)
結果は以下の通り。
t検定の結果に相当するのが、Coefficients:のgroup2行右端の「0.0792 .」
p=0.07919の最後の桁を四捨五入すれば、同じ値だ。
数字の最後の「.」は0.05以上、0.1未満を意味している。
そして実は分散分析の結果も出ている。
最下段のF-statistic:の行右端「p-value: 0.07919」である。
> lm.res1 <- lm(extra~group, data=sleep)
> summary(lm.res1)
Call:
lm(formula = extra ~ group, data = sleep)
Residuals:
Min 1Q Median 3Q Max
-2.430 -1.305 -0.580 1.455 3.170
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 0.7500 0.6004 1.249 0.2276
group2 1.5800 0.8491 1.861 0.0792 .
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 1.899 on 18 degrees of freedom
Multiple R-squared: 0.1613, Adjusted R-squared: 0.1147
F-statistic: 3.463 on 1 and 18 DF, p-value: 0.07919
分散分析の結果
分散分析を使う方法はいくつかある。
- aov()を使う方法
- lm()の結果を使う方法 ― anova()を使う
- lm()の結果を使う方法 その2 ― car パッケージのAnova()を使う
# 1.
aov1 <- aov(extra ~ group, data=sleep)
summary(aov1)
# 2.
anova(lm.res1)
# 3.
library(car)
Anova(lm.res1)
aov()を使った # 1. は、group行の右端「0.0792 .」が答え。
anova()を使った # 2. は Response: extraのgroup行の右端「0.07919 .」が求めた値。
Anova()を使った # 3. もResponse: extraのgroup行右端「0.07919 .」が必要な値だ。
共分散分析のときはAnova()を使うほうがよい。
一元配置分散分析の時はanova()と同じ結果になるのでどちらを使ってもOK。
# 1.
> aov1 <- aov(extra ~ group, data=sleep)
> summary(aov1)
Df Sum Sq Mean Sq F value Pr(>F)
group 1 12.48 12.482 3.463 0.0792 .
Residuals 18 64.89 3.605
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
# 2.
> anova(lm.res1)
Analysis of Variance Table
Response: extra
Df Sum Sq Mean Sq F value Pr(>F)
group 1 12.482 12.4820 3.4626 0.07919 .
Residuals 18 64.886 3.6048
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
# 3.
> library(car)
Loading required package: carData
> Anova(lm.res1)
Anova Table (Type II tests)
Response: extra
Sum Sq Df F value Pr(>F)
group 12.482 1 3.4626 0.07919 .
Residuals 64.886 18
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
小まとめ
t検定も回帰分析も分散分析も同じ「p=0.07919」であった。
つまり、t検定も回帰分析も分散分析も、要は「同じ」。
「t検定」と「回帰分析、分散分析」の違いは、拡張性だ。
回帰分析や分散分析は説明変数を増やして、重回帰分析や共分散分析(ANCOVA, Analysis of covariance)に拡張できる点が優れている。
分散分析と回帰分析とt検定が同じことを示す別の例
MASS パッケージの birthwt データセットの smoke(母親の喫煙)と bwt (児の出生体重)を使って検定してみる。
t検定の結果
library(MASS)で、MASS パッケージを呼び出す。
t.test()を使う。等分散を仮定する(var=T)。
library(MASS)
t.test(bwt~smoke, var=T, data=birthwt)
結果は以下の通り、smoke=1(喫煙)グループのほうが平均値が300グラム程度低く、統計学的有意に異なっていた(p = 0.008667)。
> library(MASS)
> t.test(bwt~smoke, var=T, data=birthwt)
Two Sample t-test
data: bwt by smoke
t = 2.6529, df = 187, p-value = 0.008667
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
72.75612 494.79735
sample estimates:
mean in group 0 mean in group 1
3055.696 2771.919
回帰分析の結果
lm()を使う。
bwt を「~」の左に、smoke を「~」の右に配置する。
summary(lm.res2 <- lm(bwt~smoke, data=birthwt))
smoke 行の右端のp値が「0.00867 ** 」であることがわかる。「**」はここでは0.01未満で、0.001以上であることを示している。
> summary(lm.res2 <- lm(bwt~smoke, data=birthwt))
Call:
lm(formula = bwt ~ smoke, data = birthwt)
Residuals:
Min 1Q Median 3Q Max
-2062.9 -475.9 34.3 545.1 1934.3
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 3055.70 66.93 45.653 < 2e-16 ***
smoke -283.78 106.97 -2.653 0.00867 **
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 717.8 on 187 degrees of freedom
Multiple R-squared: 0.03627, Adjusted R-squared: 0.03112
F-statistic: 7.038 on 1 and 187 DF, p-value: 0.008667
分散分析の結果
分散分析はanova()とAnova()の二つで計算してみる。一元配置分散分析なので結果は同じになる。
anova(lm.res2)
library(car)
Anova(lm.res2)
結果は「0.008667 **」で、二つとも同じであった。
> anova(lm.res2)
Analysis of Variance Table
Response: bwt
Df Sum Sq Mean Sq F value Pr(>F)
smoke 1 3625946 3625946 7.0378 0.008667 **
Residuals 187 96343710 515207
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
> library(car)
> Anova(lm.res2)
Anova Table (Type II tests)
Response: bwt
Sum Sq Df F value Pr(>F)
smoke 3625946 1 7.0378 0.008667 **
Residuals 96343710 187
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
こちらの例も、t検定、回帰分析、分散分析すべて同じ結果になった。
まとめ
Rの組み込みデータセット2つを使って、t検定、回帰分析、分散分析の結果を比較してみた。
いずれにおいても、t検定、回帰分析、分散分析の3つは、まったく同じ結果になった。
つまり、この3つは同じことをしていることがわかる。
回帰分析、分散分析がt検定と違うところは、多変量解析に拡張できるところ。
このことがわかれば、単変量でt検定を行い、多変量では重回帰分析や共分散分析を行う理由も理解できるだろう。
何らか役に立てば幸い。
コメント