I'm running comparisons of different counterfactual modeling methodologies (exact matching, propensity score matching, regression, etc.) on simulated data in order to see which methods produce the most precise estimates of the "true" population treatment effects.
This works great for the Average Treatment Effect (ATE) - you can directly compute the expected ATE from the data generating process in the following R code:
### Simulation data from "Targeted Maximum Likelihood Estimation for Causal Inference in ### ### Observational Studies", Schuler & Rose, 2016 ### x1 <- rbinom(n=10000, size=1, prob=0.55) x2 <- rbinom(n=10000, size=1, prob=0.3) # x3 <- rbinom(n=10000, size=1, prob=0.1) # Binary treatment variable A <- rbinom(n=10000, size=1, prob=exp(-.5 + .75*x1 + x2)/(1 + exp(-.5 + .75*x1 + x2))) # Continuous confounder variable Z <- rnorm(n=10000, mean=100, sd=10) # Outcome variable Y <- rnorm(n=10000, mean=24 - 3*A + 3*x1 - 4*x2 + 7*x1*x2 + 5*A*x1 - 10*A*x2 + 15*A*x1*x2, sd=4.5) # Expected ATE for Y = E(Y|A=1) - E(Y|A=0) # = .45*.70*(-3) + .55*.70*(-3 + 5) + .45*.30*(-3 - 10) + .55*.30*(-3 + 5 - 10 + 15) # = -0.775
However, many techniques find the Average Treatment Effect on the Treated (ATT), not the ATE. How would you find the expected ATT using the same data generating process formulas in the above example?