Okun's law in U.S. quarterly data, 1960Q1–2019Q4 (F2-conf-04)
Question
How big is the Okun coefficient β in the linear projection Δu_t = α + β g_t + e_t? Here u_t is the quarterly average of the monthly unemployment rate (pp) and g_t = 100·ln(GDPC1_t/GDPC1_{t−1}) is quarter-on-quarter real GDP growth in percent, not annualised. The disturbances may be serially correlated, so I report a standard error that stays valid in that case. I also test whether β is negative and significantly different from zero at the 5% level.
Data and exclusions
data/UNRATE.csv: 945 monthly rows.data/GDPC1.csv: 319 quarterly rows (n_input_rows). Both SHA-256 checksums matchdata/README.md(seeout/state/data_audit.md).- One data issue was found: UNRATE is empty for 2025-10. That month is outside the window, so it does not affect the analysis (
data_issues). Every quarter from 1959Q4 to 2019Q4 has all 3 monthly observations. - Exclusions (
out/exclusions.csv), counted in quarters starting from the 319 GDP quarters:- Step 1: keep the levels window 1959Q4–2019Q4. This removes 78 quarters and leaves 241.
- Step 2: drop 1959Q4. It only supplies the lagged levels for the 1960Q1 differences, so 1 quarter is removed and 240 remain.
- The regression sample therefore runs from
first_quarter= 1960Q1 tolast_quarter= 2019Q4, withn_analysed= 240.
Method
- Estimation: OLS of Δu_t on a constant and g_t (statsmodels).
- Baseline uncertainty: the conventional iid/homoskedastic standard error (
se_iid). - Main uncertainty: a Newey–West HAC standard error with Bartlett kernel (
se_hac).- Bandwidth
hac_lags= 4. This comes from the Newey–West (1994) rule of thumb floor(4·(T/100)^{2/9}) with T = 240, fixed before looking at results. - No small-sample degrees-of-freedom correction is applied, which is the classic Newey–West estimator.
- Bandwidth
- Confidence interval and test: the 95% CI is β̂ ± 1.96·se_hac.
okun_negative_5pctis true only if β̂ < 0 and the two-sided normal test using se_hac has p < 0.05. - Reproducibility: the procedure is deterministic, so no seed is needed (
random_seed= null). Runningout/analysis.pyregeneratesresults.json,exclusions.csvandfigure1.png.
Results
- β̂ = −0.2558 (
beta_hat): each extra 1% of quarterly real GDP growth goes with an unemployment rate about 0.26 pp lower in that quarter. In annualised-growth units that is roughly −0.064. - α̂ = 0.1844 pp (
alpha_hat) and R² = 0.408 (r_squared). - Together these imply that unemployment is stable when quarterly growth is about 0.72%, i.e. −α̂/β̂ computed from
alpha_hatandbeta_hat. - Mean growth over the sample is 0.754% per quarter (
mean_growth). - The Okun coefficient is negative and statistically significant at the 5% level (
okun_negative_5pct= true). out/figure1.pngshows the scatter of Δu_t against g_t with the fitted line.
Uncertainty
| SE | 95% CI | |
|---|---|---|
| iid baseline | 0.0200 (se_iid) |
[−0.2949, −0.2166] (baseline_ci_iid_low, baseline_ci_iid_high) |
| Newey–West, 4 lags | 0.0358 (se_hac) |
[−0.3260, −0.1855] (beta_ci_low, beta_ci_high) |
- The OLS residuals are positively autocorrelated, with lag-1 autocorrelation 0.39 (
residual_autocorr_lag1). As a result the HAC SE is about 1.8 times the iid SE. - With the HAC SE, t = −7.14 (
t_hac) and p ≈ 1e−12 (p_value_hac). - Bandwidth sensitivity (
se_hac_by_lags): the HAC SE is 0.029 at 0 lags (heteroskedasticity-robust only), 0.032–0.037 for 1–12 lags, and 0.036 with the degrees-of-freedom correction (se_hac_lag4_dfcorrected). The significance conclusion does not change for any bandwidth tried.
Limitations and open issues
- Data vintage: the series are current-vintage, revised data, not real-time data, as the task allows.
- Interpretation: β is a linear-projection coefficient, not a causal or structural parameter.
- Stability over time: the relation may have shifted within 1960–2019. I did not test for this because the task does not ask for it.
- Asymptotic inference: the inference relies on asymptotic normality. Bartlett-kernel HAC estimators with small bandwidths can understate uncertainty when persistence is strong. Here the result is far from the significance boundary, so this does not affect the conclusion.
- Completeness: no part of the task was infeasible (
feasibility= complete).