## ----setup, include = FALSE----------------------------------------------- Sys.setenv(OMP_NUM_THREADS = "1", OPENBLAS_NUM_THREADS = "1", MKL_NUM_THREADS = "1", VECLIB_MAXIMUM_THREADS = "1", OMP_THREAD_LIMIT = "1") options(prompt = "R> ", continue = "+ ", width = 76) knitr::opts_chunk$set( collapse = TRUE, comment = "#>", fig.width = 7, fig.height = 4.5, fig.align = "center" ) ## ----install, eval = FALSE------------------------------------------------ # install.packages("nonprobsvy") ## ----libs, message = FALSE, warning = FALSE------------------------------- library("nonprobsvy") library("ggplot2") ## ----jvs-data------------------------------------------------------------- data("jvs", package = "nonprobsvy") head(jvs) ## ----jvs-design----------------------------------------------------------- jvs_svy <- svydesign(ids = ~ 1, weights = ~ weight, strata = ~ size + nace + region, data = jvs) ## ----admin-data----------------------------------------------------------- data("admin", package = "nonprobsvy") head(admin) ## ----ipw1----------------------------------------------------------------- ipw_est1 <- nonprob( selection = ~ region + private + nace + size, target = ~ single_shift, svydesign = jvs_svy, data = admin, method_selection = "logit" ) ## ----ipw1-print----------------------------------------------------------- ipw_est1 ## ----ipw1-summary--------------------------------------------------------- summary(ipw_est1) ## ----ipw1-extract--------------------------------------------------------- extract(ipw_est1) ## ----ipw2----------------------------------------------------------------- ipw_est2 <- nonprob( selection = ~ region + private + nace + size, target = ~ single_shift, svydesign = jvs_svy, data = admin, method_selection = "logit", control_selection = control_sel(gee_h_fun = 1, est_method = "gee") ) ## ----ipw2-print----------------------------------------------------------- ipw_est2 ## ----ipw-balance---------------------------------------------------------- data.frame(ipw_mle = check_balance(~ size - 1, ipw_est1, 1)$balance, ipw_gee = check_balance(~ size - 1, ipw_est2, 1)$balance) ## ----mi1------------------------------------------------------------------ mi_est1 <- nonprob( outcome = single_shift ~ region + private + nace + size, svydesign = jvs_svy, data = admin, method_outcome = "glm", family_outcome = "binomial" ) mi_est1 ## ----mi23----------------------------------------------------------------- mi_est2 <- nonprob( outcome = single_shift ~ region + private + nace + size, svydesign = jvs_svy, data = admin, method_outcome = "nn", control_outcome = control_out(k = 5) ) mi_est3 <- nonprob( outcome = single_shift ~ region + private + nace + size, svydesign = jvs_svy, data = admin, method_outcome = "pmm", family_outcome = "binomial", control_outcome = control_out(k = 5) ) ## ----mi23-extract--------------------------------------------------------- rbind("NN" = extract(mi_est2)[, 2:3], "PMM" = extract(mi_est3)[, 2:3]) ## ----dr1------------------------------------------------------------------ dr_est1 <- nonprob( selection = ~ region + private + nace + size, outcome = single_shift ~ region + private + nace + size, svydesign = jvs_svy, data = admin, method_selection = "logit", method_outcome = "glm", family_outcome = "binomial" ) dr_est1 ## ----dr1-summary---------------------------------------------------------- summary(dr_est1) ## ----dr2------------------------------------------------------------------ set.seed(2026) dr_est2 <- nonprob( selection = ~ region + private + nace + size, outcome = single_shift ~ region + private + nace + size, svydesign = jvs_svy, data = admin, method_selection = "logit", method_outcome = "glm", family_outcome = "binomial", control_selection = control_sel(nfolds = 3, nlambda = 10), control_outcome = control_out(nfolds = 3, nlambda = 10), control_inference = control_inf(bias_correction = TRUE, vars_combine = TRUE, vars_selection = TRUE) ) dr_est2 ## ----comparison-of-est, fig.cap = "Figure 1: Comparison of estimates of the share of job vacancies offered on a single-shift."---- df_s <- rbind(extract(ipw_est1), extract(ipw_est2), extract(mi_est1), extract(mi_est2), extract(mi_est3), extract(dr_est1), extract(dr_est2)) df_s$est <- c("IPW (MLE)", "IPW (GEE)", "MI (GLM)", "MI (NN)", "MI (PMM)", "DR", "DR (BM)") ggplot(data = df_s, aes(y = est, x = mean, xmin = lower_bound, xmax = upper_bound)) + geom_point() + geom_vline(xintercept = mean(admin$single_shift), linetype = "dotted", color = "red") + geom_errorbar() + labs(x = "Point estimator and confidence interval", y = "Estimators") + theme_bw() ## ----ipw-boot------------------------------------------------------------- set.seed(2024) ipw_est1_boot <- nonprob( selection = ~ region + private + nace + size, target = ~ single_shift, svydesign = jvs_svy, data = admin, method_selection = "logit", control_inference = control_inf(var_method = "bootstrap", num_boot = 50), verbose = FALSE ) ## ----ipw-boot-compare----------------------------------------------------- rbind("IPW analytic variance" = extract(ipw_est1)[, 2:3], "IPW bootstrap variance" = extract(ipw_est1_boot)[, 2:3]) ## ----ipw-boot-sample------------------------------------------------------ head(ipw_est1_boot$boot_sample, n = 3) ## ----mi-sel--------------------------------------------------------------- set.seed(2024) mi_est1_sel <- nonprob( outcome = single_shift ~ region + private + nace + size, svydesign = jvs_svy, data = admin, method_outcome = "glm", family_outcome = "binomial", control_outcome = control_out(nfolds = 3, nlambda = 10, penalty = "lasso"), control_inference = control_inf(vars_selection = TRUE), verbose = TRUE ) ## ----mi-sel-compare------------------------------------------------------- rbind("MI without var sel" = extract(mi_est1)[, 2:3], "MI with var sel" = extract(mi_est1_sel)[, 2:3]) ## ----mi-sel-coef---------------------------------------------------------- round(coef(mi_est1_sel)$coef_out[, 1], 4) ## ----ipw-coef------------------------------------------------------------- round(coef(ipw_est1)$coef_sel[, 1], 4) ## ----nobs----------------------------------------------------------------- nobs(dr_est1) ## ----confint-------------------------------------------------------------- confint(dr_est1, level = 0.99) ## ----weights-------------------------------------------------------------- summary(weights(dr_est1)) ## ----method-glm----------------------------------------------------------- res_glm <- method_glm( y_nons = admin$single_shift, X_nons = model.matrix(~ region + private + nace + size, admin), X_rand = model.matrix(~ region + private + nace + size, jvs), svydesign = jvs_svy) res_glm ## ----method-ps------------------------------------------------------------ method_ps() ## ----method-ps-help, eval = FALSE----------------------------------------- # ?method_ps()