## ----include = FALSE---------------------------------------------------------- knitr::opts_chunk$set( collapse = TRUE, comment = "#>" ) ## ----include = FALSE---------------------------------------------------------- knitr::opts_chunk$set( collapse = TRUE, comment = "#>" ) ## ----------------------------------------------------------------------------- library(ipeval) simulate_data <- function(n, seed) { set.seed(seed) data <- data.frame(id = 1:n) data$L <- rnorm(n) data$A <- rbinom(n, 1, plogis(2*data$L)) data$P <- rnorm(n) data$Y <- rbinom(n, 1, plogis(0.5 + data$L + 1.25 * data$P - 0.9*data$A)) data } df_dev <- simulate_data(n = 5000, seed = 1) head(df_dev) ## ----------------------------------------------------------------------------- # naive model, not accounting for confounding variable L model_naive <- glm(Y ~ A + P, "binomial", df_dev) print(coefficients(model_naive)) ## ----warning=FALSE------------------------------------------------------------ # causal model, accounting for L by IPTW trt_model <- glm(A ~ L, "binomial", df_dev) propensity_score <- predict(trt_model, type = "response") iptw <- 1 / ifelse(df_dev$A == 1, propensity_score, 1 - propensity_score) model_causal <- glm(Y ~ A + P, "binomial", df_dev, weights = iptw) print(coefficients(model_causal)) ## ----------------------------------------------------------------------------- df_val <- simulate_data(n = 10000, seed = 2) head(df_val) ## ----------------------------------------------------------------------------- observed_score( object = list( "naive" = model_naive, "causal" = model_causal ), data = df_val, outcome = Y, metrics = c("auc", "brier", "oeratio") ) ## ----fig.height=5, fig.width=5------------------------------------------------ ip_score( object = list( "naive" = model_naive, "causal" = model_causal ), data = df_val, outcome = Y, treatment_formula = A ~ L, treatment_of_interest = 0, null_model = FALSE ) ## ----fig.height=5, fig.width=5------------------------------------------------ ip_score( object = list( "naive" = model_naive, "causal" = model_causal ), data = df_val, outcome = Y, treatment_formula = A ~ L, treatment_of_interest = 1, null_model = FALSE, quiet = TRUE )