Okun's law in U.S. quarterly data, 1960Q1–2019Q4 (F2-conf-04)
Question
How strongly does the quarterly change in the U.S. unemployment rate move with quarterly real GDP growth? The target is the slope β in the linear projection Δu_t = α + β g_t + e_t. Here u_t is the average of the three monthly UNRATE values in quarter t (in pp), and g_t = 100·ln(GDPC1_t/GDPC1_{t−1}) is growth in percent, quarter on quarter and not annualised. The sample is 1960Q1–2019Q4. The standard error must stay valid when the errors are serially correlated. β describes an association. It is not a causal effect.
Data and exclusions
data/UNRATE.csvhas 945 monthly rows anddata/GDPC1.csvhas 319 quarterly rows (n_input_rows). Both SHA-256 checksums matchdata/README.md(seeout/state/data_audit.md).- One data problem was found: UNRATE for 2025-10 is an empty field. It falls outside the window, so it does not affect the estimates (
data_issues). - Exclusion ledger (
out/exclusions.csv, counted in quarters):- Start with the 319 GDPC1 quarters. Keep only quarters with a complete 3-month UNRATE average: 5 removed (1947Q1–Q4 and 2025Q4), 314 left.
- Restrict to 1959Q4–2019Q4: 73 removed, 241 left.
- Drop the 1959Q4 base quarter after differencing: 1 removed, 240 left.
- The regression uses
n_analysed= 240 quarters, fromfirst_quarter= 1960Q1 tolast_quarter= 2019Q4. No observation after 2019Q4 enters the regression.
Method
- Baseline: OLS of Δu_t on a constant and g_t, with the conventional homoskedastic, independent-errors standard error (
se_iid). - Main inference: the same OLS point estimate with a Newey–West HAC standard error (Bartlett kernel), no small-sample degrees-of-freedom correction (
se_hac). - Bandwidth:
hac_lags= 4. This is the Newey–West (1994) rule of thumb floor(4·(T/100)^{2/9}) with T = 240, fixed before looking at results. A lag window of about one year also fits quarterly macro data. - Confidence interval and test: the 95% CI is β̂ ± 1.96·
se_hac, using the asymptotic normal critical value.okun_negative_5pctis true only if β̂ < 0 and the two-sided HAC test of β = 0 has p < 0.05. - Code check: the HAC sandwich was also computed by hand in
out/analysis.pyand asserted equal to the statsmodels result. - No randomness is involved (
random_seed= null).out/analysis.pyalso producesout/figure1.png(scatter of Δu_t against g_t with the fitted line).
Results
- Slope:
beta_hat= −0.2558. One extra percentage point of quarterly real GDP growth goes with a 0.256 pp smaller quarterly change in the unemployment rate. - Intercept and fit:
alpha_hat= 0.1844 pp andr_squared= 0.408. - Mean growth:
mean_growth= 0.754 percent per quarter. - Significance: the Okun coefficient is negative and significant at the 5% level (
okun_negative_5pct= true). The HAC t-statistic is −7.14 (t_stat_hac), with p ≈ 9.5e−13 (p_value_hac).
Uncertainty
- Standard errors:
se_iid= 0.0200 andse_hac= 0.0358 (hac_lags= 4). - Why they differ: the OLS residuals are positively autocorrelated, with lag-1 autocorrelation 0.39 (
residual_acf_lag1). Because of that, the HAC SE is about 1.8 times the naive SE. - Confidence intervals:
- 95% HAC CI: [
beta_ci_low,beta_ci_high] = [−0.326, −0.186]. - Naive 95% CI, shown for comparison only: [
beta_ci_iid_low,beta_ci_iid_high] = [−0.295, −0.217]. It is too narrow.
- 95% HAC CI: [
- Bandwidth sensitivity (
se_hac_by_lags): across L ∈ {0, 1, 2, 4, 6, 8, 12} the HAC SE ranges from 0.0288 to 0.0371. Every choice gives a CI well away from zero, so the conclusion does not depend on the bandwidth.
Limitations and open issues
- Data vintage: this is the current data vintage, not real-time data. Revisions to GDP could change the estimate in other vintages.
- Interpretation: β is a reduced-form projection coefficient, not a structural or causal parameter. It assumes the relationship is stable over 1960–2019, and the possibility of breaks across decades was not examined, because the task fixes the window.
- Inference choices: the HAC inference is asymptotic, with a normal critical value and no small-sample correction. Fixed-b critical values or a small-sample correction would widen the interval slightly. With |t| > 7, this would not change the conclusion.
- Measurement: Δu is built from quarterly averages of monthly data. This time-averaging itself creates serial correlation, which is one reason to use HAC errors.
- Nothing in the task was infeasible (
feasibility= "complete").