## ----include = FALSE---------------------------------------------------------- knitr::opts_chunk$set( collapse = TRUE, comment = "#>" ) ## ----setup-------------------------------------------------------------------- library(multibias) ## ----eval = TRUE-------------------------------------------------------------- head(evans) ## ----eval = TRUE-------------------------------------------------------------- biased_model <- glm(CHD ~ SMK + HPT, family = binomial(link = "logit"), data = evans) or <- round(exp(coef(biased_model)[2]), 2) or_ci_low <- round(exp(coef(biased_model)[2] - 1.96 * summary(biased_model)$coef[2, 2]), 2) or_ci_high <- round(exp(coef(biased_model)[2] + 1.96 * summary(biased_model)$coef[2, 2]), 2) print(paste0("Biased Odds Ratio: ", or)) print(paste0("95% CI: (", or_ci_low, ", ", or_ci_high, ")")) ## ----eval = TRUE-------------------------------------------------------------- u_0 <- qlogis(0.25) u_x <- log(0.5) u_y <- log(2.5) u_c <- log(2) ## ----eval = TRUE-------------------------------------------------------------- df <- data_observed( data = evans, exposure = "SMK", outcome = "CHD", confounders = "HPT" ) set.seed(1234) adjust_uc( df, u_model_coefs = c(u_0, u_x, u_y, u_c) ) ## ----eval = TRUE-------------------------------------------------------------- full_model <- glm(CHD ~ SMK + HPT + AGE, family = binomial(link = "logit"), data = evans) or <- round(exp(coef(full_model)[2]), 2) or_ci_low <- round(exp(coef(biased_model)[2] - 1.96 * summary(full_model)$coef[2, 2]), 2) or_ci_high <- round(exp(coef(biased_model)[2] + 1.96 * summary(full_model)$coef[2, 2]), 2) print(paste0("Odds Ratio: ", or)) print(paste0("95% CI: (", or_ci_low, ", ", or_ci_high, ")")) ## ----out.width = '70%', echo = FALSE------------------------------------------ knitr::include_graphics("img/uc_emc_sel_DAG.png") ## ----eval = TRUE-------------------------------------------------------------- head(df_uc_em_sel) ## ----eval = TRUE-------------------------------------------------------------- biased_model <- glm(Y ~ Xstar + C1 + C2 + C3, , family = binomial(link = "logit"), data = df_uc_em_sel) biased_or <- round(exp(coef(biased_model)[2]), 2) print(paste0("Biased Odds Ratio: ", biased_or)) ## ----eval = TRUE-------------------------------------------------------------- u_model <- glm(U ~ X + Y, family = binomial(link = "logit"), data = df_uc_em_sel_source) x_model <- glm(X ~ Xstar + Y + C1 + C2 + C3, family = binomial(link = "logit"), data = df_uc_em_sel_source) s_model <- glm(S ~ Xstar + Y + C1 + C2 + C3, family = binomial(link = "logit"), data = df_uc_em_sel_source) ## ----eval = FALSE------------------------------------------------------------- # library(doParallel) # # no_cores <- detectCores() - 1 # registerDoParallel(cores = no_cores) # cl <- makeCluster(no_cores) # # set.seed(1234) # nreps <- 1000 # est <- vector(length = nreps) ## ----eval = FALSE------------------------------------------------------------- # or <- foreach(i = 1:nreps, .combine = c, # .packages = c("dplyr", "multibias")) %dopar% { # # df_sample <- df_uc_em_sel[sample(seq_len(nrow(df_uc_em_sel)), # nrow(df_uc_em_sel), # replace = TRUE), ] # # est[i] <- adjust_uc_em_sel( # data_observed = data_observed( # data = df_sample, # exposure = "Xstar", # outcome = "Y", # confounders = c("C1", "C2", "C3") # ), # u_model_coefs = c( # rnorm(1, mean = u_model$coef[1], sd = summary(u_model)$coef[1, 2]), # rnorm(1, mean = u_model$coef[2], sd = summary(u_model)$coef[2, 2]), # rnorm(1, mean = u_model$coef[3], sd = summary(u_model)$coef[3, 2]) # ), # x_model_coefs = c( # rnorm(1, mean = x_model$coef[1], sd = summary(x_model)$coef[1, 2]), # rnorm(1, mean = x_model$coef[2], sd = summary(x_model)$coef[2, 2]), # rnorm(1, mean = x_model$coef[3], sd = summary(x_model)$coef[3, 2]), # rnorm(1, mean = x_model$coef[4], sd = summary(x_model)$coef[4, 2]), # rnorm(1, mean = x_model$coef[5], sd = summary(x_model)$coef[5, 2]), # rnorm(1, mean = x_model$coef[6], sd = summary(x_model)$coef[6, 2]) # ), # s_model_coefs = c( # rnorm(1, mean = s_model$coef[1], sd = summary(s_model)$coef[1, 2]), # rnorm(1, mean = s_model$coef[2], sd = summary(s_model)$coef[2, 2]), # rnorm(1, mean = s_model$coef[3], sd = summary(s_model)$coef[3, 2]), # rnorm(1, mean = s_model$coef[4], sd = summary(s_model)$coef[4, 2]), # rnorm(1, mean = s_model$coef[5], sd = summary(s_model)$coef[5, 2]), # rnorm(1, mean = s_model$coef[6], sd = summary(s_model)$coef[6, 2]) # ) # )$estimate # } ## ----eval = FALSE------------------------------------------------------------- # # odds ratio estimate # round(median(or), 2) # #> 2.02 # # # confidence interval # round(quantile(or, c(.025, .975)), 2) # #> 1.93 2.11