SPB Git

spb/wp29_uqo

Public

# 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.
Files · 452964ee0fbbaa40fbbed2c87a54ca798ffd6a85
Menu

Theme