Okun's law in the United States, 1960Q1–2019Q4 (task F6-conf-03)
Question
How much does the quarterly change in the US unemployment rate respond to quarterly real GDP growth, and has that response been stable? Estimand: β in Δu_t = α + β·g_t + ε_t. Here u_t is the quarterly average of monthly UNRATE (percent), Δu_t = u_t − u_{t−1} in percentage points, and g_t = 100·Δln GDPC1_t is percent growth per quarter (not annualised). The sample is 1960Q1–2019Q4. Stability is assessed by fitting the model separately on 1960Q1–1983Q4 and 1984Q1–2019Q4 and running a classical Chow test.
Data and exclusions
- Inputs:
data/GDPC1.csv(319 quarterly rows, 1947Q1–2026Q3) anddata/UNRATE.csv(945 monthly rows, 1948-01 to 2026-09) (n_input_rows). Both SHA-256 hashes matchdata/README.md. The full audit is inout/state/data_audit.md. - Data issues (
data_issues): (i) the UNRATE value for 2025-10 is blank, so the 2025Q4 average is not formed. This lies outside the window and has no effect. (ii) Both series run past 2019Q4. Those quarters are dropped before any estimation. GDPC1 is the current revised vintage, not real-time data. - Exclusion ledger (
out/exclusions.csv, counted in GDPC1 quarters): 319 → 314 (no complete unemployment quarter: 1947Q1–Q4 and 2025Q4) → 312 (first difference cannot be formed: 1948Q1 and 2026Q1) → 240 (restricted to 1960Q1–2019Q4). Final sample:n_analysed= 240,sample_start= 1960-01-01,sample_end= 2019-10-01,n_sub1= 96,n_sub2= 144. The 1959Q4 levels are used only to form the 1960Q1 differences.
Method
- Baseline: the mean-only prediction of Δu, scored by RMSE (
baseline_metric). - Main estimate: full-sample OLS of Δu on a constant and g (
effect_estimate,intercept), scored by residual RMSE (model_metric). - Uncertainty: Newey–West HAC standard error with a Bartlett kernel (statsmodels, small-sample correction). The lag length is set by the Newey–West rule of thumb floor(4·(n/100)^{2/9}), which gives
hac_lags= 4. The 95% CI is β ± 1.96·SE (normal approximation). - Subperiods: separate OLS fits (
beta_sub1,beta_sub2). Inout/table1.csvtheir standard errors are also HAC with 4 lags. - Chow test: classical SSR F-test of joint equality of (α, β), F = [(SSR_pooled − SSR_1 − SSR_2)/2] / [(SSR_1 + SSR_2)/236], with df (2, 236) (
chow_f_stat,chow_p_value,chow_df). - Supplementary checks (not required by the task): HAC standard errors at other lag lengths (
effect_se_hac_by_lag), and HAC Wald tests in a model with subperiod interactions (hac_wald_*). These were added because the classical Chow test assumes homoskedastic, serially uncorrelated errors. - No randomness is used (
random_seed= null).out/analysis.pyregenerates every output deterministically.
Results
| quantity | value | key |
|---|---|---|
| baseline RMSE (mean only) | 0.325 pp | baseline_metric |
| OLS residual RMSE | 0.250 pp | model_metric |
| R² | 0.408 | r_squared |
| β (full sample) | −0.256 pp per 1% growth | effect_estimate |
| α (full sample) | 0.184 pp | intercept |
| β, 1960Q1–1983Q4 | −0.259 | beta_sub1 |
| β, 1984Q1–2019Q4 | −0.273 | beta_sub2 |
| α, sub1 / sub2 | 0.254 / 0.152 | intercept_sub1, intercept_sub2 |
| Chow F (2, 236) | 6.09, p = 0.0026 | chow_f_stat, chow_p_value |
- Each extra percentage point of quarterly real growth goes with a fall of about 0.26 pp in the unemployment rate in the same quarter (
effect_estimate). The 95% interval lies entirely below zero, soconclusion=negative_effect. - Output growth reduces the RMSE of Δu from 0.325 to 0.250 pp (
baseline_metric,model_metric). - The classical Chow test rejects joint equality of (α, β) at 5% (
chow_p_value= 0.0026), sostability_conclusion=unstable. - The rejection does not come from the slope. The two subperiod slopes are almost identical (−0.259 vs −0.273). What differs is the intercept: 0.254 vs 0.152. As a result, the growth rate at which unemployment holds steady (−α/β) falls from 0.98% to 0.55% per quarter (
growth_for_stable_u_sub1,growth_for_stable_u_sub2), consistent with slower trend growth after 1984. - Figure:
out/figure1.pngshows the scatter with both subperiod fitted lines. Table:out/table1.csv.
Uncertainty
- Full-sample β: HAC SE = 0.036 (
effect_se, 4 lags). The 95% CI is [−0.326, −0.185] (effect_ci_low,effect_ci_high). - The HAC SE is about 1.8 times the classical OLS SE of 0.020 (
effect_se_ols_classical), which indicates heteroskedasticity and/or serial correlation in the residuals. - The SE is not sensitive to the lag choice: 0.029 to 0.037 across 0 to 12 lags (
effect_se_hac_by_lag). With any of these values the interval stays well below zero. - Subperiod HAC SEs are 0.040 and 0.069 (
beta_sub1_hac_se,beta_sub2_hac_se). The post-1984 slope is estimated much less precisely, largely because a few recession quarters (2008–09) carry much of the leverage. - The Chow result depends on the classical error assumptions. Residual variance differs between the subperiods (0.079 vs 0.048;
resid_var_sub1,resid_var_sub2), which breaks the homoskedasticity the classical F-test assumes. Even so, a HAC Wald test of joint equality also rejects (p = 0.0046,hac_wald_joint_equality_p). - Neither coefficient differs significantly when tested on its own: slope p = 0.85 (
hac_wald_slope_equality_p), intercept p = 0.25 (hac_wald_intercept_equality_p). The joint rejection comes from the combination of the two, because the intercept and slope estimates are correlated. - The data therefore give no evidence that the Okun slope changed. They do show the relationship as a whole shifted, mostly through the intercept.
Limitations and open issues
- What would invalidate the result.
- (a) A wrong construction of u_t or g_t, such as annualised growth or end-of-quarter unemployment. Both follow the TASK.md definitions, and the code asserts the exact 240-quarter index.
- (b) Any leakage of post-2019 data. The code restricts the sample and asserts the index.
- (c) Reading β as causal. It is a reduced-form co-movement coefficient: g_t and Δu_t are determined jointly, so OLS β is subject to simultaneity bias and should not be read as the structural effect of output on unemployment.
- Main threats.
- The 1984 break date is imposed by the task, not estimated. Choosing a break date after seeing the data would make the standard Chow p-value invalid, but this one was not chosen by me.
- The classical Chow test assumes iid homoskedastic errors, which the evidence above contradicts. The HAC Wald test agrees on the joint rejection, but its finite-sample behaviour with n = 96/144 and 4 lags is only approximate.
- The "unstable" verdict concerns (α, β) jointly. It would be wrong to report it as a change in the Okun slope; the slope-only test does not reject.
- Revised GDP vintage: the estimates describe today's data, not what was observable in real time.
- The static specification (no lags of g, no Δu dynamics) may leave dynamics in the residuals. HAC corrects the inference but not any resulting misspecification of β.
- Not checked.
- No estimated break dates (Quandt–Andrews / Bai–Perron).
- No lagged-growth or "gap" versions of Okun's law.
- No asymmetry between expansions and recessions.
- No outlier influence diagnostics beyond the visual check of the figure.
- No alternative bandwidth selectors (for example Andrews automatic), apart from the fixed-lag sensitivity grid.