F3-conf-02 — Real-time forecasts of US real GDP growth
Question
How accurately could US quarterly real GDP growth (A191RL1Q225SBEA, % q/q SAAR) have been forecast 1 and 2 quarters ahead using only data published at each of 8 origins (2024-01-31 … 2025-12-31)? And does a simple time-series model beat the naive (last-value) forecast? Forecasts are scored against the first-release value of each target quarter.
Data and exclusions
- 8 ALFRED vintage files (307–314 rows, 1947Q2 to the last published quarter). At each origin, only the vintage file dated at that origin was used, both for estimation and as forecast input. The last value in each vintage matches the first-release table.
first_release.csv(13 rows): the actuals. All 16 target quarters (2024Q1–2026Q1) are present.current_vintage.csv(318 rows): used only for the revision statistic.- No missing values, duplicate dates or gaps in quarters were found. One data issue was recorded: origins are not evenly spaced (2025-07-31 → 2025-12-31). This is because the 2025Q3 advance estimate was delayed by the federal shutdown. Horizons are defined relative to the last quarter in each vintage, so targets are still the next one and two quarters.
- Model estimation sample: 1985Q1 onward (a fixed, a-priori choice: the Great Moderation era). Regression pairs involving 2020Q2 or 2020Q3 (the COVID collapse and rebound) were excluded. Those quarters remain in the files, but they would dominate OLS on growth rates.
Method
- Naive: for h = 1 and h = 2, the forecast is the last value in the origin's vintage.
- Model
ar1_1985_xcovid: y_t = c + φ y_{t−1} + e_t, estimated by OLS on the origin vintage over 1985Q1 to the last quarter (153–160 regression observations). The h = 2 forecast iterates the h = 1 forecast. The specification was fixed before looking at any results and was not tuned. Estimates were stable across origins: c ≈ 1.73–1.78 and φ ≈ 0.335–0.343, which implies an unconditional mean of about 2.6%. - Metrics: RMSE and MAE of forecast minus first release, over 8 origins per horizon, and relative improvement 1 − RMSE_model/RMSE_naive.
- Revision statistic: the mean |current value − first release| over the 8 h = 1 target quarters (2024Q1–2025Q4).
- The method is deterministic, with no random seed.
out/analysis.pyregenerates all outputs.
Results
| RMSE h=1 | MAE h=1 | RMSE h=2 | MAE h=2 | |
|---|---|---|---|---|
| naive | 2.010 | 1.688 | 2.265 | 1.813 |
| AR(1) | 1.485 | 1.234 | 1.400 | 1.030 |
(percentage points, annualised growth)
- Relative RMSE improvement of AR(1) over naive: 0.261 at h = 1 and 0.382 at h = 2.
- Mean absolute revision (first release → 2026-10-30 vintage) for the h = 1 targets: 0.5625 pp. The largest revisions were 2025Q4 (1.4 → 0.2), 2025Q2 (3.0 → 4.0) and 2024Q2 (2.8 → 3.6).
- The AR(1) gains come mainly from mean reversion after unusual quarters. For example, after the −0.3% 2025Q1 print the naive forecasts were badly wrong, while the AR(1) pulled towards ≈2.6%. The model had no ability to anticipate turning points: it also missed 2025Q1 (−0.3) and the 2025Q3 strength (4.3).
Uncertainty
- There are only 8 forecast errors per horizon, so the sample is very small and the h = 2 errors overlap (autocorrelated).
- A Harvey–Leybourne–Newbold small-sample Diebold–Mariano test on squared-error loss gave:
- h = 1: statistic 1.49, p = 0.18.
- h = 2: statistic 1.74, p = 0.12. This uses a Newey–West variance with h−1 lags and a t(7) reference.
- The AR(1)'s advantage is therefore not statistically significant at conventional levels, although its direction is the same at both horizons and for both metrics.
- The results depend heavily on a few quarters (2025Q1 and 2025Q4). The errors are about 1.4–2.3 pp, which is large compared with typical growth of ~2.5%.
- The mean revision (0.56 pp) is a sizable fraction of the forecast errors. Scoring against current values would give different numbers.
Limitations and open issues
- The evaluation window is short (2024–2026), so conclusions should not be generalised to other periods.
- Only one model was tried, so there is no specification search. The 1985 start and the COVID exclusion are judgement calls, documented above. Using the full sample with COVID quarters included would give different coefficients.
- "First release" is the value in the earliest month-end vintage containing the quarter (per
data/README.md). For the delayed quarters it may not be exactly the BEA's original advance estimate. - No conditioning information was used (no nowcasts, surveys or monthly data). Professional real-time forecasters would normally do better.
n_trainmeans different things for the two models. For naive it is the number of rows in the vintage file. For the AR(1) it is the number of OLS observations.n_analysed= 314, the number of rows in the last origin's vintage.- The DM statistics (
dm_hln_*) are extra keys inresults.json, beyond those the task required.