User Defined ITR

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:

Argument Description
user_itr a function defined by users that returns a unit-level continuous score for treatment assignment (we assume those that have score less than 0 should not have treatment)
data a data frame
treatment a character string specifying the treatment variable in the data
outcome a character string specifying the outcome variable in the data
budget a numeric value specifying the maximum percentage of population that can be treated under the budget constraint

The function returns an object that contains the estimated GATE, ATE, and AUPEC for the user defined ITR.

# user's own ITR
score_function <- function(data){

  data %>% 
    mutate(score = case_when(
      school_urban == 1 ~ 0.1, # inner-city
      school_urban == 2 ~ 0.2, # suburban
      school_urban == 3 ~ 0.4, # rural
      school_urban == 4 ~ 0.3, # urban
    )) %>%
    pull(score) -> score
    
  return(score)
}

# evalutate ITR
user_itr <- evaluate_itr(
  user_itr = score_function,
  data = star_data,
  treatment = treatment,
  outcome = outcomes,
  budget = 0.2)

# summarize estimates
summary(user_itr)
#> -- PAPE ------------------------------------------------------------------------
#>   estimate std.deviation algorithm statistic p.value
#> 1        0             0  user_itr       NaN     NaN
#> 
#> -- PAPEp -----------------------------------------------------------------------
#>   estimate std.deviation algorithm statistic p.value
#> 1      1.1          0.67  user_itr       1.6    0.11
#> 
#> -- PAPDp -----------------------------------------------------------------------
#> Cannot compute PAPDp
#> 
#> -- AUPEC -----------------------------------------------------------------------
#>   estimate std.deviation statistic p.value
#> 1    -0.91          0.42      -2.2   0.028
#> 
#> -- GATE ------------------------------------------------------------------------
#>   estimate std.deviation algorithm group statistic p.value  upper lower
#> 1      126            58  user_itr     1      2.16   0.031   30.2   222
#> 2       96            59  user_itr     2      1.62   0.105   -1.4   194
#> 3      -33            59  user_itr     3     -0.56   0.579 -129.7    64
#> 4     -139            59  user_itr     4     -2.36   0.018 -236.5   -42
#> 5      -32            59  user_itr     5     -0.54   0.589 -129.4    65

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. We can also plot the estimates using the plot_estimate() function and specify the type of estimates to be plotted (GATE, PAPE, PAPEp, PAPDp).

# plot GATE estimates
library(ggplot2)
gate_est <- summary(user_itr)$GATE

plot_estimate(gate_est, type = "GATE") +
  scale_color_manual(values = c("#0072B2", "#D55E00"))

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)