II Econometric Analysis Using R

Also available in Stata and Python versions

Chapter 5. IV estimation of Single-Equation Linear Models

Example 5.3

Load libraries

library(wooldridge)
library(AER)
library(haven)

Parents’ and Husband’s Education as IVs

summary(lm(lwage ~ exper + expersq + educ, data=mroz))
## 
## Call:
## lm(formula = lwage ~ exper + expersq + educ, data = mroz)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -3.08404 -0.30627  0.04952  0.37498  2.37115 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept) -0.5220406  0.1986321  -2.628  0.00890 ** 
## exper        0.0415665  0.0131752   3.155  0.00172 ** 
## expersq     -0.0008112  0.0003932  -2.063  0.03974 *  
## educ         0.1074896  0.0141465   7.598 1.94e-13 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.6664 on 424 degrees of freedom
##   (325 observations deleted due to missingness)
## Multiple R-squared:  0.1568, Adjusted R-squared:  0.1509 
## F-statistic: 26.29 on 3 and 424 DF,  p-value: 1.302e-15
summary(IV1 <- ivreg(lwage ~ exper + expersq + educ | motheduc + fatheduc + huseduc + exper + expersq, data = mroz))
## 
## Call:
## ivreg(formula = lwage ~ exper + expersq + educ | motheduc + fatheduc + 
##     huseduc + exper + expersq, data = mroz)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -3.08378 -0.32135  0.03538  0.36934  2.35829 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept) -0.1868572  0.2853959  -0.655 0.512997    
## exper        0.0430973  0.0132649   3.249 0.001250 ** 
## expersq     -0.0008628  0.0003962  -2.178 0.029976 *  
## educ         0.0803918  0.0217740   3.692 0.000251 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.6693 on 424 degrees of freedom
## Multiple R-Squared: 0.1495,  Adjusted R-squared: 0.1435 
## Wald test: 11.52 on 3 and 424 DF,  p-value: 2.817e-07
ols <- lm(educ ~motheduc + fatheduc + huseduc + exper + expersq, data=subset(mroz, !is.na(wage)))
linearHypothesis(ols, c("motheduc=0" , "fatheduc=0" , "huseduc=0"))
## Linear hypothesis test
## 
## Hypothesis:
## motheduc = 0
## fatheduc = 0
## huseduc = 0
## 
## Model 1: restricted model
## Model 2: educ ~ motheduc + fatheduc + huseduc + exper + expersq
## 
##   Res.Df    RSS Df Sum of Sq      F    Pr(>F)    
## 1    425 2219.2                                  
## 2    422 1274.4  3    944.85 104.29 < 2.2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

HOME

Example 5.4

Parents’ and Husband’s Education as IVs, cont’d

summary(IV2 <- ivreg(lwage ~ educ +  exper + expersq + kidslt6 + kidsge6 | motheduc + fatheduc + huseduc + exper + expersq + kidslt6 + kidsge6, data = mroz))
## 
## Call:
## ivreg(formula = lwage ~ educ + exper + expersq + kidslt6 + kidsge6 | 
##     motheduc + fatheduc + huseduc + exper + expersq + kidslt6 + 
##         kidsge6, data = mroz)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -3.07061 -0.31785  0.03213  0.37457  2.34888 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept) -0.1315325  0.3038534  -0.433 0.665322    
## educ         0.0798678  0.0223575   3.572 0.000395 ***
## exper        0.0414939  0.0134453   3.086 0.002161 ** 
## expersq     -0.0008576  0.0003972  -2.159 0.031409 *  
## kidslt6     -0.0313332  0.0861049  -0.364 0.716118    
## kidsge6     -0.0182224  0.0271427  -0.671 0.502360    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.6705 on 422 degrees of freedom
## Multiple R-Squared: 0.1505,  Adjusted R-squared: 0.1404 
## Wald test: 7.084 on 5 and 422 DF,  p-value: 2.242e-06
linearHypothesis(IV2, c("kidslt6=0" , "kidsge6=0"))
## Linear hypothesis test
## 
## Hypothesis:
## kidslt6 = 0
## kidsge6 = 0
## 
## Model 1: restricted model
## Model 2: lwage ~ educ + exper + expersq + kidslt6 + kidsge6 | motheduc + 
##     fatheduc + huseduc + exper + expersq + kidslt6 + kidsge6
## 
##   Res.Df Df  Chisq Pr(>Chisq)
## 1    424                     
## 2    422  2 0.6114     0.7366
anova(IV1, IV2,  vcov=vcov(IV2))
## Wald test
## 
## Model 1: lwage ~ exper + expersq + educ | motheduc + fatheduc + huseduc + 
##     exper + expersq
## Model 2: lwage ~ educ + exper + expersq + kidslt6 + kidsge6 | motheduc + 
##     fatheduc + huseduc + exper + expersq + kidslt6 + kidsge6
##   Res.Df Df      F Pr(>F)
## 1    424                 
## 2    422  2 0.3057 0.7368

LM test

uhat <- resid(IV1)
summary(IV3u <- ivreg(uhat ~ educ +  exper + expersq + kidslt6 + kidsge6 | motheduc + fatheduc + huseduc + exper + expersq + kidslt6 + kidsge6, data = subset(mroz, !is.na(wage))))
## 
## Call:
## ivreg(formula = uhat ~ educ + exper + expersq + kidslt6 + kidsge6 | 
##     motheduc + fatheduc + huseduc + exper + expersq + kidslt6 + 
##         kidsge6, data = subset(mroz, !is.na(wage)))
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -3.07061 -0.31785  0.03213  0.37457  2.34888 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)
## (Intercept)  5.532e-02  3.039e-01   0.182    0.856
## educ        -5.240e-04  2.236e-02  -0.023    0.981
## exper       -1.603e-03  1.345e-02  -0.119    0.905
## expersq      5.169e-06  3.972e-04   0.013    0.990
## kidslt6     -3.133e-02  8.610e-02  -0.364    0.716
## kidsge6     -1.822e-02  2.714e-02  -0.671    0.502
## 
## Residual standard error: 0.6705 on 422 degrees of freedom
## Multiple R-Squared: 0.001115,    Adjusted R-squared: -0.01072 
## Wald test: 0.1223 on 5 and 422 DF,  p-value: 0.9874
LM <- summary(IV3u)$r.squared * nobs(IV3u)
LM
## [1] 0.4773772
pchisq(LM, 2, lower.tail = FALSE)
## [1] 0.7876601

** Hetroskedasticity-Robust Inference pp106 **

coeftest(IV1, vcovHC(IV1, type="HC1"))
## 
## t test of coefficients:
## 
##                Estimate  Std. Error t value  Pr(>|t|)    
## (Intercept) -0.18685722  0.30126251 -0.6202 0.5354283    
## exper        0.04309732  0.01530642  2.8156 0.0050951 ** 
## expersq     -0.00086280  0.00042166 -2.0462 0.0413549 *  
## educ         0.08039176  0.02170330  3.7041 0.0002402 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Hteroskedasticity robust F test, page 107 (F=.25 & p-value=.781)

coeftest(IV2, vcovHC(IV2, type="HC1"))
## 
## t test of coefficients:
## 
##                Estimate  Std. Error t value  Pr(>|t|)    
## (Intercept) -0.13153245  0.32063399 -0.4102 0.6818482    
## educ         0.07986781  0.02246128  3.5558 0.0004195 ***
## exper        0.04149393  0.01544625  2.6863 0.0075091 ** 
## expersq     -0.00085763  0.00042121 -2.0361 0.0423619 *  
## kidslt6     -0.03133324  0.10139675 -0.3090 0.7574617    
## kidsge6     -0.01822245  0.02835793 -0.6426 0.5208409    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

//LM test page 107

dmroz <- subset(mroz, !is.na(wage))
uhat <- resid(IV1 <- ivreg(lwage ~ exper + expersq + educ | motheduc + fatheduc + huseduc + exper + expersq, data = mroz))
u_klt6 <- resid(ivreg(kidslt6 ~ exper + expersq + educ | motheduc + fatheduc + huseduc + exper + expersq, data=mroz))
u_kage6 <- resid(ivreg(kidsge6 ~ exper + expersq + educ | motheduc + fatheduc + huseduc + exper + expersq, data=mroz))

df <- data.frame(cbind(lwage=mroz$lwage, uhat, u_klt6, u_kage6))
## Warning in cbind(lwage = mroz$lwage, uhat, u_klt6, u_kage6): number of rows of
## result is not a multiple of vector length (arg 2)
df['one']=1
df <- subset(df, !is.na(lwage))

summary(long <- lm(one ~ u_kage6:uhat + u_klt6:uhat + 0, data=df))
## 
## Call:
## lm(formula = one ~ u_kage6:uhat + u_klt6:uhat + 0, data = df)
## 
## Residuals:
##    Min     1Q Median     3Q    Max 
## 0.7298 0.9896 0.9992 1.0078 1.3243 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)
## u_kage6:uhat -0.02840    0.05655  -0.502    0.616
## uhat:u_klt6  -0.11502    0.16065  -0.716    0.474
## 
## Residual standard error: 1.001 on 426 degrees of freedom
## Multiple R-squared:  0.002027,   Adjusted R-squared:  -0.002658 
## F-statistic: 0.4327 on 2 and 426 DF,  p-value: 0.649
LM <- summary(long)$r.squared * nobs(long)
LM
## [1] 0.8676851
pchisq(LM, 2, lower.tail = FALSE)
## [1] 0.6480143

HOME

Example 5.5

IQ and KWW as indicator of Ability

nls80 <- read_dta("nls80.dta")
summary(ivreg(lwage ~ exper + tenure + married + south + urban + black + educ + iq | kww + exper + tenure + married + south + urban + black + educ, data=nls80))
## 
## Call:
## ivreg(formula = lwage ~ exper + tenure + married + south + urban + 
##     black + educ + iq | kww + exper + tenure + married + south + 
##     urban + black + educ, data = nls80)
## 
## Residuals:
##       Min        1Q    Median        3Q       Max 
## -2.095561 -0.224017  0.006572  0.234495  1.398914 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  4.592453   0.325781  14.097  < 2e-16 ***
## exper        0.014420   0.003321   4.342 1.56e-05 ***
## tenure       0.010456   0.002601   4.020 6.30e-05 ***
## married      0.200690   0.040678   4.934 9.56e-07 ***
## south       -0.051553   0.031128  -1.656  0.09803 .  
## urban        0.176706   0.028212   6.264 5.75e-10 ***
## black       -0.022561   0.073960  -0.305  0.76040    
## educ         0.025032   0.016607   1.507  0.13206    
## iq           0.013047   0.004934   2.644  0.00832 ** 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.3807 on 926 degrees of freedom
## Multiple R-Squared:  0.19,   Adjusted R-squared: 0.183 
## Wald test: 36.96 on 8 and 926 DF,  p-value: < 2.2e-16

HOME