SPB Git

spb/wp29_uqo

Public

# F3-conf-01: Forecasting Canadian monthly GDP y/y growth when data are published with a lag

# Question

At 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).

# Data and exclusions

  • 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).
  • 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.
  • 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.
  • Availability at the last origin (2026-04): GDP up to 2026-02-01 and employment up to 2026-03-01.

# Method

  • Naive forecast: ŷ(t+h) = gdp_yoy(t−2) for both h=1 and h=3.
  • 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.
    • It is re-estimated at every origin on an expanding window that starts in 1998.
    • 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.
    • The forecast plugs in gdp_yoy(t−2) and emp_yoy(t−1).
    • There is no model selection inside the loop. I fixed the specification once, before evaluating it.
  • Error measures: RMSE and MAE over the 48 origins for each horizon, computed against current-vintage actuals.
  • Ledger: out/forecasts.csv has 192 rows and records, for every row, the latest target and predictor months used.

# Results

Horizon RMSE naive MAE naive RMSE model MAE model 1 − RMSE ratio
h=1 0.814 0.642 0.743 0.604 0.087
h=3 1.140 0.872 0.902 0.753 0.208

All 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.

# Uncertainty

  • Diebold–Mariano tests (squared-error loss, Newey–West variance with h−1 lags, Harvey–Leybourne–Newbold correction, t(47) reference):
    • h=1: statistic 2.03, two-sided p = 0.048.
    • h=3: statistic 1.65, p = 0.105.
    • 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.
  • 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.
  • No resampling was used, so no random seed.

# Limitations and open issues

  • 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.
  • 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.
  • 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.
  • The 1998 yoy values cannot be checked against the file's levels (see Data).
Files · main
Menu

Theme