Skip to contents

Instead of using the ITRs estimated by evalITR models, we can define our own ITR and evaluate its performance using the evaluate_itr function. The function takes the following arguments: itr_function a function defined by users that returns a vector of 0 and 1, data a data frame, treatment a character string specifying the treatment variable, outcome a character string specifying the outcome variable, budget a numeric value specifying the maximum percentage of population that can be treated under the budget constraint., and tau a numeric vector specifying the unit-level continuous score for treatment assignment. We assume those that have tau<0 should not have treatment. Conditional Average Treatment Effect is one possible measure.. The function returns an object that contains the estimated GATE, ATE, and AUPEC for the user defined ITR.

# user's own ITR
my_function <- function(data){
  itr <- (data$race == 1)*1
  return(itr)
}

# evalutate ITR
user_itr <- evaluate_itr(
  itr_function = "my_function",
  data = star_data,
  treatment = treatment,
  outcome = outcomes,
  budget = 0.2,
  tau = seq(0.1, 0.9, length.out = nrow(star_data)))

# summarize estimates
summary(user_itr)
#> ── PAPE ────────────────────────────────────────────────────────────────────────
#>   estimate std.deviation   algorithm statistic p.value
#> 1    -0.43          0.69 my_function     -0.62    0.53
#> 
#> ── PAPEp ───────────────────────────────────────────────────────────────────────
#>   estimate std.deviation   algorithm statistic p.value
#> 1     0.11          0.64 my_function      0.17    0.87
#> 
#> ── PAPDp ───────────────────────────────────────────────────────────────────────
#> data frame with 0 columns and 0 rows
#> 
#> ── AUPEC ───────────────────────────────────────────────────────────────────────
#>   estimate std.deviation statistic p.value
#> 1    -0.44          0.48     -0.92    0.36
#> 
#> ── GATE ────────────────────────────────────────────────────────────────────────
#>   estimate std.deviation   algorithm group statistic p.value upper lower
#> 1       59            59 my_function     1      0.99   0.320   -39   156
#> 2       33            59 my_function     2      0.56   0.577   -64   130
#> 3     -153            59 my_function     3     -2.61   0.009  -250   -57
#> 4      -12            59 my_function     4     -0.20   0.838  -109    85
#> 5       92            59 my_function     5      1.56   0.119    -5   189

We can extract estimates from the est object. The following code shows how to extract the GATE estimates for the writing score with the causal forest algorithm.

# plot GATE estimates
library(ggplot2)
summary(user_itr)$GATE %>%
  mutate(group = forcats::as_factor(group)) %>%
  ggplot(., aes(
    x = group, y = estimate,
    ymin = lower , ymax = upper, color = algorithm)) +
  ggdist::geom_pointinterval(
    width = 0.5,
    position = position_dodge(0.5),
    interval_size_range = c(0.8, 1.5),
    fatten_point = 2.5) +  
  theme_bw() +
  theme(panel.grid = element_blank(),
        panel.background = element_blank()) +
  labs(x = "Group", y = "GATE estimate") +
  geom_hline(yintercept = 0, linetype = "dashed", color = "#4e4e4e") +
  scale_color_manual(values = c("#0072B2", "#E69F00", "#56B4E9", "#009E73", "#076f00"))

We plot the estimated Area Under the Prescriptive Effect Curve (AUPEC) for the writing score across a range of budget constraints for user defined ITR.

# plot the AUPEC 
plot(user_itr)