SPB Git

spb/wp29_uqo

Public
5.2 KB · 41 lines markdown
1# Real-time forecasts of US real GDP growth from data vintages (F3-conf-02)23## Question4How accurately could US quarterly real GDP growth (A191RL1Q225SBEA, % q/q SAAR) have been forecast 1 and 2 quarters ahead using only the data published at each of 8 forecast origins (2024-01-31 … 2025-12-31; `first_origin`, `last_origin`, `n_origins`), scored against first-release values, and does a simple time-series model beat the naive (last-value) forecast?56## Data and exclusions7- Inputs: 8 ALFRED vintage files (307–314 rows each), `current_vintage.csv` (318 rows), `first_release.csv` (13 rows); row counts in `n_input_rows`. All SHA-256 hashes match `data/README.md`; no missing values, duplicate dates or gaps (`out/state/data_audit.md`).8- Real-time rule: at each origin only that origin's vintage file is used (training sample = whole file, values as in that file). `current_vintage.csv` is used only for the revision statistic; `first_release.csv` only for actuals. Every target's first release is dated after its origin (asserted in code).9- Exclusions apply only to the model's estimation sample (`out/exclusions.csv`, shown for the last origin): 314 vintage observations → keep 1985Q1 onward (−151) → drop first window quarter for the lag (−1) → drop regression rows whose dependent quarter is 2020Q2–2020Q4 (−3; COVID outliers of about −28/+35 pp) → 159 regression observations (`n_analysed`). The naive forecast uses the full vintage file.10- Data issues recorded in `data_issues`: irregular 8th origin (2025-12-31, shutdown-delayed advance estimate), COVID outliers, delayed first release of 2025Q4.1112## Method13- Naive: forecast for h = 1 and h = 2 = last value in the origin's vintage file.14- Model (`model_name` = `ar1_post1985_exCovid`; `model_description`): AR(1) with intercept, OLS, re-estimated at each origin on that vintage from 1985Q1 to its last quarter, excluding the COVID regression rows; h = 2 by iterating the AR(1). The specification was fixed before any forecast errors were computed (no tuning on the evaluation sample).15- Errors = first-release value − forecast; RMSE and MAE over the 8 origins per horizon; `rel_improvement_rmse_h*` = 1 − RMSE_model/RMSE_naive.16- Revision statistic: mean over the 8 h = 1 target quarters (2024Q1–2025Q4) of |current-vintage value − first release|.17- Supplementary: Diebold–Mariano test on squared-error differentials with Harvey–Leybourne–Newbold correction (long-run variance with lags up to h−1), t(7) reference. No randomness (`random_seed` = null).1819## Results20| | naive | AR(1) |21|---|---|---|22| RMSE h=1 (pp) | 2.010 (`rmse_naive_h1`) | 1.484 (`rmse_model_h1`) |23| MAE h=1 (pp) | 1.687 (`mae_naive_h1`) | 1.233 (`mae_model_h1`) |24| RMSE h=2 (pp) | 2.265 (`rmse_naive_h2`) | 1.398 (`rmse_model_h2`) |25| MAE h=2 (pp) | 1.812 (`mae_naive_h2`) | 1.030 (`mae_model_h2`) |2627- Relative RMSE improvement of the AR(1) over naive: 0.262 at h = 1 (`rel_improvement_rmse_h1`) and 0.383 at h = 2 (`rel_improvement_rmse_h2`).28- The AR(1) had a smaller absolute error than naive at 5 of 8 origins for h = 1 (`supp_n_origins_model_abs_err_lt_naive_h1`) and 8 of 8 for h = 2 (`supp_n_origins_model_abs_err_lt_naive_h2`).29- The estimated AR(1) was very stable across vintages: φ between 0.335 and 0.343 (`supp_ar1_phi_range`), implied mean 2.62–2.66 % (`supp_ar1_implied_mean_range`); the model's gain comes from shrinking the last observation toward the mean, which helped most after the volatile 2025Q1 (−0.3) and 2025Q3 (4.3) prints.30- Mean absolute revision between first release and the current (2026-10-30) value of the h = 1 targets: 0.5625 pp (`mean_abs_revision_h1_targets`; individual revisions in `supp_revisions_h1_targets`, range −1.2 to +1.0 pp). This is about a third of the AR(1) h = 1 MAE, so first-release "truth" is itself noisy.3132## Uncertainty33With only 8 origins the comparison is very imprecise. The DM-HLN test does not reject equal squared-error accuracy at conventional levels: h = 1 statistic −1.49, p = 0.18 (`supp_dm_hln_stat_h1`, `supp_dm_hln_pvalue_h1`); h = 2 statistic −1.75, p = 0.12 (`supp_dm_hln_stat_h2`, `supp_dm_hln_pvalue_h2`). The point estimates favour the AR(1), but the evidence that it beats the naive forecast in this window is not statistically significant. h = 2 errors overlap across consecutive origins (serial correlation), which the lag-1 long-run variance only partly addresses with n = 8.3435## Limitations and open issues36- 8 origins (2024–2025) is a tiny, specific evaluation period, including the negative 2025Q1 print (−0.3 first release); results may not generalise.37- The 1985Q1 start and the COVID-row exclusion are judgement calls (pre-specified, not tuned); other reasonable choices (full sample, AR(p)) were not evaluated, by design of a single-model task.38- Origins are irregularly spaced (2025-12-31 instead of 2025-10-31 due to the federal shutdown); horizons are defined relative to the last published quarter, so targets remain the next two quarters.39- Actuals are advance estimates as at month-end; scoring against later vintages would give different numbers (revisions average 0.56 pp in absolute value).40- `n_train` for naive rows is the full vintage length; for model rows it is the AR(1) regression sample size. `n_analysed` = 159 is the model regression sample at the last origin.41
Files · 452964ee0fbbaa40fbbed2c87a54ca798ffd6a85
Menu

Theme