I am working on statistical inference with instrumental variables (IV) following Wooldridge (2016) Introductory Econometrics, Ch. 15. I am using the Card data set (like the book), with wages as outcome (y), education as a endogenous continuous treatment (x) and distance to college as a binary IV (z).
I want to calculate the standard errors manually, and preferably additionally in matrix form using Mata. So far, I am able to calculate coefficients but I can't seem to obtain the correct standard errors and would be happy for input on this.
I obtain the point estimate for βiv with the Wald-estimator:
βiv = E[y|z=1] - E[y|z=1] / E[x|z=1] - E[x|z=1]
Code:
. use http://pped.org/card.dta, clear // Load Card data set . keep nearc4 educ lwage id . rename nearc4 z . rename educ x . rename lwage y . bysort z: sum y x ----------------------------------------------------------------------------------------------------------------- -> z = 0 Variable | Obs Mean Std. Dev. Min Max -------------+--------------------------------------------------------- y | 957 6.155494 .4328417 4.60517 7.474772 x | 957 12.69801 2.791523 1 18 ----------------------------------------------------------------------------------------------------------------- -> z = 1 Variable | Obs Mean Std. Dev. Min Max -------------+--------------------------------------------------------- y | 2,053 6.311401 .4402214 4.60517 7.784889 x | 2,053 13.52703 2.580455 2 18 . di (6.311401-6.155494)/(13.52703-12.69801) .18806181
Code:
. ivregress 2sls y (x=z), nohe ------------------------------------------------------------------------------ y | Coef. Std. Err. z P>|z| [95% Conf. Interval] -------------+---------------------------------------------------------------- x | .1880626 .0262826 7.16 0.000 .1365496 .2395756 _cons | 3.767472 .3487458 10.80 0.000 3.083943 4.451001 ------------------------------------------------------------------------------
Var(βiv) = sigma^2/(SSTx*R^2x,z)
First, the total sum of squares for x (SSTx), is obtained by
Code:
. egen x_bar = mean(x) . gen SSTx = (x-x_bar)^2 . quiet sum SSTx . di r(sum) 21562.08
Code:
. reg x z, nohe ------------------------------------------------------------------------------ x | Coef. Std. Err. t P>|t| [95% Conf. Interval] -------------+---------------------------------------------------------------- z | .829019 .1036988 7.99 0.000 .6256912 1.032347 _cons | 12.69801 .0856416 148.27 0.000 12.53009 12.86594 ------------------------------------------------------------------------------ . di .829^2 .687241
sigma^2 = 1/(n-2)*sum(û^2)
Code:
. quiet reg x z . predict x_hat (option xb assumed; fitted values) . quiet reg y x_hat, nohe . predict iv_resid (option xb assumed; fitted values) . quiet sum iv_resid . di r(sum) 18848.115 . di (18848.114)^2 3.553e+08 . gen sigma_squared = 3.553e+08 . tabstat sigma_squared, format(%20.2f) variable | mean -------------+---------- sigma_squa~d | 355300000.00 ------------------------ . di (1/(3010-2))*355300000 118118.35
Code:
. di 118118.35/(21562.08*.687241) 7.971089 . * sigma . di sqrt(7.971089) 2.8233117 . * se(βiv) . di 2.8233117/sqrt(21562.08) .01922709
I have also worked out IV in Mata, although I am stuck at variance-estimation here as well:
Code:
. mata : : y=st_data(.,"y") : : X=st_data(.,"x") : : Z=st_data(.,"z") : : X = X, J(rows(X),1,1) // Add constant : : Z = Z, J(rows(Z),1,1) // Add constant : : b_iv = luinv(Z'*X)*Z'*y : : b_iv 1 +---------------+ 1 | .1880626042 | 2 | 3.767472015 | +---------------+ : end
0 Response to How to manually calculate standard errors for instrumental variables?
Post a Comment