## Data from one sample of 300 workers
xy_sim <- draw_xy(300)
plot(y_hat ~ x_hat, data=xy_sim, pch=16, col=grey(0, .1),
ylim=c(0, 15), # zoom in on the fitted curves
main=NA, ylab='Hourly wage (1980 dollars)', xlab='Years of schooling')
## Plot Bootstrap CI for Single Sample
pred_design <- data.frame(x_hat=x_levels)
boot_lo <- matrix(NA, nrow=nrow(pred_design), ncol=399)
for (b in 1:399) {
xy_boot <- xy_sim[sample(nrow(xy_sim), replace=TRUE), ]
reg_b <- loess(y_hat ~ x_hat, data=xy_boot, span=span_wage, degree=1)
boot_lo[, b] <- predict(reg_b, newdata=pred_design)
}
boot_cb <- apply(boot_lo, 1, quantile,
probs=c(.025, .975), na.rm=TRUE)
polygon(
c(pred_design[[1]], rev(pred_design[[1]])),
c(boot_cb[1, ], rev(boot_cb[2, ])),
col=rgb(0, .7, .7, .3),
border=NA)
# Construct CI across Multiple Samples from the population
sample_lo <- matrix(NA, nrow=nrow(pred_design), ncol=399)
for (b in 1:399) {
xy_sim_b <- draw_xy(300) # Entirely new sample
reg_b <- loess(y_hat ~ x_hat, data=xy_sim_b, span=span_wage, degree=1)
sample_lo[, b] <- predict(reg_b, newdata=pred_design)
}
ci_lo <- apply(sample_lo, 1, quantile,
probs=c(.025, .975), na.rm=TRUE)
polygon(
c(pred_design[[1]], rev(pred_design[[1]])),
c(ci_lo[1, ], rev(ci_lo[2, ])),
col=grey(0, alpha=.25),
border=NA)
# Population curve, in blue as in the Bias plot
points(x_levels, population_levels, pch=16, col=rgb(0, 0, 1, .8))
legend('topleft', bty='n', cex=.8,
legend=c('Bootstrap CI (one sample)', 'CI across samples', 'Population mean'),
pch=c(15, 15, 16),
col=c(rgb(0, .7, .7, .5), grey(0, .5), rgb(0, 0, 1, .8)))