Chapter 3 操作変数法
操作変数自体の説明はこちらからどうぞ。
3.1 検証する仮説
「追加的に子供を出産することで、出産後の労働時間が減少するのではないか?」という仮説を検証していきます。出産が労働時間に与える影響がテーマです。Angrist and Evans(1998)の再現です。
3.2 データの読み込み
今回使用するデータはU.S. census (1980年)の既婚女性に関するもので、22~ 35歳の2人以上の子供を持つ既婚女性,計254,654人が対象です。
## morekids boy1st boy2nd samesex agem1 black hispan
## 1 0 1 0 0 27 0 0
## 2 0 0 1 0 30 0 0
## 3 0 1 0 0 27 0 0
## 4 0 1 0 0 35 1 0
## 5 0 0 0 1 30 0 0
## 6 0 1 0 0 26 0 0
## othrace weeksm1
## 1 0 0
## 2 0 30
## 3 0 0
## 4 0 0
## 5 0 22
## 6 0 40
○変数の説明
変数名 | 説明 |
---|---|
morekids | 子供が3人以上いる母親なら1をとるダミー変数 |
boy1st | 最初の子供が男なら1をとるダミー変数 |
boy2nd | 2番目の子供が男なら1をとるダミー変数 |
samesex | 最初と2番目の子供の性別が同じなら1をとるダミー変数 |
agem1 | 母親が初めて出産した時の年齢 |
black | 母親が黒人なら1をとるダミー変数 |
hispan | 母親がヒスパニック系なら1をとるダミー変数 |
othrace | 母親が黒人・ヒスパニック系以外なら1をとるダミー変数 |
weeksm1 | 1979年の母親の週の平均労働時間 |
3.3 データの把握
データの特徴を把握していきます。欠損値は特になさそうです。weeksm1
を見ると、働いてない女性も結構いますね。
## morekids boy1st boy2nd
## Min. :0.0000 Min. :0.0000 Min. :0.0000
## 1st Qu.:0.0000 1st Qu.:0.0000 1st Qu.:0.0000
## Median :0.0000 Median :1.0000 Median :1.0000
## Mean :0.3806 Mean :0.5144 Mean :0.5126
## 3rd Qu.:1.0000 3rd Qu.:1.0000 3rd Qu.:1.0000
## Max. :1.0000 Max. :1.0000 Max. :1.0000
## samesex agem1 black
## Min. :0.0000 Min. :21.00 Min. :0.00000
## 1st Qu.:0.0000 1st Qu.:28.00 1st Qu.:0.00000
## Median :1.0000 Median :31.00 Median :0.00000
## Mean :0.5056 Mean :30.39 Mean :0.05166
## 3rd Qu.:1.0000 3rd Qu.:33.00 3rd Qu.:0.00000
## Max. :1.0000 Max. :35.00 Max. :1.00000
## hispan othrace weeksm1
## Min. :0.00000 Min. :0.00000 Min. : 0.00
## 1st Qu.:0.00000 1st Qu.:0.00000 1st Qu.: 0.00
## Median :0.00000 Median :0.00000 Median : 5.00
## Mean :0.07421 Mean :0.05634 Mean :19.02
## 3rd Qu.:0.00000 3rd Qu.:0.00000 3rd Qu.:44.00
## Max. :1.00000 Max. :1.00000 Max. :52.00
3.4 推定
今回興味のある変数はmorekids
です。このパラメータが負であれば、仮説は検証されます。このままOLS推定してもいいですが、その場合には内生性が生じている状況での推定になります。具体的には、働きたくない人(労働時間を短い人)ほど、子供を多く出産するという逆の因果性が考えられます。この逆の因果性は需要関数を推定する際にも生じうる問題です。そこで、今回は操作変数法という手法で、この逆の因果性に対処してみます。
3.4.1 計量経済学モデル
1段階目 \[ morekids_{i} = \alpha + \beta_{1}\times samesex_{i}+ \beta_{2}\times agem1_{i}+ \beta_{3}\times black_{i}+ \beta_{4}\times hispan_{i} + \beta_{5}\times othrace_{i} + u_{i} \]
2段階目 \[ weeksm1_{i} = \alpha + \beta_{1}\times \widehat{morekids_{i}}+ \beta_{2}\times agem1_{i}+ \beta_{3}\times black_{i}+ \beta_{4}\times hispan_{i} + \beta_{5}\times othrace_{i} + u_{i} \]
3.4.2 操作変数の確認
なんでも操作変数に出来る訳ではありません。妥当性と外生性の2つを満たしている必要があります。
- 妥当性
- 内生変数(morekids)と相関がある.
- 同性の子供がいる親は追加的な子供を欲しがる傾向にある
- 外生性
- 被説明変数(weeksm1)と相関がない.
- 子供の性別は直接的に労働時間に影響は与えない
このうち妥当性に関しては、1段階の推定でF値が10を超えるかどうかで定量的に判断出来ます。(あくまで経験則ですが…)今回の場合で実際に推定してみると、samesex
はmorekids
に統計的に有意な影響をあたえており、F値も10を超えているので妥当性に関しては満たされていそうです。外生性に関しては言葉を尽くすのみです。
##
## Call:
## lm(formula = morekids ~ samesex + agem1 + black + hispan + othrace,
## data = df)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.7189 -0.3869 -0.3068 0.5790 0.8164
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -0.1395319 0.0086985 -16.041 < 2e-16 ***
## samesex 0.0680081 0.0019010 35.774 < 2e-16 ***
## agem1 0.0153898 0.0002814 54.681 < 2e-16 ***
## black 0.1005237 0.0043058 23.346 < 2e-16 ***
## hispan 0.1512258 0.0040119 37.694 < 2e-16 ***
## othrace 0.0275069 0.0045537 6.041 1.54e-09 ***
## ---
## Signif. codes:
## 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.4796 on 254648 degrees of freedom
## Multiple R-squared: 0.02418, Adjusted R-squared: 0.02416
## F-statistic: 1262 on 5 and 254648 DF, p-value: < 2.2e-16
3.4.3 推定
操作変数の妥当性・外生性の吟味を終えたので、実際に操作変数法で推定してみましょう!AER
パッケージに入っているivreg
という関数を使います。初めてAER
パッケージを使う人は事前にinstall.packages("AER")
を実行してください。
## Loading required package: lmtest
## Loading required package: zoo
##
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
##
## as.Date, as.Date.numeric
## Loading required package: sandwich
## Loading required package: survival
ivreg(被説明変数 ~ 内生変数 + その他説明変数 | 操作変数 + その他説明変数, data = データの名前)
このように書きます。今回は推定結果をout_iv
に格納します。
3.4.4 解釈
結果をみる時は、いつも通りsummary()
です。2段階目の推定結果が出力されます。基本的にはOLS推定と見方は同じです。追加的に子供が1人増えると、5.8時ほど週の労働時間が減少する傾向にあるみたいです。
##
## Call:
## ivreg(formula = weeksm1 ~ morekids + agem1 + black + hispan +
## othrace | samesex + agem1 + black + hispan + othrace, data = df)
##
## Residuals:
## Min 1Q Median 3Q Max
## -36.34 -17.66 -10.99 22.72 45.15
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -4.79189 0.40657 -11.786 <2e-16 ***
## morekids -5.82105 1.24631 -4.671 3e-06 ***
## agem1 0.83160 0.02289 36.336 <2e-16 ***
## black 11.62327 0.22893 50.772 <2e-16 ***
## hispan 0.40418 0.25986 1.555 0.12
## othrace 2.13096 0.20586 10.352 <2e-16 ***
## ---
## Signif. codes:
## 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 21.38 on 254648 degrees of freedom
## Multiple R-Squared: 0.04368, Adjusted R-squared: 0.04366
## Wald test: 1335 on 5 and 254648 DF, p-value: < 2.2e-16
3.5 推定結果の整理
さて、操作変数法を使ったことでOLS推定での結果からどのように変化をしたか検討してみます。OLS推定だと、働きたくない人(労働時間を短い人)ほど、子供を多く出産する逆の因果性による効果もパラメータの値に含まれてしまうので、morekids
のパラメータの値は大きく推定されると予想出来ます。
複数の推定結果を比較する際には、このstargazer
というライブラリが便利です。
推定結果を見てみると、確かに操作変数法を使ったことで、少しパラメータの値が小さくなっていることがわかります。stargazer
のより詳しい説明はこちらです。
##
## ============================================================================
## Dependent variable:
## ------------------------------------------
## weeksm1
## OLS instrumental
## variable
## (1) (2)
## ----------------------------------------------------------------------------
## morekids -6.230*** -5.821***
## (0.088) (1.246)
##
## agem1 0.838*** 0.832***
## (0.013) (0.023)
##
## black 11.664*** 11.623***
## (0.192) (0.229)
##
## hispan 0.466*** 0.404
## (0.179) (0.260)
##
## othrace 2.142*** 2.131***
## (0.203) (0.206)
##
## Constant -4.835*** -4.792***
## (0.385) (0.407)
##
## ----------------------------------------------------------------------------
## Observations 254,654 254,654
## R2 0.044 0.044
## Adjusted R2 0.044 0.044
## Residual Std. Error (df = 254648) 21.384 21.385
## F Statistic 2,330.779*** (df = 5; 254648)
## ============================================================================
## Note: *p<0.1; **p<0.05; ***p<0.01