統計ER

統計ソフトRの使い方を中心に、統計解析方法の解説をするブログ。ありそうでなかなか見つからないサンプルサイズ計算などニッチな方法について紹介しています。

t検定、回帰分析・線形回帰、ANOVAは、みなつながっている

Toukei Consul Banner

KH Coder Consul Banner

t検定(平均値の差の検定)、回帰分析・線形回帰、ANOVA(一元配置分散分析)はまったく別物だと思っているならば、ぜひ読んでみてほしい。

きっと目から鱗が落ちるはず。

t検定は線形回帰モデルでもできるし、ANOVAは二群でもできる

t検定は、独立した二群の平均値の差の検定を行う方法だ。これを回帰分析または線形回帰モデルでもできる。回帰分析も線形回帰も広い意味では同じものを指す。そして、三群以上でないと使わないと思っていたANOVAも使える。以下に統計ソフトRの関数を使って計算してみる。

使うデータはsleepというデータで、extraという変数をgroup間で比較するという命題を使って計算してみる。

t検定の結果

t.test()を使って計算する。Welchの方法であると、つながっていることが実感しにくいので、等分散性を仮定した方法にする(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はlinear modelの略で線形(回帰)モデルという意味だ。

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未満を意味している。

そして実はANOVAの結果も出ている。最下段の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

ANOVAの結果

ANOVAを使う方法はいくつかある。

  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検定も回帰分析もANOVAも同じ「p=0.07919」であった。つまり、t検定も回帰分析もANOVAも、要は「同じ」。

「t検定」と「回帰分析、ANOVA」の違いは、拡張性だ。回帰分析やANOVAは説明変数を増やして、重回帰分析や共分散分析(ANCOVA, Analysis of covariance)に拡張できる点が優れている。

統計学的有意になる例でもう一つ

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()と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検定、回帰分析、ANOVAすべて同じ結果になった。

まとめ

統計ソフトRの組み込みデータセット2つを使って、t検定、回帰分析、ANOVAの結果を比較してみた。

いずれにおいても、t検定、回帰分析、ANOVAの3つは、まったく同じ結果になった。

つまり、この3つは同じことをしていることがわかる。

回帰分析、ANOVAがt検定と違うところは、多変量解析に拡張できるところ。

逆に言えば、回帰分析やANOVAで多変量解析をしていても、原理原則大元はt検定だと思えばいい。そう考えたら、重回帰分析とか共分散分析も難しい感じはしない。

t検定、回帰分析、ANOVAの関係性を知らなかったあなた。今日から一つ優位に立った。