Engression-based distributional difference-in-differences.
endid combines the panel transformations from Lee and Wooldridge (2025) with engression distributional regression. The output includes:
- ATT — Average Treatment Effect on the Treated
- QTE — Quantile Treatment Effects across the outcome distribution
- Counterfactual distributions via engression sampling
Both common-timing and staggered-adoption designs are supported.
Installation
# Install from GitHub
# install.packages("remotes")
remotes::install_github("xiangao/endid")Usage
Staggered adoption design
castle <- read.csv(system.file("extdata", "castle.csv", package = "endid"))
castle$gvar <- castle$effyear
castle$gvar[is.na(castle$gvar) | castle$gvar == 0] <- NA
result <- endid(
data = castle,
y = "lhomicide",
ivar = "sid",
tvar = "year",
gvar = "gvar",
rolling = "demean",
control_group = "never_treated"
)
print(result)
plot(result)Transformations
| Method | Description | Pre-periods required |
|---|---|---|
demean |
Subtract pre-treatment mean | >= 1 |
detrend |
Remove unit-specific linear trend | >= 2 |
demeanq |
Seasonal demeaning | > n_seasons |
detrendq |
Seasonal detrending | > n_seasons + 1 |
Parameters
Key arguments to endid():
-
rolling— Transformation method ("demean","detrend","demeanq","detrendq") -
control_group— For staggered:"never_treated"or"not_yet_treated" -
aggregate— For staggered:"overall","cohort", or"none" -
nboot— Number of bootstrap replications (default: 200) -
quantiles— Quantiles for QTE (default:seq(0.1, 0.9, 0.1))
Documentation & vignettes
Full documentation: https://xiangao.github.io/endid/
| Page | Description |
|---|---|
| Comparison with linear DiD | Synthetic comparison of distributional and linear DiD targets |
| Castle Doctrine example | Replication-style workflow using staggered treatment timing |
endid() |
Main estimator |
| Reference index | All documented functions on one page |