SPB Git

spb/wp29_uqo

Public
7.3 KB · 61 lines markdown
1# Okun's law in the United States, 1960–2019 (F6-conf-03)23## Question4How strongly does the quarterly change in the US unemployment rate (Δu_t, percentage points) respond to quarterly real GDP growth (g_t = 100·Δln GDPC1, percent, not annualised), in Δu_t = α + β·g_t + ε_t over 1960Q1–2019Q4? And is (α, β) the same in 1960Q1–1983Q4 and 1984Q1–2019Q4? β is a reduced-form association (a conditional-mean slope), not a structural causal effect.56## Data and exclusions7Inputs: `data/GDPC1.csv` (319 quarterly rows, 1947Q1–2026Q3) and `data/UNRATE.csv` (945 monthly rows, 1948-01 to 2026-09) (`n_input_rows`). The SHA-256 hashes match `data/README.md`. Quarterly u_t is the simple mean of the three monthly UNRATE values; a quarter with any missing month is set to missing. Data issues (`data_issues`): (i) UNRATE for 2025-10 is empty. It falls outside the window, so it is never used and is not imputed. (ii) GDPC1 is the current vintage, not real-time data.8Exclusion ledger (`out/exclusions.csv`, unit = quarters of the merged panel): 319 quarters → drop pre-1960Q1 (−52; 1959Q4 levels are used only to form the 1960Q1 differences) → drop post-2019Q4 (−27, information rule) → drop missing Δu or g (−0) → 240 analysed (`n_analysed`). The sample runs from `sample_start` = 1960-01-01 to `sample_end` = 2019-10-01. Subperiods: `n_sub1` = 96 quarters and `n_sub2` = 144 quarters.910## Method11- **Baseline:** mean-only prediction of Δu, scored by RMSE (`baseline_metric`).12- **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`).13- **Standard errors:** Newey–West HAC, Bartlett kernel, no small-sample correction. The lag length `hac_lags` = 4 comes from the Newey–West (1994) rule floor(4·(T/100)^{2/9}) with T = 240.14- **95% confidence interval:** β ± 1.96·SE, using the normal approximation (`effect_ci_low`, `effect_ci_high`).15- **Subperiods:** separate OLS fits (`beta_sub1`, `beta_sub2`; HAC SEs with the same lag in `out/table1.csv`).16- **Stability:** classical Chow test, F = [(SSR_pooled − SSR_1 − SSR_2)/2] / [(SSR_1 + SSR_2)/(n − 4)] with df (2, 236) (`chow_f_stat`, `chow_p_value`, `chow_df`).17- **Robustness (supplementary):** the classical Chow test assumes homoskedastic, serially uncorrelated errors with equal variance in both subperiods. As a check, I also ran a HAC Wald test of the subperiod-2 intercept and slope dummies in a pooled interaction regression (`hac_wald_break_chi2`, `hac_wald_break_p`). I also reported the individual dummy p-values (`hac_p_intercept_diff`, `hac_p_slope_diff`) and the ratio of residual variances (`resid_var_ratio_sub1_sub2`).18- No randomness is involved (`random_seed` = null). Outputs: `out/figure1.png` (scatter with the two subperiod fits) and `out/table1.csv`.1920## Results21- **Full-sample slope:** β = −0.256 (`effect_estimate`) and α = 0.184 pp (`intercept`). A 1 percentage point higher quarterly growth rate goes with a quarterly unemployment change that is about 0.26 pp lower. The growth rate that keeps unemployment unchanged, −α/β, is about 0.72% per quarter (derived from `intercept` and `effect_estimate`).22- **Fit:** residual RMSE is 0.250 pp (`model_metric`), against 0.325 pp for the mean-only baseline (`baseline_metric`). R² = 0.408 (`r_squared`).23- **Subperiod slopes:** β₁ = −0.259 (`beta_sub1`) and β₂ = −0.273 (`beta_sub2`). The slopes are nearly identical. The intercepts differ: 0.254 (`intercept_sub1`) vs 0.152 (`intercept_sub2`).24- **Chow test:** F = 6.09 (`chow_f_stat`), p = 0.0026 (`chow_p_value`). Joint equality of (α, β) is rejected at the 5% level, so `stability_conclusion` = **unstable**.25- **Conclusion code:** `conclusion` = **negative_effect**, because the 95% interval for β lies entirely below zero.2627| period | n | intercept | slope | HAC SE (L=4) |28|---|---|---|---|---|29| full | 240 | 0.184 | −0.256 | 0.036 |30| 1960Q1–1983Q4 | 96 | 0.254 | −0.259 | 0.039 |31| 1984Q1–2019Q4 | 144 | 0.152 | −0.273 | 0.068 |3233(Source: `out/table1.csv`, generated by `out/analysis.py`.)3435## Uncertainty36- **Main interval:** HAC SE of β = 0.0358 (`effect_se`). 95% CI [−0.326, −0.186] (`effect_ci_low`, `effect_ci_high`).37- **Comparison with the iid SE:** the iid OLS SE is 0.0200 (`ols_iid_se`). Correcting for heteroskedasticity and autocorrelation therefore widens the interval by about 1.8 times.38- **Sensitivity to lag length:** the HAC SE is 0.029, 0.034, 0.036, 0.037 and 0.036 for lags 0, 2, 4, 8 and 12 (`hac_se_by_lag`). The sign conclusion does not change with any of these lags.39- **Stability test without the equal-variance assumption:** the HAC Wald break test also rejects joint equality, χ²(2) = 10.9, p = 0.0042 (`hac_wald_break_chi2`, `hac_wald_break_p`).40- **Individual shifts:** neither the intercept shift (p = 0.25, `hac_p_intercept_diff`) nor the slope shift (p = 0.85, `hac_p_slope_diff`) is significant on its own. The joint rejection therefore comes from the intercept and slope shifts together, which are correlated because mean growth differs between the subperiods. It should not be read as evidence that the Okun slope itself changed.4142## Limitations and open issues43- **How to read "unstable":** the Chow rejection concerns the pair (α, β). The point estimates suggest that the instability is mainly a shift in the intercept, and with it in the growth rate that keeps unemployment unchanged (lower trend growth after 1984). It does not look like a change in the slope; I found no evidence that the slope changed (`hac_p_slope_diff`). A claim that "Okun's coefficient changed" would not be supported.44- **Classical Chow assumptions:** the classical test assumes equal error variance across subperiods. The residual variance in subperiod 1 is about 1.63 times that in subperiod 2 (`resid_var_ratio_sub1_sub2`), and the errors are serially correlated, so the classical F p-value is not exact. The HAC Wald check reaches the same verdict, but it is asymptotic and relies on a short HAC lag in samples of 96 and 144 quarters.45- **Fixed break date:** the break date 1984Q1 is imposed by the task, not estimated. I did not test other break dates, and a sup-F test with an estimated break date would have different critical values.46- **Data vintage:** GDPC1 is a 2026 vintage. Revised GDP growth differs from what was observed at the time, which matters for the real-time use of Okun's law.47- **Model specification:**48  - The equation is a static OLS model with no lags of growth and no allowance for measurement error in g_t; measurement error in g_t would bias β towards zero.49  - I did not check for nonlinearity or asymmetry between recessions and expansions.50  - Endogeneity is not addressed: output and unemployment are determined jointly, so β is not causal.51- **Other choices not tested:**52  - Different HAC kernels or bandwidth rules beyond the lag grid above.53  - Fixed-b inference.54  - The 1.96 normal critical value instead of a t critical value.55- **What would invalidate the result:**56  - An error in the quarterly aggregation (checked: 240 complete quarters, with no missing months in the window).57  - Post-2019 data leaking into the sample (excluded at step 2 of the ledger, and `sample_end` = 2019-10-01).58  - Strong serial correlation beyond 12 lags.59  60  None of these was detected, but the robustness checks above are limited to what is listed.61
Files · main
Menu

Theme