## ----include = FALSE---------------------------------------------------------- knitr::opts_chunk$set( collapse = TRUE, comment = "#>", fig.path = "figures/judge-designs-" ) set.seed(1) ## ----message = FALSE---------------------------------------------------------- library(ivcheck) ## ----------------------------------------------------------------------------- set.seed(1) K <- 20 n <- 3000 judge <- sample.int(K, n, replace = TRUE) p_by_j <- seq(0.2, 0.7, length.out = K) d <- rbinom(n, 1, p_by_j[judge]) y <- rnorm(n, mean = d) r_valid <- iv_testjfe(y, d, judge, n_boot = 100, parallel = FALSE) print(r_valid) ## ----------------------------------------------------------------------------- set.seed(2) # Same first stage, but Y now depends on judge identity non-linearly y_viol <- rnorm(n, mean = d + 1.5 * sin(judge * 0.5)) r_viol <- iv_testjfe(y_viol, d, judge, n_boot = 100, parallel = FALSE) print(r_viol) ## ----------------------------------------------------------------------------- r_viol$binding ## ----fig.width = 6, fig.height = 4-------------------------------------------- judges <- sort(unique(judge)) n_j <- sapply(judges, function(j) sum(judge == j)) p_j <- sapply(judges, function(j) mean(d[judge == j])) mu_j_viol <- sapply(judges, function(j) mean(y_viol[judge == j])) mu_j_valid <- sapply(judges, function(j) mean(y[judge == j])) oldpar <- par(no.readonly = TRUE) par(mfrow = c(1, 2)) plot(p_j, mu_j_valid, pch = 19, cex = sqrt(n_j) / 5, main = "Valid design", xlab = "p_j", ylab = "mu_j") abline(lm(mu_j_valid ~ p_j, weights = n_j), col = "red") plot(p_j, mu_j_viol, pch = 19, cex = sqrt(n_j) / 5, main = "Exclusion violation", xlab = "p_j", ylab = "mu_j") abline(lm(mu_j_viol ~ p_j, weights = n_j), col = "red") par(oldpar) ## ----------------------------------------------------------------------------- set.seed(1) K <- 15 n <- 2000 judge <- sample.int(K, n, replace = TRUE) x_case <- rnorm(n) p_by_j <- seq(0.2, 0.7, length.out = K) d <- rbinom(n, 1, p_by_j[judge]) y <- rnorm(n, mean = d + 0.5 * x_case) r_x <- iv_testjfe(y, d, judge, x = x_case, n_boot = 100, parallel = FALSE) print(r_x)