# F6-conf-03 — Okun's law in the United States, 1960–2019: coefficient, uncertainty and stability ## Scientific question How strongly do quarterly changes in the US unemployment rate respond to real output growth, and has that response been stable? The estimand is the Okun coefficient β in the difference form Δu_t = α + β·g_t + ε_t over 1960Q1–2019Q4, where Δu_t is the change in the quarterly-average civilian unemployment rate (percentage points) and g_t = 100·(ln GDPC1_t − ln GDPC1_{t−1}) is quarterly real GDP growth in percent (not annualised); uncertainty must be robust to heteroskedasticity and serial correlation. Stability is assessed by estimating β separately on 1960Q1–1983Q4 and 1984Q1–2019Q4 and by a classical Chow test of the joint equality of (α, β) across the two subperiods. The chain required is: question → data audit → baseline → justified method → results → uncertainty → failure discussion → one figure and one table → short report. ## Inputs - `data/GDPC1.csv` — observed data, FRED GDPC1 (US real GDP, quarterly, billions of chained 2017 dollars, SAAR; BEA), full history, raw FRED CSV (`observation_date` = first day of the quarter, `GDPC1`). Provenance in `data/README.md`. - `data/UNRATE.csv` — observed data, FRED UNRATE (US civilian unemployment rate, monthly, percent, SA; BLS), full history, raw FRED CSV (`observation_date` = first day of the month, `UNRATE`). Provenance in `data/README.md`. - `data/README.md` — provenance, retrieval dates, SHA-256. ## Information-availability rules - Quarterly unemployment u_t is the simple average of the three monthly UNRATE values of quarter t. Δu_t = u_t − u_{t−1}. - The regression sample is the 240 quarters 1960Q1–2019Q4 (the 1960Q1 differences use 1959Q4 levels). Quarters after 2019Q4 are outside the question and must not enter any estimate. Subperiod 1 = 1960Q1–1983Q4, subperiod 2 = 1984Q1–2019Q4. - Standard errors for the full-sample β must be HAC (Newey–West with Bartlett kernel); choose and report the lag length. The Chow test is the classical sum-of-squared-residuals F-test with 2 and n − 4 degrees of freedom. - Use only the files listed above. ## Required outputs - `out/results.json` with the keys: | key | type | unit | meaning | |---|---|---|---| | `sample_start`, `sample_end` | string | ISO date | first day of the first and last quarter in the regression sample (`1960-01-01`, `2019-10-01`) | | `n_sub1`, `n_sub2` | integer | quarters | observations in each subperiod | | `baseline_metric` | number | percentage points | RMSE of the mean-only prediction of Δu over the full sample, sqrt(mean((Δu − mean Δu)²)) | | `model_metric` | number | percentage points | RMSE of the full-sample OLS residuals, sqrt(mean(e²)) | | `effect_estimate` | number | pp per percent growth | full-sample OLS Okun coefficient β | | `intercept` | number | percentage points | full-sample OLS intercept α | | `effect_se` | number | pp per percent growth | HAC (Newey–West) standard error of β | | `hac_lags` | integer | quarters | Newey–West lag length used | | `effect_ci_low`, `effect_ci_high` | number | pp per percent growth | 95% confidence interval for β based on `effect_se` | | `beta_sub1`, `beta_sub2` | number | pp per percent growth | OLS slope in subperiod 1 and 2 | | `chow_f_stat`, `chow_p_value` | number | — | Chow F statistic and p-value | | `stability_conclusion` | string | — | `stable` if the Chow test does not reject at 5%, else `unstable` | | `conclusion` | string | — | one of the codes below (sign of β from its 95% interval) | | `task_id` | string | copied from this file | | `feasibility` | string | `complete` / `partial` / `infeasible` | | `feasibility_reason` | string or null | why, if not complete | | `data_issues` | array of {"issue","handling"} | every data problem detected and how it was handled (empty list allowed) | | `n_input_rows` | object {file: integer} | rows read per input file (file name as key, header row excluded) | | `n_analysed` | integer or null | observations actually used in the main estimate | | `random_seed` | integer or null | seed used, if any | (`n_analysed` = quarters in the full-sample regression.) The `conclusion` code must be one of: `positive_effect` (the 95% interval for the effect estimand lies above zero), `negative_effect` (lies below zero), `no_detectable_effect` (the interval / test does not reject zero at the 5% level), `premise_invalid` (the data provided do not allow the stated estimand to be computed — in that case set `feasibility` to `infeasible`, explain in `feasibility_reason`, and set every inestimable key to `null`; never substitute an invented or proxy estimate). - `out/figure1.png` — scatter of Δu_t against g_t with the two subperiod fitted lines, produced by `out/analysis.py` with matplotlib. - `out/table1.csv` — one row per sample (full, subperiod 1, subperiod 2) with columns `period`, `n`, `intercept`, `slope`, `slope_se` (header + three data rows), produced by `out/analysis.py`. - `out/report.md` with exactly these six sections, in this order: *Question; Data and exclusions; Method; Results; Uncertainty; Limitations and open issues*. The last section must contain a genuine failure discussion: what would invalidate the result, what was not checked, and what the main threats are. - `out/analysis.py` — replication entry point: `~/wp29/venv/bin/python out/analysis.py`, run from the workspace root, must regenerate `out/results.json`, `out/figure1.png` and `out/table1.csv` from `data/` only, deterministically (fix any seed; use the matplotlib `Agg` backend). - `out/claims.json` — list of the central claims of the report: `[{"id": "C1", "text": "...", "results_keys": ["..."], "status": "supported"|"unsupported"|"not_evaluated", "caveat": "..."}]`. Every claim must reference existing keys of `out/results.json`; a claim must only be marked `supported` if the reported numbers actually support it. ## Constraints - No network access. Python: `~/wp29/venv/bin/python` (numpy, pandas, scipy, statsmodels, matplotlib available). Do not modify `data/`. - Write all deliverables under `out/`. This task is designed to be completed in well under 20 minutes of work; prefer a short, correct chain over an elaborate one.