Robustness & Alternative Explanations (jpe-robustness)
When to trigger
- The headline result is one regression with one set of choices
- You have not ruled out the obvious competing economic explanations
- A structural result has not been shown to survive perturbing key assumptions
- You suspect a referee will say "this is fragile" or "this is mechanism A, not your mechanism B"
The JPE logic of robustness
At JPE, robustness is not a ritual table of "still significant." It is an argument that the economic interpretation survives, and that rival mechanisms are ruled out. A Chicago referee thinks adversarially: which alternative economic story produces the same coefficient, and how do you exclude it? Over-reliance on a single specification is an explicit anti-pattern. And because a conditional accept triggers the JPE Data Editor rerunning your code against the JPE Dataverse deposit (JPE endorses DCAS; see jpe-replication-package), every robustness number must come from code that actually executes and reproduces — fragility you papered over will surface in verification. Distinguish three jobs:
- Specification robustness — the number is not an artifact of arbitrary choices.
- Mechanism discrimination — your channel, not a competing one, drives it.
- External / structural validity — the result generalizes / the model's conclusions are not knife-edge.
What to run
Specification robustness
- Vary controls (parsimonious → saturated); show coefficient stability and use Oster (2019) δ / bounds for selection on unobservables.
- Alternative functional forms, sample windows, and exclusion of influential subsamples.
- Alternative standard-error structures (clustering level, wild bootstrap with few clusters).
- Inference robustness: randomization inference or permutation tests where design allows.
Mechanism discrimination (the JPE-distinctive part)
- Name the 2–3 alternative economic mechanisms that could generate the same reduced-form sign.
- For each, design a test that the alternatives fail and your mechanism passes (heterogeneity that only your channel predicts, an auxiliary outcome, a dose-response the rival cannot explain).
- Triangulate: a second data source, a second identification strategy, or a structural-vs-reduced-form cross-check.
Structural papers
- Sensitivity of estimates and counterfactuals to identifying assumptions and to fixed/calibrated parameters.
- Untargeted-moment fit; over-identification evidence.
- Alternative model specifications that nest or rival the baseline.
Execution bridge (StatsPAI / Stata MCP)
Run the battery, don't just enumerate it. Full map:
execution-with-mcp. JPE is top-5 general-interest economics; a credible design is the entry ticket — modern DiD/IV/RDD and the magnitude for a broad readership.
- Many outcomes / specifications:
romano_wolf (step-down FWER) or benjamini_hochberg.
- OVB sensitivity:
oster_delta / sensemakr.
- Inference:
wild_cluster_bootstrap (few clusters), twoway_cluster / conley.
- Re-fit off one handle:
audit_result(result_id) lists missing checks + the exact
suggest_function for each.
- Exhibits:
etable / did_summary_to_latex from the handle — no retyped numbers.
Decisive checks in the body, exhaustive battery in the appendix.
JF execution walkthrough.
Checklist
Anti-patterns
- A wall of "still significant" tables that never address why the effect is your mechanism
- Treating robustness as cosmetic while the headline rival explanation goes untested
- Reporting only specifications that work; hiding the fragile ones (a referee will ask, and the JPE Data Editor reruns the code)
- Selection-on-unobservables waved away with "we control for X" and no bound
- Structural counterfactuals presented as point predictions with no sensitivity analysis
- Burying so many checks in the main text that the economic story is lost (use the online appendix)
Output format
【Headline result】coefficient + interpretation
【Spec robustness】[controls, windows, SEs, Oster δ, ...]
【Rival mechanisms】1... 2... — test that discriminates each
【Triangulation】second source / design / structural cross-check
【Structural sensitivity】(if applicable)
【Residual fragility】honest statement of what is not bulletproof
【Next】jpe-tables-figures
Source: brycewang-stanford/Awesome-Journal-Skills → Journal-of-Political-Economy-Skills/skills/jpe-robustness/SKILL.md
1---2name: jpe-robustness3description: Use when the main result of a Journal of Political Economy (JPE) manuscript rests on a single specification and you need to pre-empt the alternative-explanation and fragility objections a Chicago referee will raise. Builds the robustness battery and the falsification logic; it does not establish the primary identification (see jpe-identification).4---567# Robustness & Alternative Explanations (jpe-robustness)89## When to trigger1011- The headline result is one regression with one set of choices12- You have not ruled out the obvious competing economic explanations13- A structural result has not been shown to survive perturbing key assumptions14- You suspect a referee will say "this is fragile" or "this is mechanism A, not your mechanism B"1516## The JPE logic of robustness1718At JPE, robustness is not a ritual table of "still significant." It is an argument that **the economic interpretation survives**, and that rival mechanisms are ruled out. A Chicago referee thinks adversarially: which alternative economic story produces the same coefficient, and how do you exclude it? Over-reliance on a single specification is an explicit anti-pattern. And because a conditional accept triggers the **JPE Data Editor** rerunning your code against the **JPE Dataverse** deposit (JPE endorses DCAS; see `jpe-replication-package`), every robustness number must come from code that actually executes and reproduces — fragility you papered over will surface in verification. Distinguish three jobs:19201. **Specification robustness** — the number is not an artifact of arbitrary choices.212. **Mechanism discrimination** — your channel, not a competing one, drives it.223. **External / structural validity** — the result generalizes / the model's conclusions are not knife-edge.2324## What to run2526### Specification robustness27- Vary controls (parsimonious → saturated); show coefficient stability and use Oster (2019) δ / bounds for selection on unobservables.28- Alternative functional forms, sample windows, and exclusion of influential subsamples.29- Alternative standard-error structures (clustering level, wild bootstrap with few clusters).30- Inference robustness: randomization inference or permutation tests where design allows.3132### Mechanism discrimination (the JPE-distinctive part)33- Name the 2–3 alternative economic mechanisms that could generate the same reduced-form sign.34- For each, design a test that the alternatives fail and your mechanism passes (heterogeneity that only your channel predicts, an auxiliary outcome, a dose-response the rival cannot explain).35- Triangulate: a second data source, a second identification strategy, or a structural-vs-reduced-form cross-check.3637### Structural papers38- Sensitivity of estimates and counterfactuals to identifying assumptions and to fixed/calibrated parameters.39- Untargeted-moment fit; over-identification evidence.40- Alternative model specifications that nest or rival the baseline.4142## Execution bridge (StatsPAI / Stata MCP)4344Run the battery, don't just enumerate it. Full map:45[`execution-with-mcp`](../../../shared-resources/empirical-methods/execution-with-mcp.md). JPE is top-5 general-interest economics; a credible design is the entry ticket — modern DiD/IV/RDD and the magnitude for a broad readership.4647- **Many outcomes / specifications:** `romano_wolf` (step-down FWER) or `benjamini_hochberg`.48- **OVB sensitivity:** `oster_delta` / `sensemakr`.49- **Inference:** `wild_cluster_bootstrap` (few clusters), `twoway_cluster` / `conley`.50- **Re-fit off one handle:** `audit_result(result_id)` lists missing checks + the exact51 `suggest_function` for each.52- **Exhibits:** `etable` / `did_summary_to_latex` from the handle — no retyped numbers.5354Decisive checks in the body, exhaustive battery in the appendix.55[JF execution walkthrough](../../../Journal-of-Finance-Skills/resources/worked-examples/02-execution-walkthrough.md).56## Checklist5758- [ ] Coefficient stability across control sets shown; Oster-style selection bound reported59- [ ] Sample-window / outlier / subsample sensitivity reported60- [ ] Inference robust to clustering choice / few clusters61- [ ] The 2–3 rival economic mechanisms are named and tested against62- [ ] At least one triangulation (second data source, design, or structural cross-check)63- [ ] Structural results shown not to be knife-edge in key assumptions64- [ ] Robustness lives in the paper's appendix/online appendix, with main text stating the punchline6566## Anti-patterns6768- A wall of "still significant" tables that never address *why* the effect is your mechanism69- Treating robustness as cosmetic while the headline rival explanation goes untested70- Reporting only specifications that work; hiding the fragile ones (a referee will ask, and the JPE Data Editor reruns the code)71- Selection-on-unobservables waved away with "we control for X" and no bound72- Structural counterfactuals presented as point predictions with no sensitivity analysis73- Burying so many checks in the main text that the economic story is lost (use the online appendix)7475## Output format7677```78【Headline result】coefficient + interpretation79【Spec robustness】[controls, windows, SEs, Oster δ, ...]80【Rival mechanisms】1... 2... — test that discriminates each81【Triangulation】second source / design / structural cross-check82【Structural sensitivity】(if applicable)83【Residual fragility】honest statement of what is not bulletproof84【Next】jpe-tables-figures85```8687---8889**Source:** [`brycewang-stanford/Awesome-Journal-Skills`](https://github.com/brycewang-stanford/Awesome-Journal-Skills) → `Journal-of-Political-Economy-Skills/skills/jpe-robustness/SKILL.md`