So far, we have focused on estimation for a fixed treatment assignment: assign to treatment 1 with probability 1.
We might also want to know about the gap-closing estimand
We may want to study a counterfactual where treatment is assigned with some probability between 0 and 1. The counterfactual_assignments
argument can handle this possibility.
For example, consider the gap-closing estimand if assigned to treatment 1 with each probability .75.
estimate_stochastic <- gapclosing( data = simulated_data, counterfactual_assignments = .75, outcome_formula = formula(outcome ~ confounder + category*treatment), treatment_formula = formula(treatment ~ confounder + category), category_name = "category" )
The disparity between categories A and B under that stochastic intervention (0.75 probability of treatment = 1) is estimated to be r round((estimate_stochastic$counterfactual_disparities %>% filter(category == "B - A"))$estimate,2)
, whereas under the previous deterministic intervention to assign treatment to the value 1 the disparity would be r round((estimate$counterfactual_disparities %>% filter(category == "B - A"))$estimate,2)
. This illustrates an important point: the gap-closing estimand can be different depending on the counterfactual assignment rule, as the figure below shows for counterfactuals in which treatment is assigned with probabilities ranging from 0 to 1.
counterfactual_assignments_values <- seq(0,1,.25) many_stochastic_estimates <- rep(NA, length(counterfactual_assignments_values)) for (i in 1:length(counterfactual_assignments_values)) { estimate_case <- gapclosing( data = simulated_data, counterfactual_assignments = counterfactual_assignments_values[i], outcome_formula = formula(outcome ~ confounder + category*treatment), treatment_formula = formula(treatment ~ confounder + category), category_name = "category" ) estimate_we_want <- estimate_case$change_disparities %>% filter(change_type == "proportional") %>% filter(category == "B - A") many_stochastic_estimates[i] <- estimate_we_want$estimate } data.frame(counterfactual_assignments = counterfactual_assignments_values, estimate = many_stochastic_estimates) %>% ggplot(aes(x = counterfactual_assignments, y = estimate)) + geom_hline(yintercept = c(0,1), color = "gray", linetype = "dashed") + geom_line(color = "gray") + geom_point(aes(color = factor(counterfactual_assignments == .75))) + xlab("Counterfactual Treatment Assignment Probability") + scale_y_continuous(name = "Percent of B - A Gap Closed", labels = function(x) paste0(round(100*x),"%")) + annotate(geom = "text", x = 1, y = c(0,1), label = c("No change to disparity", "Disparity completely eliminated"), color = "darkgray", size = 3, hjust = 1, vjust = 1.5) + annotate(geom = "text", x = .1, y = .3, label = "Disparities eliminated under various\nstochastic\ninterventions", color = "gray", size = 3, hjust = 0, vjust = 1) + annotate(geom = "text", x = .75, y = .3, label = "Gap-Closing Estimand\nCalculated Above", color = "blue", size = 3, vjust = -.5) + scale_color_manual(values = c("gray","blue")) + theme_bw() + theme(panel.grid = element_blank(), legend.position = "none")
Treatment may also be different (and possibly stochastic) for each unit in the counterfactual world of interest.
For example, suppose we assign those in Category A to treatment 1 with probability .5, those in Category B to treatment with probability .4, and those in Category C to treatment with probability .3. In this case, counterfactual_assignments
will be set to a vector of length nrow(data)
.
our_assignments <- case_when(simulated_data$category == "A" ~ .5, simulated_data$category == "B" ~ .4, simulated_data$category == "C" ~ .3) estimate_stochastic <- gapclosing( data = simulated_data, counterfactual_assignments = our_assignments, outcome_formula = formula(outcome ~ confounder + category*treatment), treatment_formula = formula(treatment ~ confounder + category), category_name = "category" )
That intervention would close the B - A gap by r paste0(round(100 * (estimate_stochastic$change_disparities %>% filter(category == "B - A" & change_type == "proportional"))$estimate),"%")
.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.