SPB Git

spb/wp29_uqo

Public

# Real-time forecasts of US real GDP growth from data vintages (F3-conf-02)

# Question

How 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?

# Data and exclusions

  • 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).
  • 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).
  • 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.
  • Data issues recorded in data_issues: irregular 8th origin (2025-12-31, shutdown-delayed advance estimate), COVID outliers, delayed first release of 2025Q4.

# Method

  • Naive: forecast for h = 1 and h = 2 = last value in the origin's vintage file.
  • 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).
  • Errors = first-release value − forecast; RMSE and MAE over the 8 origins per horizon; rel_improvement_rmse_h* = 1 − RMSE_model/RMSE_naive.
  • Revision statistic: mean over the 8 h = 1 target quarters (2024Q1–2025Q4) of |current-vintage value − first release|.
  • 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).

# Results

naive AR(1)
RMSE h=1 (pp) 2.010 (rmse_naive_h1) 1.484 (rmse_model_h1)
MAE h=1 (pp) 1.687 (mae_naive_h1) 1.233 (mae_model_h1)
RMSE h=2 (pp) 2.265 (rmse_naive_h2) 1.398 (rmse_model_h2)
MAE h=2 (pp) 1.812 (mae_naive_h2) 1.030 (mae_model_h2)
  • 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).
  • 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).
  • 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.
  • 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.

# Uncertainty

With 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.

# Limitations and open issues

  • 8 origins (2024–2025) is a tiny, specific evaluation period, including the negative 2025Q1 print (−0.3 first release); results may not generalise.
  • 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.
  • 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.
  • Actuals are advance estimates as at month-end; scoring against later vintages would give different numbers (revisions average 0.56 pp in absolute value).
  • 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.
Files · main
Menu

Theme