チャプター4 統計的仮説検定
本章では統計的仮説検定について簡単に説明します.
4.1 誤差で”ゴサ”います?
前章では回帰分析のやり方を学びました.lm()
関数を用いることで,回帰係数を推定することができました.説明変数が被説明変数に対して効果を持つとき,その回帰係数は0ではないはずです.なので,回帰係数は0ではないときに効果があると結論するわけでした.
しかし,実際の分析においては必ず誤差がありますので,たとえ効果が全くないとしても,その回帰係数の推定値がぴったり0となることはあまりありません.したがって,「推定値が単なる誤差とは思えないほどに0から十分に離れている」ときに効果があると結論することになります.
それでは,推定値がどれくらい0から離れていれば,0から十分に離れている,すなわち効果があると言えるのでしょうか.すなわち,どのようなときに推定値の値に意味がある,有意(significant)であると言うことができるでしょうか.
例えば,lm(data = mydata, salary ~ educ + iq)
を実行すると,educ
の回帰係数の推定値は16.17となります.それは,教育年数が1年増えると年収が約16万円増えると解釈するのでした.これなら0から十分に離れている値であるとなんとなく言えそうですね.
では,もしも回帰係数の推定値が0.1だったらどうでしょうか?それだと誤差の範囲内な気がしますね.では,推定値が0.5だったらどうでしょう.それでも誤差の範囲内?1だったらどうですか?2は?3は?
回帰係数の推定値が微妙なラインにあるときには,人によって誤差の範囲内だと感じるかもしれませんし,誤差であるとは思えないと感じるかもしれません.ある値が(絶対値で)0よりも十分に大きいかどうかというのは主観的な判断になってしまいます.
このように,どれくらいの値なら0から十分に離れていると言えるのかというのは人によって異なります.そのため,回帰係数の推定値が0から十分に離れている,有意である,と言うためには,人の主観によらない何らかの客観的な基準が必要になりそうです.
4.2 す桃じゃないよ,p値だよ
回帰係数の推定値が単なる誤差とは思えないほどに0から十分に離れているかどうかの基準として,p値が使われます.回帰係数の 推定値について,p値という指標を手元のデータから計算することができます.その具体的な計算の仕方は本書のレベルを超えるので,参考文献にあたってください.
p値は,「もしも本当の回帰係数が0であるときに,いま手元のデータから計算された推定値以上の推定値がたまたま誤差によって生じる確率」を意味しています.すなわち,「本当の回帰係数が0であって,推定値は誤差によってたまたま0から離れてしまっているだけに過ぎないと仮定すると,いま手元のデータから計算された推定値がどれほど極端な値なのか」を表す指標です.なお,このような「回帰係数が0である」すなわち「効果がない」という仮定のことを帰無仮説と言います
p値をさらに簡単に言うと,「帰無仮説が正しいとしたときに,この推定値が誤差の範囲であるかどうか」の指標です.p値が大きい時には推定値が単なる誤差によるものである可能性が高いという意味になります.ひるがえって,p値が小さいときには推定値が単なる誤差によるものである可能性が低いという意味になります.
さて,p値をつかってどのように「回帰係数の推定値が単なる誤差とは思えないほどに0から十分に離れている」と結論するのでしょうか.その論証の仕方は背理法(proof by contradiction)に少し似ています.
背理法とは,「Aである」と証明するために,まず,「Aでない」と仮定するのでした.そして,その仮定から導かれる矛盾を示すことで,「Aでない,ではない」すなわち「Aである」と主張するのでした.
p値を使って「回帰係数の推定値が単なる誤差ではなく意味がある」と結論する際の手続きは背理法に似ています.まず,「回帰係数の本当の値は0だ」と仮定します.背理法のように,この仮定から矛盾的な事実を示せれば,「回帰係数の本当の値は0ではない」と結論することができるはずです.その矛盾的な事実を示すのに使われるのがp値です.
p値がとても小さいとき,それは手元のデータから計算された推定値が誤差によってたまたま得られる確率はとても低いということを意味します.すなわち,とても稀なことが起きているということです.「こんなに稀なことが起きるなんて,不思議すぎる…これは,仮定が間違っていると考えないと無理がある」と考えて,帰無仮説を誤りであるとして退けるのです.このような論証の手続きを統計的仮説検定と言います.
p値がとても小さいことを根拠に,帰無仮説を誤りであるとして退けることを,「帰無仮説を棄却する」と言います.帰無仮説が棄却されると,帰無仮説の否定にあたる「回帰係数の本当の値は0ではない」が正しいとして結論するのです.なお,帰無仮説の否定にあたる仮説を対立仮説と呼びます.このようにして,回帰係数の推定値が0から十分に離れているのかどうか,意味を持っているのかどうかを客観的に判断することができるのです.
4.3 有意,“ある”意味ね?
さて,実際のところp値がどれほど小さければ,とても小さいと言えるでしょうか.その基準は学問領域の慣習によって決められていることが多いです.それを下回ればとても小さいと判断する閾値のことを,有意水準(level of significance)と言います.社会科学の場合は,5%の水準に設定されることが多いです.すなわち,p値が0.05より小さければ,とても小さい,したがって「回帰係数の本当の値は0ではない」と結論することを約束するわけです(p値は確率なので,0以上1以下の値をとることに注意してください).
統計的仮説検定によって,帰無仮説が棄却されたとき,その推定値は「統計学的に有意である(statistically significant)」と言います.しかし,やや発展的ですが注意してほしいのは,帰無仮説が棄却されるということは,あくまで「“統計学的に”有意である」ということです.サンプルサイズすなわちデータ数を増やすとp値は必ず小さくなります.それは,どれほど回帰係数が0に近くても,サンプルサイズを十分に増やせば必ず統計学的に有意な結果が得られるということです.
とはいえ,例えば,「年収(万円) = 定数項 + 教育年数(年) + 統制変数」という回帰式を推定したところ,教育年数の係数の推定値が0.5で,サンプルサイズがとても大きいために統計学的に有意であったとしましょう.統計学的に有意ではありますが,そのような小さな回帰係数に意味はあるでしょうか.この場合,20年の教育を受けてやっとこさ1万円の年収増になるわけですが,そのようなあまりに小さな効果に実際的な意味があると言えるでしょうか.
上記のような教育の効果を推定する回帰分析の目的は多くの場合,教育政策への応用です.たとえ,統計学的に有意な結果であったとしても,あまりに 効果が小さいのであれば実際的な意味があるとは言いづらいですね.このような推定値の実際的な意味のことを実際的有意性(practical significance),または,経済学的有意性(economic significance)と言います.統計学的有意性だけではなく,実際的有意性にも注意するように心がけましょう.
4.4 始めようか天体観測
回帰分析の統計的仮説検定もRで簡単に行えます.summary()
関数を用いることで,回帰分析の統計的仮説検定だけでなく,回帰分析の他のさまざまな結果を簡単に確認することができます.
<- lm(formula = salary ~ educ + age + exper + iq, data = mydata)
result summary(result)
##
## Call:
## lm(formula = salary ~ educ + age + exper + iq, data = mydata)
##
## Residuals:
## Min 1Q Median 3Q Max
## -662.24 -140.32 3.41 140.56 597.49
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -1803.2587 79.7411 -22.614 < 2e-16 ***
## educ 15.9920 3.1117 5.139 3.32e-07 ***
## age 4.1635 1.3228 3.147 0.0017 **
## exper 0.0194 0.5605 0.035 0.9724
## iq 23.5673 0.8664 27.203 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 206.3 on 995 degrees of freedom
## Multiple R-squared: 0.6192, Adjusted R-squared: 0.6177
## F-statistic: 404.4 on 4 and 995 DF, p-value: < 2.2e-16
さて,Estimate
の列にそれぞれの回帰係数の推定値が表示されています.そして,Pr(>|t|)
という列に p値が表示されています.educ
のp値は2e-16
ですが,これは指数表記というもので,\(2\times10^{-16}=\frac{2}{10^{16}}\)という値を表しています.とても小さな値で,0.05を下回ります.すなわち,educ
の係数の推定値は統計学的に有意であるということになります.統計学的に有意なものにはアルタリスク*
という記号が付けられています.他にも統計学的に有意な推定値がありますね.一つだけ統計学的に有意でない推定値がありますね.それはexper
で,p値は0.97で0.05を上回っていますね.このようにRを使って簡単に統計的仮説検定を行うことができます.
4.5 ほうき星を探して
stargazer()
という関数を使って,回帰分析の結果をきれいにまとめることができます.次のコードを実行してください.
install.packages("stargazer")
library(stargazer)
stargazer(result, type = "text")
Dependent variable: | |
salary | |
educ | 15.992*** |
(3.112) | |
age | 4.164*** |
(1.323) | |
exper | 0.019 |
(0.561) | |
iq | 23.567*** |
(0.866) | |
Constant | -1,803.259*** |
(79.741) | |
Observations | 1,000 |
R2 | 0.619 |
Adjusted R2 | 0.618 |
Residual Std. Error | 206.298 (df = 995) |
F Statistic | 404.447*** (df = 4; 995) |
Note: | p<0.1; p<0.05; p<0.01 |
複数の回帰分析の結果を比べやすく表示することもできます.
<- lm(salary ~ educ, data = mydata)
model1 <- lm(salary ~ educ + age, data = mydata)
model2 <- lm(salary ~ educ + age + exper, data = mydata)
model2 <- lm(salary ~ educ + age + exper + iq, data = mydata)
model2
stargazer(model1, model2, model3, model4, type = "text")
Dependent variable: | ||||
salary | ||||
(1) | (2) | (3) | (4) | |
educ | 70.387*** | 70.313*** | 70.294*** | 15.992*** |
(3.153) | (3.148) | (3.150) | (3.112) | |
age | 3.624** | 3.620** | 4.164*** | |
(1.745) | (1.746) | (1.323) | ||
exper | 0.172 | 0.019 | ||
(0.740) | (0.561) | |||
iq | 23.567*** | |||
(0.866) | ||||
Constant | -33.671 | -140.780** | -143.861** | -1,803.259*** |
(41.965) | (66.441) | (67.782) | (79.741) | |
Observations | 1,000 | 1,000 | 1,000 | 1,000 |
R2 | 0.333 | 0.336 | 0.336 | 0.619 |
Adjusted R2 | 0.332 | 0.335 | 0.334 | 0.618 |
Residual Std. Error | 272.600 (df = 998) | 272.149 (df = 997) | 272.278 (df = 996) | 206.298 (df = 995) |
F Statistic | 498.375*** (df = 1; 998) | 252.172*** (df = 2; 997) | 167.973*** (df = 3; 996) | 404.447*** (df = 4; 995) |
Note: | p<0.1; p<0.05; p<0.01 |