Okun's law in the United States, 1960Q1–2019Q4 (task F6-conf-03)
Question
How strongly do quarterly changes in the US unemployment rate respond to quarterly real GDP growth, and is the relationship stable? Estimand: β in Δu_t = α + β·g_t + ε_t over 1960Q1–2019Q4, with u_t the quarterly average of monthly UNRATE (pp) and g_t = 100·Δln GDPC1 (%, not annualised). Stability: β estimated separately for 1960Q1–1983Q4 and 1984Q1–2019Q4, plus a classical Chow F-test of joint equality of (α, β).
Data and exclusions
data/GDPC1.csv(319 rows, 1947Q1–2026Q3) anddata/UNRATE.csv(945 rows, 1948-01 to 2026-09) (n_input_rows). SHA-256 hashes match the provenance README (seeout/state/data_audit.md).- Quarterly u_t = mean of the three months; only complete quarters kept. One UNRATE value is missing (2025-10), which is outside the window and has no effect (
data_issues). - Exclusion ledger (
out/exclusions.csv): 314 merged quarters (n_merged_quarters) → drop 26 quarters after 2019Q4 (information rule) → drop 48 quarters before 1960Q1 (they only provide lagged levels; 1959Q4 levels feed the 1960Q1 differences) → 240 quarters analysed (n_analysed), 1960-01-01 to 2019-10-01 (sample_start,sample_end); subperiods have 96 and 144 quarters (n_sub1,n_sub2). - GDPC1 is the current (2026) vintage, i.e. revised data rather than real-time data (
data_issues).
Method
- Baseline: mean-only prediction of Δu; its RMSE is
baseline_metric. - Main model: OLS of Δu_t on a constant and g_t over the full sample. Standard errors: Newey–West HAC, Bartlett kernel. The lag was set in advance by the rule floor(4·(n/100)^(2/9)), which gives 4 for n = 240 (
hac_lags), with no small-sample correction. 95% CI = β ± 1.96·SE (normal critical value). - Subperiods: the same OLS on each subperiod.
out/table1.csvreports HAC(4) slope SEs for them as well. - Chow test: F = [(SSR_pooled − SSR_1 − SSR_2)/2] / [(SSR_1 + SSR_2)/(n − 4)], compared with F(2, 236) (
chow_df). - No randomness is used (
random_seed= null).out/analysis.pyregeneratesresults.json,table1.csvandfigure1.png.
Results
- Full-sample Okun coefficient: β = −0.256 pp of unemployment per 1% of quarterly real GDP growth (
effect_estimate). Intercept α = 0.184 pp (intercept). With these estimates, unemployment stays flat at about 0.72% quarterly growth (implied_breakeven_growth_full). - Fit: residual RMSE 0.250 pp (
model_metric), against 0.325 pp for the mean-only baseline (baseline_metric); R² = 0.408 (r_squared). - Subperiod slopes: −0.259 for 1960–1983 (
beta_sub1) and −0.273 for 1984–2019 (beta_sub2). The intercepts are 0.254 (intercept_sub1) and 0.152 (intercept_sub2). - Chow test: F = 6.09 (
chow_f_stat), p = 0.0026 (chow_p_value). Joint equality of (α, β) is rejected at 5%, sostability_conclusion=unstable. - Reading: the two slopes differ by only 0.014, much less than either subperiod SE (
beta_sub1_hac_se= 0.039,beta_sub2_hac_se= 0.068). The figure shows that the rejection mainly reflects a lower intercept after 1984, which corresponds to a lower break-even growth rate. It does not show a clear change in the slope. I did not run a slope-only test, so this split is descriptive. - Figure:
out/figure1.png(scatter with the two subperiod fitted lines). Table:out/table1.csv.
Uncertainty
- HAC SE of β = 0.0358 (
effect_se). 95% CI [−0.326, −0.186] (effect_ci_low,effect_ci_high). The interval lies entirely below zero, soconclusion=negative_effect. - The classical OLS SE is 0.020 (
ols_classical_se_beta), so allowing for serial correlation and heteroskedasticity widens the SE by about 80%. - The HAC SE barely moves with the lag choice: 0.029 at lag 0 (White) and 0.034–0.037 for lags 2–12 (
effect_se_lag_sensitivity). The sign conclusion holds for every lag tried.
Limitations and open issues
- The Chow test may over-reject. The classical Chow F-test assumes homoskedastic, serially uncorrelated errors with the same variance in both subperiods. Residual RMSE falls from 0.277 to 0.218 (
resid_rmse_sub1,resid_rmse_sub2), which fits the Great Moderation, and the full-sample residuals are autocorrelated (HAC SE > OLS SE). Both problems can distort the test's size. A HAC/Wald or variance-robust break test was not run, so theunstableverdict depends on the classical test the task prescribes and should not be read as decisive. - The break date is imposed, not estimated. 1984Q1 was fixed in advance. No sup-F/Andrews or Bai–Perron test was run, so the true break could be elsewhere or there could be several breaks. The 2008–09 recession, which falls in subperiod 2, likely has a large influence on
beta_sub2and its wide SE; influence diagnostics were not run. - The estimate is not causal. β is a reduced-form association. Output and unemployment are determined jointly, there are no controls (productivity, labour-force participation), and the static specification leaves out lags of g. With lags included, the cumulative response could differ from the contemporaneous β.
- Data vintage and measurement. The data are revised (2026 vintage, chained 2017 dollars) and do not match what was known in real time. Benchmark revisions and measurement error in GDP growth bias β toward zero (attenuation). Averaging monthly to quarterly unemployment smooths the series and is one source of autocorrelation.
- Linearity and symmetry are assumed. Possible asymmetry between recessions and expansions, and nonlinearity, were not checked.
- What would invalidate the result. A coding error in the averaging or the growth scaling (checked: the 1960Q1 values were hand-recomputed and an independent OLS matches exactly, see
out/state/checks.md), leakage of post-2019 data (checked: the last quarter is 2019Q4), or a lag/kernel choice driving the inference (checked: not the case for the sign of β).