1# F3-conf-02 — Real-time forecasts of US real GDP growth23## Question4How 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?56## Data and exclusions7- Inputs are 8 ALFRED vintage files (307–314 rows each), `current_vintage.csv` (318 rows) and `first_release.csv` (13 rows). Per-file counts are in `n_input_rows`. All SHA-256 hashes match `data/README.md` (see `out/state/data_audit.md`). There are no missing values, duplicates or gaps.8- At each origin, the only data used for estimation or as forecast input is that origin's vintage file. `current_vintage.csv` is used only for the revision statistic. The script asserts that every target's first-release date falls after its origin.9- The AR estimation sample at each origin is built as follows (`out/exclusions.csv`, shown for the last origin, 314 quarters):10 1. Drop the first quarter, which has no lag (−1).11 2. Keep only dependent quarters from 1985Q1 on (−150).12 3. Drop the dependent quarters 2020Q2–2020Q4 (−3), so that the COVID outliers (about −28 % and +35 %) appear neither as regressand nor as regressor.1314 This leaves `n_analysed` = 160. The naive forecast uses the full vintage.15- 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.1617## Method18- **Naive:** the forecast for h = 1 and h = 2 is the last value in the origin's vintage.19- **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.20- **Scoring:** RMSE and MAE of forecast minus first release over the 8 origins, computed separately for each horizon.21- The method has no randomness (`random_seed` = null). All forecasts are in `out/forecasts.csv`.2223## Results24| | naive | AR(1) | 1 − RMSE ratio |25|---|---|---|---|26| h = 1 RMSE | 2.01 (`rmse_naive_h1`) | 1.49 (`rmse_model_h1`) | 0.26 (`rel_improvement_rmse_h1`) |27| h = 1 MAE | 1.69 (`mae_naive_h1`) | 1.23 (`mae_model_h1`) | |28| h = 2 RMSE | 2.27 (`rmse_naive_h2`) | 1.40 (`rmse_model_h2`) | 0.38 (`rel_improvement_rmse_h2`) |29| h = 2 MAE | 1.81 (`mae_naive_h2`) | 1.03 (`mae_model_h2`) | |3031All values are in percentage points of annualised growth.3233- 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.34- 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`).35- 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.36- 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.3738## Uncertainty39- There are only 8 forecasts per horizon, and the h = 2 errors overlap across origins.40- A Diebold–Mariano test on squared-error loss differentials (naive minus model), with Harvey–Leybourne–Newbold correction and a t(7) reference, gives:41 - h = 1: statistic 1.59 (`dm_stat_h1`), two-sided p = 0.18 (`dm_hln_pvalue_two_sided_h1`)42 - h = 2: statistic 2.27 (`dm_stat_h2`), p = 0.11 (`dm_hln_pvalue_two_sided_h2`)43- 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.4445## Limitations and open issues46- 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.47- Actuals are first releases. Scoring against the current vintage would give different numbers, because revisions average 0.56 pp (`mean_abs_revision_h1_targets`).48- 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.49- The 8th origin's horizons are irregular because of the shutdown-delayed releases.50- The task was completed as specified (`feasibility` = complete).51