Skip to content

docs: add rdplot paper review (CCT 2015 JASA)#694

Merged
igerber merged 1 commit into
mainfrom
rdd-rdplot-review
Jul 18, 2026
Merged

docs: add rdplot paper review (CCT 2015 JASA)#694
igerber merged 1 commit into
mainfrom
rdd-rdplot-review

Conversation

@igerber

@igerber igerber commented Jul 18, 2026

Copy link
Copy Markdown
Owner

Summary

  • PR-A of the rdplot diagnostic arc (2-PR methodology structure, docs: add RDD paper reviews (CCT 2014, CCFT 2017, CCF 2018, CCFT 2019) #675 precedent): methodology review of Calonico, Cattaneo & Titiunik (2015), "Optimal Data-Driven Regression Discontinuity Plots," JASA 110(512):1753-1769, plus its supplemental appendix.
  • Covers the ES/QS partition schemes, Theorem 1-2 variance/bias constants, all number-of-bins selectors (IMSE-optimal / weighted-IMSE / mimicking-variance, Equations 1-6) including the implied-weights inverse map (Supplement S.1), the spacings and series data-driven implementations (Equations 7-26; Supplement SA-1..SA-20; Lemma SA3), edge cases (empty ES bins, noncontinuous outcomes, fuzzy first stage, covariates), and digit-exact smoke targets for the Lee House, U.S. Senate, Progresa, and Head Start applications (the Senate figures anchor to the already-vendored golden dataset).
  • Lists the new review in the RD "Paper reviews on file" index in REGISTRY.md.
  • Implementation (rdplot port + golden parity + docs wiring) is the follow-up PR-B.

Methodology references (required if estimator / math changes)

  • Method name(s): RD plot bin-count selectors (rdplot precursor) — documentation only, no estimator code changed
  • Paper / source link(s): Calonico, S., Cattaneo, M. D., & Titiunik, R. (2015). Optimal Data-Driven Regression Discontinuity Plots. JASA, 110(512), 1753-1769. https://doi.org/10.1080/01621459.2015.1017578 (+ Supplemental Appendix)
  • Any intentional deviations from the source (and why): None — the review transcribes the paper; source ambiguities are recorded in the file's "Gaps and Uncertainties" section (duplicate published equation label "(14)" on p. 1763, a supplement SA-2 subscript typo, and the two consistent forms of the ES bias estimator).

Validation

  • Tests added/updated: No test changes (docs-only)
  • Backtest / simulation / notebook evidence (if applicable): N/A

Security / privacy

  • Confirm no secrets/PII in this PR: Yes

🤖 Generated with Claude Code

https://claude.ai/code/session_01VwhFMnFQGBumYfwbeQaUjm

PR-A of the rdplot diagnostic arc (2-PR methodology structure). Adds the
methodology review of Calonico, Cattaneo & Titiunik (2015), "Optimal
Data-Driven Regression Discontinuity Plots" (JASA 110(512):1753-1769) and
its supplemental appendix: ES/QS partition schemes, Theorem 1-2
variance/bias constants, all IMSE-optimal / WIMSE / mimicking-variance
bin selectors (Eq 1-6) with the implied-weights inverse map (Supplement
S.1), the spacings and series data-driven implementations (Eq 7-26,
Supplement SA-1..SA-20, Lemma SA3), edge cases, and transcribed smoke
targets for the Lee House, Senate, Progresa, and Head Start applications.
Also lists the new review in the RD "Paper reviews on file" REGISTRY
index. Implementation (rdplot port + parity + docs wiring) is the
follow-up PR-B.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VwhFMnFQGBumYfwbeQaUjm
@github-actions

Copy link
Copy Markdown

Overall Assessment: ✅ Looks good

Executive Summary

  • Docs-only PR; no estimator, weighting, variance/SE, assumptions, defaults, or runtime paths changed.
  • Affected method: planned rdplot / RD plot bin-count selectors, documented only.
  • I cross-checked the ES/QS selector formulas, spacing estimators, discrete-outcome caveat, and supplement-derived notes against the CCT 2015 paper and supplement; no undocumented methodology mismatch found. citeturn2search4turn9search0
  • Registry linkage is consistent with the existing 2017 RD software review, which already points rdplot selector formulas back to CCT 2015.
  • No P0/P1 findings.

Methodology
No findings.

Severity: P3 informational
Impact: This PR documents RDPlot as future implementation guidance, but does not copy the full entry into REGISTRY.md; it only links the review under RD “Paper reviews on file” at docs/methodology/REGISTRY.md:L3946-L3950. That is acceptable for a precursor review and not a blocker.
Concrete fix: None required. When implementation lands, copy or integrate the actionable RDPlot requirements from docs/methodology/papers/calonico-cattaneo-titiunik-2015-review.md:L14-L228 into the main registry entry.

Code Quality
No findings. The added Markdown is structured consistently with existing paper reviews.

Performance
No findings. Documentation-only change.

Maintainability
No findings. The review explicitly records ambiguities and future verification points in docs/methodology/papers/calonico-cattaneo-titiunik-2015-review.md:L262-L270, which should reduce future implementation ambiguity.

Tech Debt
No blocking findings. The unchecked requirements list in docs/methodology/papers/calonico-cattaneo-titiunik-2015-review.md:L219-L228 is future implementation scope, not deferred silent correctness debt.

Security
No findings. I did not see secrets or credential-like material in the changed docs.

Documentation/Tests
No findings. No tests are needed for a paper-review-only PR. The lack of test changes is compatible with the docs-only scope.

@igerber igerber added the ready-for-ci Triggers CI test workflows label Jul 18, 2026
@igerber
igerber merged commit 7aed8f1 into main Jul 18, 2026
14 of 15 checks passed
@igerber
igerber deleted the rdd-rdplot-review branch July 18, 2026 17:05
igerber added a commit that referenced this pull request Jul 18, 2026
…rity)

