## ----include = FALSE---------------------------------------------------------- knitr::opts_chunk$set( collapse = TRUE, comment = "#>" ) ## ----setup, message = FALSE--------------------------------------------------- library(ivreg2r) library(dplyr) data(card) ## ----ols---------------------------------------------------------------------- fit_ols <- ivreg2( lwage ~ educ + exper + expersq + black + smsa + south + smsa66 + reg662 + reg663 + reg664 + reg665 + reg666 + reg667 + reg668 + reg669, data = card ) summary(fit_ols) ## ----tsls--------------------------------------------------------------------- iv_formula <- lwage ~ exper + expersq + black + smsa + south + smsa66 + reg662 + reg663 + reg664 + reg665 + reg666 + reg667 + reg668 + reg669 | educ | nearc4 fit_iv <- ivreg2(iv_formula, data = card) summary(fit_iv) ## ----diag-values, include = FALSE--------------------------------------------- diag_iv <- diagnostics(fit_iv) cd_f <- diag_iv |> filter(test == "weak_id") |> pull(statistic) sy10 <- diag_iv |> filter(test == "sy_iv_size_10") |> pull(statistic) sy15 <- diag_iv |> filter(test == "sy_iv_size_15") |> pull(statistic) underid_stat <- diag_iv |> filter(test == "underid") |> pull(statistic) underid_p <- diag_iv |> filter(test == "underid") |> pull(p_value) endog_stat <- diag_iv |> filter(test == "endogeneity") |> pull(statistic) endog_p <- diag_iv |> filter(test == "endogeneity") |> pull(p_value) ar_chi2_p <- diag_iv |> filter(test == "anderson_rubin_chi2") |> pull(p_value) educ_z_p <- tidy(fit_iv) |> filter(term == "educ") |> pull(p.value) ## ----overid------------------------------------------------------------------- fit_overid <- ivreg2( lwage ~ exper + expersq + black + smsa + south + smsa66 + reg662 + reg663 + reg664 + reg665 + reg666 + reg667 + reg668 + reg669 | educ | nearc2 + nearc4, data = card ) summary(fit_overid) ## ----overid-values, include = FALSE------------------------------------------- sargan <- diagnostics(fit_overid) |> filter(test == "overid") ## ----first-stage-------------------------------------------------------------- fit_fs <- ivreg2(iv_formula, data = card, first_stage = TRUE) fs <- first_stage(fit_fs) summary(fs$educ) ## ----first-stage-tidy--------------------------------------------------------- tidy(fs$educ) ## ----robust------------------------------------------------------------------- fit_robust <- ivreg2(iv_formula, data = card, vcov = "robust", small = TRUE) summary(fit_robust) ## ----robust-values, include = FALSE------------------------------------------- diag_rob <- diagnostics(fit_robust) kp_f_rob <- diag_rob |> filter(test == "weak_id_robust") |> pull(statistic) cd_f_rob <- diag_rob |> filter(test == "weak_id") |> pull(statistic) ## ----cluster------------------------------------------------------------------ data(nlswork) fit_cluster <- ivreg2( ln_wage ~ grade + age + ttl_exp + tenure, data = nlswork, clusters = ~ idcode ) summary(fit_cluster) ## ----cluster-values----------------------------------------------------------- fit_iid <- ivreg2(ln_wage ~ grade + age + ttl_exp + tenure, data = nlswork) grade_se <- bind_rows(iid = tidy(fit_iid), cluster = tidy(fit_cluster), .id = "vce") |> filter(term == "grade") grade_se ## ----weights------------------------------------------------------------------ fit_pw <- ivreg2(iv_formula, data = card, weights = weight, weight_type = "pweight", vcov = "robust") summary(fit_pw) ## ----aweight------------------------------------------------------------------ cells <- card |> group_by(black, smsa, south) |> summarize(lwage = mean(lwage), n = n(), .groups = "drop") micro <- ivreg2(lwage ~ black + smsa + south, data = card) grouped <- ivreg2(lwage ~ black + smsa + south, data = cells, weights = n, weight_type = "aweight") all.equal(coef(micro), coef(grouped)) ## ----tidy--------------------------------------------------------------------- tidy(fit_iv) ## ----glance------------------------------------------------------------------- glance(fit_iv) ## ----diagnostics-------------------------------------------------------------- diagnostics(fit_iv) ## ----augment------------------------------------------------------------------ augment(fit_iv) |> head()