統計ER

R, EZR, SPSS, KH Coder を使ったデータ分析方法を紹介するブログ。ニッチな内容が多め

分散分析と回帰分析の違い t検定と回帰分析の違い

分散分析と回帰分析とt検定は同じものである。

>>もう統計で悩むのを終わりにしませんか?


↑1万人以上の医療従事者が購読中

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 

>>もう統計で悩むのを終わりにしませんか?


↑1万人以上の医療従事者が購読中

回帰分析の結果

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

分散分析の結果

分散分析を使う方法はいくつかある。

  1. aov()を使う方法
  2. lm()の結果を使う方法 ― anova()を使う
  3. 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検定を行い、多変量では重回帰分析や共分散分析を行う理由も理解できるだろう。

何らか役に立てば幸い。