You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
docs: address AI review round 1 on CiC/QDiD paper reviews
- Separate the ecic (staggered event-study CiC, Section 6 lineage) and
Ciaccio (copula-based staggered distributional DiD) threads in the
Athey-Imbens review's Section 6 deferral notes (Finding 1)
- Flag Ciaccio p. 22 IPW display's sum_{i in r} + C-indicator
inconsistency; give the implementable Hajek-normalized never-treated
form inline and as Gaps item 17 (Finding 2)
- Verify AI 2006 footnote 31 against journal p. 463: the paper itself
prints half-range (y_upper - y_lower)/2 while calling it the support
midpoint; flag as suspected typo, instruct true-midpoint split
(Finding 3)
- Verify MS 2015 Lemma 3 against p. 14: the paper prints the negative
h_2 sign (and cites G^{-1} inversion in a proof that inverts F);
flag as suspected copy-paste typo from Lemma 2 with re-derive
instruction (Finding 4)
- Update ROADMAP Ciaccio row to reviewed-deferred status so it matches
the review doc's claim (Finding 5)
- Fix inline-code backticks on the F_hat^{-1}(0) convention (Finding 6)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011hismLBFcUbUzvDRq8ruWb
Copy file name to clipboardExpand all lines: ROADMAP.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -32,7 +32,7 @@ Research-informed candidates. Each has a rationale, a tractability note, and a c
32
32
### Methodology extensions
33
33
34
34
-**Nonparametric / flexible outcome regression for `EfficientDiD` DR covariate path** (Chen, Sant'Anna & Xie, arXiv:2506.17729, 2025, Section 4). The shipped staggered `EfficientDiD` uses a linear OLS outcome regression in its doubly-robust covariate path; that preserves DR consistency but does not generically attain the semiparametric efficiency bound unless the conditional mean is linear in the covariates. Replacing the OLS outcome regression with sieve / kernel / ML nuisance estimation (as the paper's Section 4 allows) would close the efficiency gap on the covariate path. Tractability: medium; the hook points are in `diff_diff/efficient_did_covariates.py`. **Commit when**: a paper-review synthesis is written, with an implementation plan for the nonparametric OR that preserves the existing DR consistency guarantees and survey-weighted variance surface.
35
-
-**Distributional DiD for staggered timing** (Ciaccio, arXiv:2408.01208, 2024). New estimator extending Callaway-Li QTT to staggered adoption. `CallawaySantAnna` currently gives mean ATT only; this unlocks quantile effects. Tractability: medium. **Commit when**: a health-econ or public-health user reports need for quantile effects in a repeated-cross-section design.
35
+
-**Distributional DiD for staggered timing** (Ciaccio, arXiv:2408.01208, 2024). New estimator extending Callaway-Li QTT to staggered adoption. `CallawaySantAnna` currently gives mean ATT only; this unlocks quantile effects. Tractability: medium. **Reviewed 2026-07** (`docs/methodology/papers/ciaccio-2024-review.md`); implementation deferred pending demand. **Commit when**: a health-econ or public-health user reports need for quantile effects in a repeated-cross-section design.
36
36
-**Local Projections DiD** (Dube, Girardi, Jordà & Taylor, JAE 2025). New estimator with flexible impulse-response and robustness to dynamic misspecification; natural for anticipation-prone settings. Tractability: well-scoped. **Commit when**: a methodology review confirms the dynamic variant's variance derivation fits our SE helpers.
37
37
-**Few-treated-units inference option** (Alvarez, Ferman & Wüthrich, arXiv:2504.19841, 2025). `inference=` option covering t(G-1) corrections, randomization inference, and Ferman-Pinto-style permutation tests. Current SE paths assume large-G asymptotics. Tractability: medium. **Commit when**: a user reports sparse-treatment pain.
Copy file name to clipboardExpand all lines: docs/methodology/papers/athey-imbens-2006-review.md
+6-5Lines changed: 6 additions & 5 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -167,7 +167,7 @@ Equation (20) is k^CIC with the roles of groups 0 and 1 reversed; implement by e
167
167
```
168
168
169
169
p captures estimation error from F_hat_Y,00, q from F_hat_Y,01^{-1}, r sampling variation of the transformed Y_10 draws, s the Y_11 mean. Asymptotically linear representation (p. 463): `tau_hat = tau + (1/N_00) sum p(Y_00,i) + (1/N_01) sum q(Y_01,i) + (1/N_10) sum r(Y_10,i) + (1/N_11) sum s(Y_11,i) + o_p(N^{-1/2})`.
170
-
- Variance estimation (Theorem 5.2, pp. 463-464): plug in empirical CDFs/inverses and ANY uniformly consistent nonparametric density estimator (uniform consistency must include the boundary, footnote 31); `p_hat(y) = (1/N_10) sum_j P_hat(y, Y_10,j)`, `q_hat(y) = (1/N_10) sum_j Q_hat(y, Y_10,j)`, then `V_hat^p = (1/N_00) sum_i p_hat(Y_00,i)^2` (and analogously q, r, s), `alpha_hat_gt = N_gt/N`; all converge in probability to their targets. Footnote 31's concrete density estimator: one-sided difference quotient of the EDF with bandwidth `N^{-1/3}`, forward difference on the lower half of the support and backward on the upper half (split at the support midpoint `Y_tilde_gt = (y_upper_gt - y_lower_gt)/2`), guaranteeing boundary-uniform consistency:
170
+
- Variance estimation (Theorem 5.2, pp. 463-464): plug in empirical CDFs/inverses and ANY uniformly consistent nonparametric density estimator (uniform consistency must include the boundary, footnote 31); `p_hat(y) = (1/N_10) sum_j P_hat(y, Y_10,j)`, `q_hat(y) = (1/N_10) sum_j Q_hat(y, Y_10,j)`, then `V_hat^p = (1/N_00) sum_i p_hat(Y_00,i)^2` (and analogously q, r, s), `alpha_hat_gt = N_gt/N`; all converge in probability to their targets. Footnote 31's (p. 463) concrete density estimator: one-sided difference quotient of the EDF with bandwidth `N^{-1/3}`, forward difference below the split point `Y_tilde_gt`and backward above it, guaranteeing boundary-uniform consistency. As printed the footnote calls `Y_tilde_gt` "the midpoint of the support" but defines `Y_tilde_gt = (y_upper_gt - y_lower_gt)/2`, which is the half-range, not the midpoint `(y_upper_gt + y_lower_gt)/2` - see the suspected-typos block in Gaps and Uncertainties; an implementation should split at the true midpoint:
171
171
172
172
```
173
173
f_hat_Y,gt(y) = ( F_hat_Y,gt(y + N^{-1/3}) - F_hat_Y,gt(y) ) / N^{-1/3} if y <= Y_tilde_gt
Aggregation `tau_Lambda = Lambda' tau^CIC_I` (columns of Lambda sum to 1): sample-size weights `Lambda_{g,t} = N_{g,t}/sum N_{g,t}` are the natural default; variance-minimizing weights are appropriate only under constant effects (p. 475). Tests: **Theorem 6.4** overidentification/specification statistic `N (kappa_hat_J - A tau_hat_I)' V_hat_J^(-) (kappa_hat_J - A tau_hat_I) -->d Chi2(rank(V_J) - N_I)` - has power against violations of `U ⊥ T | G`, including additive random group-time effects (p. 476); equality-of-effects statistic `-->d Chi2(N_I - 1)` under `tau_{g,t} = tau` for all treated pairs (GLS-weighted pooled estimate; p. 476). diff-diff defers this section (Ciaccio / `ecic` staggered event-study CiC is the reference for the extension).
322
+
Aggregation `tau_Lambda = Lambda' tau^CIC_I` (columns of Lambda sum to 1): sample-size weights `Lambda_{g,t} = N_{g,t}/sum N_{g,t}` are the natural default; variance-minimizing weights are appropriate only under constant effects (p. 475). Tests: **Theorem 6.4** overidentification/specification statistic `N (kappa_hat_J - A tau_hat_I)' V_hat_J^(-) (kappa_hat_J - A tau_hat_I) -->d Chi2(rank(V_J) - N_I)` - has power against violations of `U ⊥ T | G`, including additive random group-time effects (p. 476); equality-of-effects statistic `-->d Chi2(N_I - 1)` under `tau_{g,t} = tau` for all treated pairs (GLS-weighted pooled estimate; p. 476). diff-diff defers this section. Two distinct follow-on threads exist and must not be conflated: the R `ecic` package (Kluser) implements a staggered event-study extension of the CiC transformation itself (the natural descendant of this Section 6 machinery), while Ciaccio's staggered distributional DiD (reviewed separately in `ciaccio-2024-review.md`) is a copula-based Callaway-Li-style QTT method with different identifying assumptions - not an implementation of Section 6.
323
323
324
324
**Reference implementation(s):**
325
325
- R: `qte::CiC()` and `qte::QDiD()` (Callaway's qte package - the project's chosen parity target; bootstrap inference, panel and repeated cross-section support)
326
326
- Stata: `cic` (Kranker) - implements the analytical SEs (Theorems 5.1-5.3) and the discrete-outcome bounds
327
-
- R: `ecic` (Kluser) - staggered event-study CiC (relevant to the deferred Section 6 extension)
327
+
- R: `ecic` (Kluser) - staggered event-study CiC, i.e. the CiC transformation applied per cohort-period (the implementation lineage closest to the deferred Section 6 extension). Not to be conflated with Ciaccio's copula-based staggered distributional DiD, which is a distinct method reviewed separately
328
328
- The paper itself points to the Econometrica supplement for the empirical application (Meyer-Viscusi-Durbin (1995) injury-duration data; headline finding: CiC vs standard DiD results can differ in both magnitude and significance, p. 477)
329
329
330
330
**Requirements checklist:**
@@ -345,7 +345,7 @@ Aggregation `tau_Lambda = Lambda' tau^CIC_I` (columns of Lambda sum to 1): sampl
- Deferred: covariates (Theorems 4.3-4.4 and the Section 5.1 residual route; Melly-Santangelo is the modern reference), discrete-outcome bounds (Section 4 identification / Section 5.2 inference, incl. Imbens-Manski intervals), analytical SEs (Theorems 5.1-5.3, 5.5-5.7; Appendix B covariances), multiple groups/periods (Section 6; Ciaccio / `ecic`).
348
+
- Deferred: covariates (Theorems 4.3-4.4 and the Section 5.1 residual route; Melly-Santangelo is the modern reference), discrete-outcome bounds (Section 4 identification / Section 5.2 inference, incl. Imbens-Manski intervals), analytical SEs (Theorems 5.1-5.3, 5.5-5.7; Appendix B covariances), multiple groups/periods (Section 6; `ecic` for the staggered event-study CiC lineage - Ciaccio's copula-based staggered distributional DiD is a distinct method, reviewed separately).
349
349
- All deferred material is reviewed in this document so the deferral is documented, not silent.
350
350
351
351
### Data Structure Requirements
@@ -388,6 +388,7 @@ Aggregation `tau_Lambda = Lambda' tau^CIC_I` (columns of Lambda sum to 1): sampl
388
388
- Theorem 5.7, second display (p. 469): the `V_upper^r` term's denominator prints as `alpha_10` where the panel notation elsewhere in the theorem uses `alpha_1`. Likely a typo; an implementation should use `alpha_1`.
389
389
- Lemma A.4 (pp. 479-480): the printed oscillation modulus reads `F_hat_Y(y+x) - F_hat_Y(x)` where the standard Stute (1982) modulus has `F_hat_Y(y+x) - F_hat_Y(y)`, matching the population term `F_Y(y+x) - F_Y(y)`. Likely a typesetting slip.
390
390
- Appendix B, case 2 (p. 493): printed with explicit argument notation `(Y_{g0,t0})` and a division by `alpha_{g0,t0}`, unlike every other case; the two readings are numerically equivalent (`N*E[mu_hat mu_hat'] = E[infl-fn product]/alpha_gt` for same-cell averages). Treat the per-shared-cell `N*E[mu_hat mu_hat']` pattern as the intended formula.
391
+
- Footnote 31 (p. 463): the split point of the one-sided density estimator is described as "the midpoint of the support" but printed as `Y_tilde_gt = (y_upper_gt - y_lower_gt)/2` - the half-range, not the midpoint `(y_upper_gt + y_lower_gt)/2` (the two coincide only when `y_lower_gt = 0`). An implementation of the deferred analytical-SE path should split at the true midpoint; the printed half-range can fall outside the support (e.g. negative-valued outcomes), which would apply the wrong one-sided difference near a boundary.
391
392
- Theorem 5.4 proof (p. 492): the final estimation-error term's summand sign is printed inconsistently with the preceding line's decomposition (`k_lower_hat - k_lower` vs `k_lower - k_lower_hat`); immaterial since the term converges to zero (Lemma A.13).
392
393
- Equality-of-effects test (p. 476): typeset ambiguity between `A` and `A_I` in the weight matrix `Lambda = (iota' A_I' V_J^(-) A iota)^{-1} iota' A' V_J^(-) A` and in the test statistic's sandwich; the structure (GLS weighting with the generalized inverse) is clear, but consult p. 476 before implementing.
(As printed the LHS carries the `p,-1` superscript although the display is the reweighted CDF of Eq. (3), i.e. a Hajek-normalized estimator; inversion then yields the quantile.) `n_{r,t}` = number of units used to compute `QTT-hat_{r,t,rho}(tau)`; `p-hat(X)` is an estimator of the generalized propensity score; the denominator normalizes weights to sum to 1 in finite samples, ensuring `F^p(.)` is a proper distribution function. The propensity score can be estimated parametrically or non-parametrically (both Firpo 2007 and Callaway-Li 2019 show this).
259
+
(Two as-printed notation issues here - see Gaps item 17. First, the LHS carries the `p,-1` superscript although the display is the reweighted CDF of Eq. (3), i.e. a Hajek-normalized estimator; inversion then yields the quantile. Second, both sums are written `sum_{i in r}` while numerator and denominator carry the never-treated dummy `C` - over literal cohort-r units every term would be zero. Read `i in r` as the (r,t) estimation subsample - cohort r plus never-treated - with `C_i` selecting the never-treated contributions. The implementable form is a Hajek-normalized CDF over never-treated units with weight `w_i = C_i * p-hat_r(x_i) / (p-hat_r * (1 - p-hat_r(x_i)))`: compute `F-hat^p(delta) = sum_i w_i * 1{DeltaY_i <= delta} / sum_i w_i`, then invert.) `n_{r,t}` = number of units used to compute `QTT-hat_{r,t,rho}(tau)`; `p-hat(X)` is an estimator of the generalized propensity score; the denominator normalizes weights to sum to 1 in finite samples, ensuring `F^p(.)` is a proper distribution function. The propensity score can be estimated parametrically or non-parametrically (both Firpo 2007 and Callaway-Li 2019 show this).
260
260
261
261
*Case C - fully conditional (Proposition 2) (p. 22):*
262
262
@@ -617,3 +617,4 @@ No smoothing parameters exist anywhere in the method.
617
617
14. **Wild/subcluster bootstrap is a pointer, not a procedure** (p. 22): the clustered-inference route is described as adapting MacKinnon-Webb (2018) "with minor modifications" with no algorithmic detail; a future implementation would have to derive the QTT adaptation itself.
618
618
15. **Extraction coverage.** This review synthesizes three extraction passes (pp. 1-20, pp. 16-35, pp. 31-44; printed page = PDF page) with overlaps on pp. 16-20 and 31-35 reconciled as documented; References (pp. 33-36) were skipped by design. Tables 2-4 numbers above are the selected values transcribed by the extraction, not full tables.
619
619
16. **No verified reference implementation** (see Reference implementation(s) above); in particular the R `ecic` package is NOT an implementation of this paper despite the overlapping "staggered distributional DiD" label.
620
+
17. **IPW display's sum index vs `C` indicator (p. 22).** The Proposition 1 estimator display prints `sum_{i in r}` in both numerator and denominator while each summand carries the never-treated dummy `C` - a literal cohort-r sum would be identically zero. The intended reading (consistent with the (A.11)-(A.14) proof chain and the `n_{r,t}` definition) is a sum over the (r,t) estimation subsample - cohort r plus never-treated - with `C_i` selecting never-treated units. Implement as a Hajek-normalized CDF over never-treated observations with weight `C_i * p_r(X_i) / (p_r * (1 - p_r(X_i)))`, then invert; do not copy the printed display literally.
Copy file name to clipboardExpand all lines: docs/methodology/papers/melly-santangelo-2015-review.md
+3Lines changed: 3 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -288,6 +288,8 @@ phi'_{F,G}(h_1, h_2) = h_1 o G^{-1} - ( f o G^{-1} / g o G^{-1} ) * h_2 o G^{-1}
288
288
phi'_{F,G}(h_1, h_2) = -( h_1 / f ) o F^{-1} o G - ( h_2 / (f o F^{-1}) ) o G
289
289
```
290
290
291
+
(as printed - the sign of the `h_2` term is suspect; see the suspected-typos block in Gaps and Uncertainties)
292
+
291
293
*Ingredient 4 - counterfactual operator (p. 15).* Lemma D.1 of Chernozhukov, Fernandez-Val, and Melly (2013): `phi^C(F, G) = INT F(y, x) dG(x)` is Hadamard-differentiable with derivative map
292
294
293
295
```
@@ -504,6 +506,7 @@ All quantiles and covariate values must be considered to detect deviations; Kolm
504
506
- eq. (8) (p. 12): both right-hand quantile functions are printed with argument `(y)` although the process is indexed by the quantile level; both sides are (generalized) inverses of the integrated CDF estimators.
505
507
- p. 8: the intuition sentence below the Proposition 1 proof swaps group labels relative to the displayed identification formula; this review transcribes consistently with the displays.
506
508
- eq. (10) (p. 13): the limit process is printed with index `(u, x)` where the display is a process in `(y, x)`, and the scaling prints `sqrt(n*alpha_gt)` where (9) uses `sqrt(n)` - transcribed as printed.
509
+
- Lemma 3 (p. 14): the derivative map for `phi^{PP}(F, G) = F^{-1} o G` prints a NEGATIVE sign on the `h_2` term, `- (h_2/(f o F^{-1})) o G`. Standard inverse-map calculus (Van der Vaart-Wellner Lemma 3.9.23(ii) plus the chain rule) gives a POSITIVE `h_2` term: the G-perturbation enters through `(F^{-1})' = 1/(f o F^{-1})` with no sign flip; only the `h_1` term (through inverting F) is negative. The printed proof also cites Hadamard differentiability of "the inverse map G^{-1}" although the PP map inverts F - both oddities are consistent with a copy-paste slip from Lemma 2 (the QQ map, whose proof genuinely inverts G). Re-derive this derivative before any analytical covariance implementation that composes these maps; the bootstrap-based inference path does not depend on it.
507
510
-`V^Q_gt` covariance (p. 13): the evaluation point of the second Jacobian is hard to resolve at print resolution; transcribed as `J_gt(u~)^{-1}`, the standard QR-process covariance form.
508
511
- p. 20 bootstrap display: typographically dense, with the same missing mesh-weight issue as the p. 12 displays; the structure is the Condition-BW-weighted empirical analog of the QQ/PP composition over the S-point u-grid.
509
512
- Sign-convention asymmetry (as printed, identically in both extraction passes): eq. (10) defines `Z^F_gt` with a leading minus (`-f * Z(F(y), x)`) while the Theorem 7 proof defines `Z^F_N` with a plus (`+f * Z^Q_N(F(y), x)`). Immaterial for the limit laws (zero-mean Gaussian processes are sign-symmetric), but confusing if the formulas are transplanted into covariance code - re-derive signs if analytical variances are ever implemented.
0 commit comments