PR-B of the rdplot arc (paper review merged in #694). New RDPlot class +
RDPlotResult in diff_diff/rdplot.py, parity-targeting rdplot() in CRAN
rdrobust 4.0.0: all 8 binselect bin-count selectors (ES/QS x
IMSE-optimal/mimicking-variance x spacings/polynomial-regression),
manual nbins/scale/h/support/ci, masspoints detection with the
spacings-to-pr adjust remap, per-bin means/SEs/CIs (vars_bins, R column
names), 500-point-per-side global-fit curves (vars_poly), implied scale
+ Supplement S.1 WIMSE weights in summary(), covariate-adjusted plots
reusing the #691 partialled-gamma machinery, and an optional lazy
matplotlib RDPlotResult.plot() (matplotlib not a dependency).

Golden parity on 24 configs (benchmarks/R/generate_rdplot_golden.R ->
rdplot_golden.json) incl. the vendored Senate data; supplement Figures
SA-1/SA-2 selector outputs asserted as JSON-independent paper anchors.
R quirks replicated and REGISTRY-documented (left-edge slot reflection
under empty bins, qs+nbins label, Inf J_IMSE on zero-variance sides,
negative-sigma2 floor, k=4->3->2 raises-only fallback ladder, QS type-7
cutpoints). Documented deviations/defensive guards: fractional/pair
scale takes CCT 2015 Eq 2's ceiling (R crashes there), missing-row and
discrete-outcome warnings, zero-effective-h / single-support-point /
tiny-side clear errors, covariate-name validation shared with the
estimator. Docs sweep: REGISTRY RDPlot section, api rst, references,
llms.txt/llms-full.txt, README one-liner, doc-deps entry, CHANGELOG.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VwhFMnFQGBumYfwbeQaUjm
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ready-for-ci Triggers CI test workflows

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant