Skip to content
Matthieu Stigler edited this page Apr 16, 2014 · 1 revision

Table MHE 4.6.2: Alternative IV estimates of the economic returns to schooling

Load the packages:

library(RcompAngrist)
library(AER)
data(AngKrug91)

Run the functions ivreg() (package AER) and kclass() (package RcompAngrist):

T_462_IV_1 <- ivreg(lwklywge ~ educ + yob | qob + yob, data = AngKrug91)
T_462_LIML_1 <- kclass(lwklywge ~ educ + yob | qob + yob, data = AngKrug91)

T_462_IV_2 <- ivreg(lwklywge ~ educ + yob + yqob + I(yqob^2) | qob + yob + yqob + 
    I(yqob^2), data = AngKrug91)
T_462_LIML_2_noQR <- kclass(lwklywge ~ educ + yob + yqob + I(yqob^2) | qob + 
    yob + yqob + I(yqob^2), data = AngKrug91, useQR = FALSE)  #needs useQR as rank problems

T_462_IV_3 <- ivreg(lwklywge ~ educ + yob | qob * yob + yob, data = AngKrug91)
T_462_LIML_3 <- kclass(lwklywge ~ educ + yob | qob * yob + yob, data = AngKrug91)

T_462_IV_4 <- ivreg(lwklywge ~ educ + yob + yqob + I(yqob^2) | qob * yob + yob + 
    yqob + I(yqob^2), data = AngKrug91)
T_462_LIML_4_noQR <- kclass(lwklywge ~ educ + yob + yqob + I(yqob^2) | qob * 
    yob + yob + yqob + I(yqob^2), data = AngKrug91, useQR = FALSE)  #needs useQR as rank problems

Collect the results:

T_462_IV_all <- list(T_462_IV_1 = T_462_IV_1, T_462_IV_2 = T_462_IV_2, T_462_IV_3 = T_462_IV_3, 
    T_462_IV_4 = T_462_IV_4)
T_462_LIML_all <- list(T_462_LIML_1 = T_462_LIML_1, T_462_LIML_2 = T_462_LIML_2_noQR, 
    T_462_LIML_3 = T_462_LIML_3, T_462_LIML_4 = T_462_LIML_4_noQR)

co_sls <- sapply(T_462_IV_all, function(x) coef(summary(x))["educ", 1:2])
co_lim <- sapply(T_462_LIML_all, function(x) summary(x)["educ", 1:2])

co_all <- rbind(co_sls, co_lim)

After some formatting of co_all (not shown), we obtain:

(1) (2) (3) (4)
2SLS 0.105 0.435 0.089 0.076
sd (0.02) (0.45) (0.016) (0.029)
LIML 0.106 0.539 0.093 0.081
sd (0.02) (0.627) (0.018) (0.041)