F3-conf-02 — Real-time forecasts of US real GDP growth
Question
How accurately could US quarterly real GDP growth (A191RL1Q225SBEA, % change q/q at a seasonally adjusted annual rate) have been forecast 1 and 2 quarters ahead in real time? The test uses 8 origins, from first_origin = 2024-01-31 to last_origin = 2025-12-31 (n_origins = 8). Each origin uses only the vintage published on its date, and forecasts are scored against first releases. Does a simple AR model beat the naive (last value) forecast?
Data and exclusions
-
Inputs are 8 ALFRED vintage files (307–314 rows each),
current_vintage.csv(318 rows) andfirst_release.csv(13 rows). Per-file counts are inn_input_rows. All SHA-256 hashes matchdata/README.md(seeout/state/data_audit.md). There are no missing values, duplicates or gaps. -
At each origin, the only data used for estimation or as forecast input is that origin's vintage file.
current_vintage.csvis used only for the revision statistic. The script asserts that every target's first-release date falls after its origin. -
The AR estimation sample at each origin is built as follows (
out/exclusions.csv, shown for the last origin, 314 quarters):- Drop the first quarter, which has no lag (−1).
- Keep only dependent quarters from 1985Q1 on (−150).
- Drop the dependent quarters 2020Q2–2020Q4 (−3), so that the COVID outliers (about −28 % and +35 %) appear neither as regressand nor as regressor.
This leaves
n_analysed= 160. The naive forecast uses the full vintage. -
Data issues and how each was handled are listed in
data_issues. They include the COVID outliers and the shutdown-delayed releases: the 8th origin is 2025-12-31, and the 2025Q4 first release is dated 2026-02-28.
Method
- Naive: the forecast for h = 1 and h = 2 is the last value in the origin's vintage.
- Model (
model_name= ar1_ols): an AR(1) with intercept, estimated by OLS on the origin's vintage over the sample described above and re-estimated at every origin (model_description). The h = 2 forecast is obtained by iterating the AR(1). I fixed the specification (lag order, 1985 start, COVID exclusion) before looking at any forecast errors and did not tune it afterwards. - Scoring: RMSE and MAE of forecast minus first release over the 8 origins, computed separately for each horizon.
- The method has no randomness (
random_seed= null). All forecasts are inout/forecasts.csv.
Results
| naive | AR(1) | 1 − RMSE ratio | |
|---|---|---|---|
| h = 1 RMSE | 2.01 (rmse_naive_h1) |
1.49 (rmse_model_h1) |
0.26 (rel_improvement_rmse_h1) |
| h = 1 MAE | 1.69 (mae_naive_h1) |
1.23 (mae_model_h1) |
|
| h = 2 RMSE | 2.27 (rmse_naive_h2) |
1.40 (rmse_model_h2) |
0.38 (rel_improvement_rmse_h2) |
| h = 2 MAE | 1.81 (mae_naive_h2) |
1.03 (mae_model_h2) |
All values are in percentage points of annualised growth.
- On this sample the AR(1) had lower RMSE and MAE than the naive forecast at both horizons. The RMSE was about 26 % lower at h = 1 and 38 % lower at h = 2.
- The AR(1) had the smaller absolute error at 5 of 8 origins for h = 1 (
n_model_smaller_abs_error_h1) and at all 8 for h = 2 (n_model_smaller_abs_error_h2). - The gain comes mostly from shrinking toward the post-1985 implied mean of 2.67 % at the last origin (
last_origin_ar1_implied_mean). At the last origin the intercept is 1.78 (last_origin_ar1_intercept) and φ is 0.34 (last_origin_ar1_phi). This shrinkage protects against volatile quarters like 2025Q1 (−0.3) and 2025Q3 (4.3), where the naive forecast carries an unusual value forward. - The mean absolute revision between first release and the current (2026-10-30) value of the 8 h = 1 target quarters is 0.56 pp (
mean_abs_revision_h1_targets). That is roughly a third of the size of the forecast errors.
Uncertainty
- There are only 8 forecasts per horizon, and the h = 2 errors overlap across origins.
- A Diebold–Mariano test on squared-error loss differentials (naive minus model), with Harvey–Leybourne–Newbold correction and a t(7) reference, gives:
- h = 1: statistic 1.59 (
dm_stat_h1), two-sided p = 0.18 (dm_hln_pvalue_two_sided_h1) - h = 2: statistic 2.27 (
dm_stat_h2), p = 0.11 (dm_hln_pvalue_two_sided_h2)
- h = 1: statistic 1.59 (
- So the AR(1)'s advantage is not statistically significant at the 5 % level. The point estimates favour the model, but a sample this small cannot rule out equal accuracy. The DM asymptotics are themselves unreliable with n = 8.
Limitations and open issues
- The evaluation window (2024–2025) is short and covers a particular period, including the tariff-related swings in 2025Q1–Q2. The results may not generalise.
- Actuals are first releases. Scoring against the current vintage would give different numbers, because revisions average 0.56 pp (
mean_abs_revision_h1_targets). - The 1985 start and the COVID exclusion are researcher choices, documented in advance. I did not test other specifications, to avoid selecting one on the test sample.
- The 8th origin's horizons are irregular because of the shutdown-delayed releases.
- The task was completed as specified (
feasibility= complete).