# Okun's law in the United States, 1960–2019 (task F6-conf-03) ## Question How strongly do quarterly changes in the US unemployment rate (Δu_t, pp) respond to quarterly real GDP growth (g_t = 100·Δln GDPC1, % q/q, not annualised), in Δu_t = α + β·g_t + ε_t over 1960Q1–2019Q4, and is the relation stable between 1960Q1–1983Q4 and 1984Q1–2019Q4? ## Data and exclusions - `data/GDPC1.csv` (319 rows, 1947Q1–2026Q3) and `data/UNRATE.csv` (945 rows, 1948-01–2026-09) (`n_input_rows`); SHA-256 checksums match `data/README.md` (see `out/state/data_audit.md`). - Quarterly u_t = mean of the three monthly UNRATE values; quarters with fewer than 3 months are set to missing. Only one month is missing (2025-10), and it lies outside the sample (`data_issues`). - Exclusions (`out/exclusions.csv`): the 319 quarters were restricted to 1960Q1–2019Q4 (79 removed; 1959Q4 levels are used only to form the 1960Q1 differences). No missing values were found inside the window, which leaves `n_analysed` = 240 quarters, `n_sub1` = 96 and `n_sub2` = 144. No data after 2019Q4 enters any estimate, and the script asserts this. ## Method - Baseline: a mean-only prediction of Δu, scored by RMSE (`baseline_metric`). - Main model: OLS of Δu_t on a constant and g_t over the full sample (`effect_estimate`, `intercept`), scored by in-sample residual RMSE (`model_metric`). - Uncertainty: Newey–West HAC standard error with a Bartlett kernel. The lag is set by the rule floor(4·(n/100)^{2/9}) = 4 (`hac_lags`). The 95% CI is β ± 1.96·SE (normal approximation). - Stability: separate OLS fits on each subperiod (`beta_sub1`, `beta_sub2`; subperiod slope SEs in `table1.csv` are also HAC, with lags 3 and 4). A classical Chow SSR F-test of equal (α, β), with F(2, 236) (`chow_f_stat`, `chow_p_value`). - Supplementary checks I added (`supp_*` keys): a HAC-robust Wald test using subperiod-2 dummy and interaction terms, run jointly and for the slope alone, plus a residual-variance ratio test. - There is no randomness (`random_seed` = null). `out/analysis.py` regenerates every output deterministically. ## Results | period | n | α | β | HAC SE(β) | |---|---|---|---|---| | full 1960Q1–2019Q4 | 240 | 0.184 | −0.256 | 0.036 | | 1960Q1–1983Q4 | 96 | 0.254 | −0.259 | 0.039 | | 1984Q1–2019Q4 | 144 | 0.152 | −0.273 | 0.069 | (Source: `out/table1.csv`, and `intercept`, `effect_estimate`, `effect_se`, `beta_sub1`, `beta_sub2`, `intercept_sub1`, `intercept_sub2`, `se_sub1_hac`, `se_sub2_hac`.) - **Coefficient:** β = −0.256 (`effect_estimate`). A 1 percentage-point higher quarterly real GDP growth (about 4 pp annualised) goes with a quarter-on-quarter fall of about 0.26 pp in the unemployment rate. The implied growth rate that keeps unemployment unchanged is −α/β ≈ 0.72% per quarter (from `intercept` and `effect_estimate`). - **Fit:** the residual RMSE is 0.250 pp (`model_metric`), against 0.325 pp for the mean-only baseline (`baseline_metric`); R² = 0.41 (`r_squared`). - **Conclusion code:** `negative_effect` (`conclusion`), because the 95% CI lies entirely below zero. - **Stability:** the Chow test rejects equality of (α, β): F = 6.09, p = 0.0026 (`chow_f_stat`, `chow_p_value`), so `stability_conclusion` = `unstable`. The rejection comes from the intercept, not the slope: - The subperiod slopes are almost identical: −0.259 vs −0.273 (`beta_sub1`, `beta_sub2`). - The HAC Wald test of slope equality alone gives p = 0.85 (`supp_hac_wald_slope_p`). - The intercept falls from 0.254 to 0.152 (`intercept_sub1`, `intercept_sub2`). - The joint HAC Wald test also rejects, p = 0.005 (`supp_hac_wald_joint_p`). - Figure: `out/figure1.png` shows the scatter of Δu against g with the two subperiod fitted lines. ## Uncertainty - HAC SE(β) = 0.036 (`effect_se`); 95% CI [−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 (`ols_classical_se`). - The SE barely depends on the lag choice: 0.029 at lag 0 and 0.034–0.037 at lags 2–12 (`sensitivity_effect_se_by_lag`). The sign conclusion holds at every lag tried. - The subperiod-2 slope is estimated less precisely (HAC SE 0.069, `se_sub2_hac`). ## Limitations and open issues - **Validity of the classical Chow test.** It assumes homoskedastic, serially uncorrelated errors with the same variance in both subperiods. That assumption fails here: the residual variance in subperiod 1 is about 1.63 times that in subperiod 2, and a variance-ratio F-test gives p = 0.009 (`supp_resid_var_ratio_sub1_over_sub2`, `supp_var_ratio_F_p_two_sided`). The classical p-value (`chow_p_value`) may therefore be miscalibrated. The HAC Wald test (`supp_hac_wald_joint_p` = 0.005) supports the same rejection, which makes it more credible, but neither test allows for unequal variances explicitly in the classical form required by the task. - **What "unstable" means.** The instability is in the intercept, i.e. the growth rate that keeps unemployment unchanged, which reflects trend productivity and labour-force growth. There is no evidence that the Okun slope itself changed. Reading `unstable` as "the output–unemployment sensitivity changed" would be wrong. - **Fixed, chosen break date.** The 1984Q1 break was imposed, not estimated. A Chow test at a chosen date says nothing about whether this is the best break date, or whether there are several breaks or gradual drift. No sup-F or rolling analysis was done (it is outside the task). - **Reduced form, not causal.** β is a contemporaneous association. Omitted dynamics, such as lagged growth, would change it, and simultaneity rules out a causal reading. Residual serial correlation is handled only through the HAC SEs; the model was not re-specified. - **Data vintage.** GDPC1 is the 2026 vintage. Revised data can differ from real-time data, and the BLS household-survey methodology changed over the period (e.g. 1994). Neither was examined. - **Inference approximations.** The HAC lag uses a rule of thumb; small-sample HAC bias was not corrected beyond the degrees-of-freedom correction, and the CI uses a normal critical value. Large recession outliers, such as 1980 and 2008–09, were not tested for influence. - **What would invalidate the result.** A misaligned quarterly average, data after 2019 leaking into the sample, or a non-stationary relation. The first two were checked (`out/state/checks.md`); the third was not tested formally.