import sys
from pathlib import Path
ROOT = next(
p for p in [Path.cwd(), *Path.cwd().parents]
if (p / "scripts/tranche50_report.py").exists()
)
sys.path.insert(0, str(ROOT / "scripts"))
from tranche50_report import reportE-governance, Accountability, and Leakage in Public Programs: Experimental Evidence from a Financial Management Reform in India
Abhijit Banerjee; Esther Duflo; Clement Imbert; Santhosh Mathew; Rohini Pande (2020) · American Economic Journal: Applied Economics
report("aeraej-97")Abhijit Banerjee; Esther Duflo; Clement Imbert; Santhosh Mathew; Rohini Pande (2020). American Economic Journal: Applied Economics. Table 8.
Source specification
| Source coefficient | Template on source sample | Source N | Template source-sample N |
|---|---|---|---|
| -770.42 | -770.42 | 4253 | 4253 |
Source-to-template coefficient difference: 2.58e-11, in original outcome units.
| Role | Column |
|---|---|
| Outcome | ExpLabour |
| Treatment | EFMS_Labour |
| Unit | DistrictId |
| Time | Year |
| Cluster | DistrictId |
No additional covariates beyond fixed effects.
Estimates below divide the outcome by its source-sample standard deviation, 5035.01. Static TWFE is the treatment coefficient. Dynamic TWFE, BJS and Sun–Abraham average supported post-treatment cells by observation count. CS-DID additionally reports an equal-event-time average.
Analysis sample and treatment timing
| Observations | Units | Treated | Control units | Cohorts | Clusters |
|---|---|---|---|---|---|
| 2478 | 413 | 412 | 1 | 2 | 413 |
| Sample restriction | Count |
|---|---|
| unsupported prediction rows removed | 1397 |
| additional rows removed | 1775 |
Adoption is the first observed treated period. Initially treated units and units without an observed minus-one baseline are excluded. Post-adoption untreated rows are excluded for switching policies. The plot shows at most 100 seeded-sample units; estimation uses the full eligible sample. Empty cells remain missing.
y__d: 100 of 413 units shown (seed 20261008). All eligible units enter estimation. Purple: untreated; yellow: treated; white: unobserved.
Estimates
| Estimator | Estimate (SD) | SE | 95% lower | 95% upper | Target | Status |
|---|---|---|---|---|---|---|
| Static TWFE | -0.27751 | 0.0606 | -0.39663 | -0.15838 | Coefficient | estimated |
| Dynamic TWFE | -1.5226 | 0.049459 | -1.6199 | -1.4254 | Treated cells | estimated |
| BJS / did2s | -2.0823 | 0.046848 | -2.1743 | -1.9902 | Treated cells | estimated |
| Sun–Abraham | -1.2853 | 0.016872 | -1.3185 | -1.2522 | Treated cells | estimated |
| CS-DID (equal event-time) | nan | nan | nan | nan | Equal post-event times | failed |
| SDID | -3.1881 | nan | nan | nan | Treated cells | estimated |
| Matrix completion | -2.0272 | nan | nan | nan | Treated cells | estimated |
| Horizontal ridge | -0.12062 | nan | nan | nan | Treated cells | estimated |
| Multisynth (cohort-averaged) | nan | nan | nan | nan | Treated cells | failed |
| Multisynth (individual) | nan | nan | nan | nan | Treated cells | failed |
Intervals use the configured clusters and the estimator’s available inference. Hollow points have no computed interval; no new refit-bootstrap batch is run.
| Estimator | Reason |
|---|---|
| CS-DID (equal event-time) | ValueError: Missing values at att_gt found. If you want to remove these, set na_rm = True. |
| Multisynth (cohort-averaged) | RuntimeError: multisynth-cohort failed; see multisynth-cohort.log |
| Multisynth (individual) | RuntimeError: multisynth-individual failed; see multisynth-individual.log |
Event studies
Cohort homogeneity
The imported TestingInEventStudies deviations design tests positive-event-time cohort deviations jointly. This is the homoskedastic nested-model F-test; the estimator confidence intervals above use clustered inference.
**y__d: homogeneity test not identified.** No post-treatment cohort deviations to test.
Fitting settings and checks
| Specification | Estimator | Settings | Pooling |
|---|---|---|---|
| y__d | CS-DID | {} | {} |
| y__d | SDID | {} | {“parameter”: null, “value”: null, “status”: “not_applicable”, “fit_scope”: “Separate adoption-cohort fits”, “within_cohort_target”: “Mean treated outcome history”, “cross_cohort_partial_pooling”: false, “shared_structure”: null, “note”: “Regularization penalties are not partial-pooling parameters.”} |
| y__d | Matrix completion | {“lambda_fraction”: 0.25, “max_iterations”: 1000, “tolerance”: 1e-12} | {“parameter”: null, “value”: null, “status”: “not_applicable”, “fit_scope”: “Joint untreated-cell fit”, “within_cohort_target”: null, “cross_cohort_partial_pooling”: false, “shared_structure”: “Low-rank matrix and unit/time effects”, “note”: “Regularization penalties are not partial-pooling parameters.”} |
| y__d | Horizontal ridge | {“penalty”: 1.0} | {“parameter”: null, “value”: null, “status”: “not_applicable”, “fit_scope”: “Separate adoption-cohort fits”, “within_cohort_target”: “Mean treated outcome history”, “cross_cohort_partial_pooling”: false, “shared_structure”: null, “note”: “Regularization penalties are not partial-pooling parameters.”} |
| y__d | Multisynth (cohort-averaged) | {} | {} |
| y__d | Multisynth (individual) | {} | {} |
{
"did2s_vs_direct_imputation_max_post_difference": 8.881784197001252e-16,
"package_aggregate_vs_estimable_cell_weights": 0.0
}