``` library(AER) data(CollegeDistance) ``` ``` # compute the correlation # perform the first stage regression and compute the fraction of explained variation # regress `log(wage)` on `education` and save the result to `wage_mod_1` # regress `log(wage)` on `education` and controls and save the result to `wage_mod_2` # obtain robust coefficient summaries on both models ``` ``` # compute the correlation cor(CollegeDistance\$distance, CollegeDistance\$education) # perform the first stage regression and compute the fraction of explained variation R2 <- summary(lm(education ~ distance, data = CollegeDistance))\$r.squared # estimate the IV regression of `log(wage)` on `education` using distance as the instrument and save the result to `wage_mod_iv1` wage_mod_iv1 <- ivreg(log(wage) ~ education | distance, data = CollegeDistance) # perform TSLS regression of `log(wage)` on `education` and controls using distance as the instrument and save the result to `wage_mod_iv2` wage_mod_iv2 <- ivreg(log(wage) ~ unemp + ethnicity + gender + urban + education | . - education + distance, data = CollegeDistance) # obtain robust coefficient summaries on both models coeftest(wage_mod_iv1, vcov. = vcovHC, type = "HC1") coeftest(wage_mod_iv2, vcov. = vcovHC, type = "HC1") ``` ``` test_output_contains("cor(CollegeDistance\$distance, CollegeDistance\$education)") test_object("R2") test_or({ f <- ex() %>% override_solution("attach(CollegeDistance); wage_mod_iv1 <- ivreg(log(wage) ~ education | distance); wage_mod_iv2 <- ivreg(log(wage) ~ unemp + ethnicity + gender + urban + education | . - education + distance); coeftest(wage_mod_iv1, vcov. = vcovHC, type = \"HC1\"); coeftest(wage_mod_iv2, vcov. = vcovHC, type = \"HC1\")") f %>% check_function("ivreg", index = 1) %>% check_arg("formula") %>% check_equal() f %>% check_function("ivreg", index = 2) %>% check_arg("formula") %>% check_equal() f %>% check_object("wage_mod_iv1") f %>% check_object("wage_mod_iv2") f %>% check_function("coeftest", index = 1) %>% check_arg("vcov.") %>% check_equal() f %>% check_function("coeftest", index = 2) %>% check_arg("vcov.") %>% check_equal() },{ f <- ex() %>% override_solution("wage_mod_iv1 <- ivreg(log(CollegeDistance\$wage) ~ CollegeDistance\$education | CollegeDistance\$distance); wage_mod_iv2 <- ivreg(log(CollegeDistance\$wage) ~ CollegeDistance\$unemp + CollegeDistance\$ethnicity + CollegeDistance\$gender + CollegeDistance\$urban + CollegeDistance\$education | . - CollegeDistance\$education + CollegeDistance\$distance); coeftest(wage_mod_iv1, vcov. = vcovHC, type = \"HC1\"); coeftest(wage_mod_iv2, vcov. = vcovHC, type = \"HC1\")") f %>% check_function("ivreg", index = 1) %>% check_arg("formula") %>% check_equal() f %>% check_function("ivreg", index = 2) %>% check_arg("formula") %>% check_equal() f %>% check_object("wage_mod_iv1") f %>% check_object("wage_mod_iv2") f %>% check_function("coeftest", index = 1) %>% check_arg("vcov.") %>% check_equal() f %>% check_function("coeftest", index = 2) %>% check_arg("vcov.") %>% check_equal() },{ test_function("ivreg", index = 1, args = "formula") test_function("ivreg", index = 2, args = "formula") test_function("coeftest", index = 1, args = c("x", "vcov.")) test_function("coeftest", index = 2, args = c("x", "vcov.")) }) success_msg("Nice! In the multiple regression model the estimated coefficient on education is positive, of reasonable size and highly significant when education is instrumented by college distance. ") ```