Commit ec2c57e
Sun-Abraham cluster-robust sandwich SE + ggdid() aggte visualiser
Continue the csdid / differences parity effort by reimplementing the two
remaining high-impact pieces from their respective papers.
1. Rewrite `sun_abraham()` inference layer (src/statspai/did/sun_abraham.py)
* Saturated cohort × event-time design estimated with proper two-way
within transformation (iterative unit/time demeaning, correct on
unbalanced panels).
* Liang-Zeger cluster-robust sandwich covariance with small-sample
(G/(G-1)) · (N-1)/(N-k) adjustment, defaulting to clustering on the
unit id; accepts arbitrary `cluster=` column.
* IW aggregation SEs via the delta method w' V_β w on the interaction
block — replaces the earlier ad-hoc sqrt(sigma² / (total·T))
approximation.
* Optional `control_group='lastcohort'` reference per SA 2021 Sec 6.
* `model_info` now reports `se_type`, `n_clusters`, and `n_coeffs`
for downstream reporting / outreg2.
2. Add `ggdid()` (src/statspai/did/plots.py) mirroring R did::ggdid
* Dispatches on `result.model_info['aggregation']` produced by
`aggte()`; renders each of simple / dynamic / group / calendar
with its natural layout (point, event-study line, horizontal
bars, calendar line).
* Overlays the Mammen multiplier-bootstrap uniform confidence band
on top of the pointwise CI using the `cband_lower` / `cband_upper`
columns supplied by aggte.
* Exported via `statspai.did.ggdid`.
3. Test suite
* tests/test_aggte.py: extended with `test_ggdid_all_aggregation_types`
(smoke-renders all four aggregation types under the Agg backend and
verifies the uniform-band legend entry).
* Full DiD suite now 61/61 green (47 pre-existing + 13 aggte + 1 ggdid).
References
Sun, L. and Abraham, S. (2021). "Estimating Dynamic Treatment Effects
in Event Studies with Heterogeneous Treatment Effects." JoE 225(2),
175-199. Inference follows eq. (18) / Sec. 5.
Liang, K.-Y. and Zeger, S.L. (1986). "Longitudinal Data Analysis
Using Generalized Linear Models." Biometrika 73(1), 13-22.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>1 parent d21faff commit ec2c57e
4 files changed
Lines changed: 405 additions & 139 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
54 | 54 | | |
55 | 55 | | |
56 | 56 | | |
| 57 | + | |
57 | 58 | | |
58 | 59 | | |
59 | 60 | | |
| |||
332 | 333 | | |
333 | 334 | | |
334 | 335 | | |
| 336 | + | |
335 | 337 | | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1210 | 1210 | | |
1211 | 1211 | | |
1212 | 1212 | | |
| 1213 | + | |
| 1214 | + | |
| 1215 | + | |
| 1216 | + | |
| 1217 | + | |
| 1218 | + | |
| 1219 | + | |
| 1220 | + | |
| 1221 | + | |
| 1222 | + | |
| 1223 | + | |
| 1224 | + | |
| 1225 | + | |
| 1226 | + | |
| 1227 | + | |
| 1228 | + | |
| 1229 | + | |
| 1230 | + | |
| 1231 | + | |
| 1232 | + | |
| 1233 | + | |
| 1234 | + | |
| 1235 | + | |
| 1236 | + | |
| 1237 | + | |
| 1238 | + | |
| 1239 | + | |
| 1240 | + | |
| 1241 | + | |
| 1242 | + | |
| 1243 | + | |
| 1244 | + | |
| 1245 | + | |
| 1246 | + | |
| 1247 | + | |
| 1248 | + | |
| 1249 | + | |
| 1250 | + | |
| 1251 | + | |
| 1252 | + | |
| 1253 | + | |
| 1254 | + | |
| 1255 | + | |
| 1256 | + | |
| 1257 | + | |
| 1258 | + | |
| 1259 | + | |
| 1260 | + | |
| 1261 | + | |
| 1262 | + | |
| 1263 | + | |
| 1264 | + | |
| 1265 | + | |
| 1266 | + | |
| 1267 | + | |
| 1268 | + | |
| 1269 | + | |
| 1270 | + | |
| 1271 | + | |
| 1272 | + | |
| 1273 | + | |
| 1274 | + | |
| 1275 | + | |
| 1276 | + | |
| 1277 | + | |
| 1278 | + | |
| 1279 | + | |
| 1280 | + | |
| 1281 | + | |
| 1282 | + | |
| 1283 | + | |
| 1284 | + | |
| 1285 | + | |
| 1286 | + | |
| 1287 | + | |
| 1288 | + | |
| 1289 | + | |
| 1290 | + | |
| 1291 | + | |
| 1292 | + | |
| 1293 | + | |
| 1294 | + | |
| 1295 | + | |
| 1296 | + | |
| 1297 | + | |
| 1298 | + | |
| 1299 | + | |
| 1300 | + | |
| 1301 | + | |
| 1302 | + | |
| 1303 | + | |
| 1304 | + | |
| 1305 | + | |
| 1306 | + | |
| 1307 | + | |
| 1308 | + | |
| 1309 | + | |
| 1310 | + | |
| 1311 | + | |
| 1312 | + | |
| 1313 | + | |
| 1314 | + | |
| 1315 | + | |
| 1316 | + | |
| 1317 | + | |
| 1318 | + | |
| 1319 | + | |
| 1320 | + | |
| 1321 | + | |
| 1322 | + | |
| 1323 | + | |
| 1324 | + | |
| 1325 | + | |
| 1326 | + | |
| 1327 | + | |
| 1328 | + | |
| 1329 | + | |
| 1330 | + | |
| 1331 | + | |
| 1332 | + | |
| 1333 | + | |
| 1334 | + | |
| 1335 | + | |
| 1336 | + | |
| 1337 | + | |
| 1338 | + | |
| 1339 | + | |
| 1340 | + | |
| 1341 | + | |
| 1342 | + | |
| 1343 | + | |
| 1344 | + | |
| 1345 | + | |
| 1346 | + | |
| 1347 | + | |
| 1348 | + | |
| 1349 | + | |
| 1350 | + | |
| 1351 | + | |
| 1352 | + | |
| 1353 | + | |
| 1354 | + | |
| 1355 | + | |
| 1356 | + | |
| 1357 | + | |
| 1358 | + | |
| 1359 | + | |
| 1360 | + | |
| 1361 | + | |
| 1362 | + | |
| 1363 | + | |
| 1364 | + | |
| 1365 | + | |
| 1366 | + | |
| 1367 | + | |
| 1368 | + | |
| 1369 | + | |
| 1370 | + | |
| 1371 | + | |
0 commit comments