SPB Git

spb/wp29_uqo

Public

# Okun's law in the United States, 1960Q1–2019Q4 (task F6-conf-03)

# Question

How strongly does the quarterly change in the US unemployment rate (Δu_t, pp) respond to quarterly real GDP growth (g_t = 100·Δln GDPC1, % not annualised), in Δu_t = α + β·g_t + ε_t over 1960Q1–2019Q4, and is (α, β) stable between 1960Q1–1983Q4 and 1984Q1–2019Q4? β is a reduced-form association (an "Okun coefficient"), not a structural causal effect.

# Data and exclusions

  • data/GDPC1.csv (319 rows) and data/UNRATE.csv (945 rows) (n_input_rows); SHA-256 of both match data/README.md (see out/state/data_audit.md).
  • Quarterly u_t = mean of the three monthly UNRATE values; a quarter is formed only when all three months are present. The only missing monthly value (2025-10) lies outside the window and has no effect (data_issues).
  • Both series run to 2026; everything after 2019Q4 is cut before any computation. The window 1959Q4–2019Q4 holds 241 consecutive complete quarters (n_window_quarters). Dropping 1959Q4, which is used only as the lagged level, leaves 240 analysed quarters (n_analysed) from sample_start = 1960-01-01 to sample_end = 2019-10-01. out/exclusions.csv records this step (241 − 1 = 240). Subperiods: 96 quarters (n_sub1) and 144 quarters (n_sub2).
  • The GDP data are the 2026 FRED vintage (chained 2017 dollars), not real-time data (data_issues).

# Method

  • Baseline: predict Δu by its sample mean; the RMSE is baseline_metric.
  • Main model: full-sample OLS of Δu_t on a constant and g_t. The in-sample residual RMSE is model_metric.
  • Standard errors: Newey–West HAC with a Bartlett kernel. The lag length is set by the Newey–West (1994) rule floor(4·(T/100)^{2/9}), which gives 4 quarters for T = 240 (hac_lags). No small-sample df correction is applied. The 95% CI is β ± 1.96·SE (normal approximation).
  • Stability: separate OLS fits on each subperiod (beta_sub1, beta_sub2). Classical Chow F = [(SSR_pooled − SSR_1 − SSR_2)/2] / [(SSR_1 + SSR_2)/(n − 4)], with df (2, 236) (chow_df). Supplementary check: a HAC Wald test in a fully interacted model with a 1984Q1 dummy (hac_wald_joint_p, hac_wald_slope_diff_p, hac_wald_intercept_diff_p).
  • Deliverables: out/table1.csv (full sample and both subperiods; the subperiod slope SEs are HAC with NW-rule lags, hac_lags_sub1, hac_lags_sub2) and out/figure1.png, both written by out/analysis.py. No randomness is used (random_seed = null).

# Results

  • Full sample: β = −0.256 (effect_estimate) and α = 0.184 pp (intercept). Each extra 1% of quarterly real GDP growth goes with about a 0.26 pp smaller rise in the unemployment rate in the same quarter. The growth rate at which unemployment is flat is about 0.98% per quarter before 1984 (okun_growth_sub1) and 0.55% after (okun_growth_sub2).
  • Fit: residual RMSE is 0.250 pp (model_metric) against 0.325 pp for the mean-only baseline (baseline_metric); R² = 0.41 (r_squared).
  • Subperiod slopes are almost the same: −0.259 for 1960–1983 (beta_sub1) and −0.273 for 1984–2019 (beta_sub2). 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), which rejects joint equality of (α, β) at 5%. The task's coding rule therefore gives stability_conclusion = "unstable". The rejection concerns the (α, β) pair jointly. The slope point estimates hardly differ, and the HAC test of the slope difference alone gives p = 0.85 (hac_wald_slope_diff_p). What shifted is mainly the fitted line's level, i.e. the growth rate consistent with stable unemployment. However, the HAC test of the intercept alone is also not significant (p = 0.25, hac_wald_intercept_diff_p). The joint HAC test still rejects (p = 0.0042, hac_wald_joint_p) because the intercept and slope estimates are strongly correlated.
  • conclusion = "negative_effect": the 95% CI lies entirely below zero.

# Uncertainty

  • HAC SE of β = 0.0358 (effect_se, 4 lags). 95% CI: [−0.326, −0.186] (effect_ci_low, effect_ci_high).
  • The classical OLS SE is 0.0200 (ols_classical_se), so allowing for heteroskedasticity and autocorrelation makes the SE about 1.8 times larger.
  • Sensitivity to the lag length (hac_se_by_lag): 0.029 (0 lags), 0.034 (2), 0.036 (4), 0.037 (8), 0.036 (12). The sign conclusion holds for every lag length.
  • Subperiod HAC SEs: 0.039 (beta_sub1_hac_se) and 0.068 (beta_sub2_hac_se).

# Limitations and open issues

  • The classical Chow test's assumptions are probably violated. It assumes homoskedastic, serially uncorrelated errors with equal variance in both subperiods. Three things point the other way: HAC SEs are clearly larger than classical ones, residual variance probably differs between the two periods (Great Moderation), and there are visible large-residual quarters (e.g. 1980, 2008–09). The F-test's size may therefore be off. The HAC Wald test also rejects jointly (hac_wald_joint_p), which supports the rejection. But I did not test variance equality and did not run a Chow test with unequal variances.
  • The "unstable" verdict depends on the break date. The split at 1984Q1 is imposed. I did not search over break dates (no Quandt–Andrews or Bai–Perron test). The instability is in the intercept/slope pair, not in the slope point estimate, so it should not be read as "Okun's coefficient changed".
  • Specification threats. The model is static and contemporaneous, with no lags of g or Δu. Okun dynamics, a trend-growth slowdown (which shows up as an intercept shift), and possible nonlinearity or asymmetry between recessions and expansions were not modelled. Measurement error in quarterly GDP growth would bias β towards zero. Simultaneity means β is not causal.
  • Data vintage. The 2026 vintage GDPC1 includes benchmark revisions. Real-time estimates would differ, and I did not check how sensitive the results are to vintage.
  • Inference choices. The lag rule is ad hoc, but results barely change with lag length. The CI uses a normal rather than t approximation (negligible difference at n = 240). With only 96 and 144 quarters, the subperiod HAC SEs are less reliable.
  • What would invalidate the result: errors in quarterly aggregation (checked by independent recomputation, see out/state/checks.md), any leakage of post-2019 data (excluded by construction and assertions), or a different definition of g (e.g. annualised, which would scale β by 1/4).
Files · main
Menu

Theme