1# F3-conf-01: Forecasting Canadian monthly GDP y/y growth when data are published with a lag23## Question4At the end of each month t, for the 48 origins from 2022-05 to 2026-04, how accurately can year-over-year growth of Canadian monthly real GDP be forecast for t+1 and t+3? Only data that would have been published by then are used: GDP up to month t−2 and LFS employment up to month t−1. The question is also whether a model that adds the more timely employment growth beats the naive forecast, which is gdp_yoy(t−2).56## Data and exclusions7- `data/canada_gdp_employment.csv`: 345 rows covering 1998-01 to 2026-09. These are current-vintage Statistics Canada series v65201210 (GDP) and v2062811 (LFS employment).8- Checks: the monthly index has no gaps or duplicates. From 1999-01 onward, `gdp_yoy` and `emp_yoy` match a recomputation from the levels exactly. The 1998 yoy values are filled in, even though the README says the first 12 months are empty and the file has no 1997 levels. I kept them as given. GDP is missing for 2026-08 and 2026-09, which is expected because those months were not yet published.9- Exclusion (decided before seeing any results): when estimating the model, I drop every training pair that spans any month from 2020-03 to 2021-12. Over that COVID-19 period y/y GDP growth swung between −16.2% and +18.5%. The naive forecast is not affected by this choice. A sensitivity run with no exclusion is reported below.10- Availability at the last origin (2026-04): GDP up to 2026-02-01 and employment up to 2026-03-01.1112## Method13- **Naive forecast:** ŷ(t+h) = gdp_yoy(t−2) for both h=1 and h=3.14- **Model `direct_ardl_emp`:** a direct OLS regression estimated separately for each horizon, with k = h+2: gdp_yoy(m+k) = a + b·gdp_yoy(m) + c·emp_yoy(m+1) + u. This mirrors the forecasting setup exactly: from GDP at t−2 and employment at t−1, predict GDP at t+h.15 - It is re-estimated at every origin on an expanding window that starts in 1998.16 - A training pair is used only if its target month is ≤ t−2 and its employment month is ≤ t−1. Consequently the latest training target is t−2.17 - The forecast plugs in gdp_yoy(t−2) and emp_yoy(t−1).18 - There is no model selection inside the loop. I fixed the specification once, before evaluating it.19- **Error measures:** RMSE and MAE over the 48 origins for each horizon, computed against current-vintage actuals.20- **Ledger:** `out/forecasts.csv` has 192 rows and records, for every row, the latest target and predictor months used.2122## Results23| Horizon | RMSE naive | MAE naive | RMSE model | MAE model | 1 − RMSE ratio |24|---|---|---|---|---|---|25| h=1 | 0.814 | 0.642 | 0.743 | 0.604 | 0.087 |26| h=3 | 1.140 | 0.872 | 0.902 | 0.753 | 0.208 |2728All values are in percentage points. The model beats the naive forecast on both RMSE and MAE at both horizons: RMSE falls by about 9% at h=1 and 21% at h=3. The last estimation sample (origin 2026-04, h=3) contains 306 observations; the h=1 sample is slightly larger.2930## Uncertainty31- **Diebold–Mariano tests** (squared-error loss, Newey–West variance with h−1 lags, Harvey–Leybourne–Newbold correction, t(47) reference):32 - h=1: statistic 2.03, two-sided p = 0.048.33 - h=3: statistic 1.65, p = 0.105.34 - With only 48 overlapping origins from one post-COVID episode, the gains are therefore borderline evidence at h=1 and not statistically significant at the 5% level at h=3.35- **Sensitivity to the COVID exclusion:** keeping the 2020–21 pairs in the training sample gives model RMSE 0.804 at h=1 (only 1% better than naive) and 0.794 at h=3 (better than the main specification). How large the gain is depends on how the pandemic period is handled. The direction, model beating naive, holds in both versions.36- No resampling was used, so no random seed.3738## Limitations and open issues39- The data are current vintage. The exercise simulates publication timing only, not the values first published, so the results have no real-time validity. Revisions to GDP and LFS data could change both the errors and the ranking.40- Not all of the gain can be credited to employment. The model also adds an intercept and estimates persistence (b < 1, so forecasts are pulled toward the mean), and that by itself may beat the random walk. I did not run a GDP-only AR benchmark, so how much employment itself contributes is not separated out.41- The 48 evaluation targets overlap, especially at h=3, and cover a single period of slowing growth, so the evidence about other periods is limited.42- The 1998 yoy values cannot be checked against the file's levels (see Data).43