SPB Git

spb/wp29_uqo

Public

# F3-conf-02 — Real-time forecasts of US real GDP growth (A191RL1Q225SBEA)

# Question

Using only the data published at each of 8 forecast origins (ALFRED vintages from 2024-01-31 to 2025-12-31), how accurately could quarterly US real GDP growth (q/q % change at a seasonally adjusted annual rate) have been forecast 1 and 2 quarters past the last published quarter? And does a simple AR model beat the naive "last value" forecast? Forecasts are scored against the first-release (advance) value of each target quarter.

# Data and exclusions

  • data/vintages/*.csv (8 files, 307–314 rows each, 1947Q2 up to the latest published quarter). At each origin only that vintage file is used. Every vintage parsed cleanly: no missing or non-numeric values, no duplicate dates, no gaps in the quarters.
  • data/first_release.csv (13 rows) gives the actuals. For every origin, the last value in the vintage file equals the first release of that quarter, which confirms the vintages are aligned with the advance releases.
  • data/current_vintage.csv (318 rows) is used only for the revision statistic.
  • Exclusions in model estimation: quarters before 1985Q1 are left out (only post-Great-Moderation data are used), and so are regression pairs where y_t or y_{t-1} falls in 2020Q1–2021Q1 (the pandemic outliers: −28% and +35% annualised). I fixed this rule before looking at any forecast results. The naive forecast uses only the last value of each vintage.
  • Shutdown timing: the BEA advance estimate for 2025Q3 was delayed by the Oct–Nov 2025 federal shutdown. As a result the 8th origin is 2025-12-31 (5 months after the 7th, not 3), and the first release of its h=1 target (2025Q4) is dated 2026-02-28. I used the origins as supplied. Horizons are counted from the last quarter in each vintage, as TASK.md specifies.

# Method

  • Naive: for both h=1 and h=2, the forecast is the last value in the origin's vintage.
  • Model ar1_1985_excovid: y_t = c + φ y_{t−1} + e_t, fitted by OLS separately on each origin's vintage. The sample runs from 1985Q1 to the last published quarter, minus the pandemic pairs above. That gives 150–157 regression observations; this count is n_train for the model rows in forecasts.csv. For naive rows, n_train is the full length of the vintage. The h=2 forecast iterates the model: ŷ_{T+2} = c + φ ŷ_{T+1}. Estimates hardly changed across origins (c ≈ 1.79–1.84, φ ≈ 0.32–0.33), so the model is close to "shrink about two-thirds of the way toward a mean of roughly 2.7%".
  • Metrics: RMSE and MAE over the 8 origins for each horizon, plus 1 − RMSE_model/RMSE_naive. The revision statistic is the mean |current − first release| over the 8 h=1 target quarters (2024Q1 … 2025Q4).
  • Everything is deterministic (no randomness). out/analysis.py regenerates results.json, forecasts.csv and uncertainty.json.

# Results

Errors are in percentage points of annualised growth, scored against first releases. n = 8 per horizon.

RMSE h=1 MAE h=1 RMSE h=2 MAE h=2
Naive 2.010 1.688 2.265 1.813
AR(1) 1.481 1.223 1.399 1.021
  • The AR(1) model's RMSE is lower than naive by 26.3% at h=1 and by 38.2% at h=2.
  • The AR(1) model beat the naive forecast (lower squared error) at 5 of 8 origins for h=1 and at all 8 origins for h=2.
  • Mean absolute revision between first release and the 2026-10-30 vintage, over the h=1 targets: 0.56 pp. Individual revisions range from 0.1 to 1.2 pp; the largest is 2025Q4 (first release 1.4, current 0.2). That is about 28% of the naive h=1 RMSE and about 38% of the AR h=1 RMSE. Measured against later-revised data, the errors would therefore look noticeably different.

# Uncertainty

With only 8 origins, these estimates are very imprecise. Results are in out/uncertainty.json.

  • I ran a Diebold–Mariano test on squared-error differentials, with the Harvey–Leybourne–Newbold small-sample correction and t(7) reference. It gives a statistic of 1.47 (p = 0.19) at h=1 and 1.71 (p = 0.13) at h=2. Neither horizon shows a statistically significant gain at conventional levels. Even this asymptotic-style test is unreliable at T = 8.
  • The gains are concentrated in a few origins. Most of the advantage comes from 2025-04-30, where the naive forecast carried forward the import-driven −0.3% for 2025Q1, and 2025-12-31, where it carried forward 4.3% for 2025Q3. Dropping either origin would substantially reduce the measured improvement.
  • The h=2 sign result (model better at 8 of 8 origins) is the most robust single finding. Under a null of equal accuracy, a sign test gives p = 2 × 0.5^8 ≈ 0.008. However, overlapping h=2 targets make the origins serially dependent, so this p-value is optimistic.

# Limitations and open issues

  • The evaluation sample is tiny (8 origins in 2024–2025) and RMSE is dominated by 1–2 large surprises, so the results do not generalise reliably.
  • Only one model was tried, and its exclusion rules (start in 1985, drop pandemic pairs) are judgement calls. They were fixed in advance, but no alternative specifications were tested, so there was no specification search. A full-sample AR would be heavily affected by the 2020 outliers.
  • Actuals are first releases (advance estimates). Accuracy against the current vintage would differ, because the mean absolute revision is 0.56 pp.
  • The irregular 5-month gap before the last origin (the shutdown) means "h=1" at that origin (target 2025Q4) is a backcast of a quarter that had already ended. At the other origins, h=1 targets the quarter in progress. The model does not use any of the extra information available at that origin, but the naive and AR forecasts are still comparable with each other.
  • The model uses only the GDP series itself: no monthly indicators and no nowcasting information. Professional real-time forecasts would normally do better.
Files · main
Menu

Theme