SPB Git

spb/wp29_uqo

Public

# F3-conf-01 — Forecasting Canadian monthly GDP y/y growth under publication lags

# Question

At the end of each month t (48 origins, 2022-05 to 2026-04), how accurately can year-over-year growth of Canadian monthly real GDP for month t+1 and t+3 be forecast from what is published at that time? And does a model that also uses the more timely LFS employment growth beat the naive forecast (the latest published GDP y/y value, month t−2)?

# Data and exclusions

  • data/canada_gdp_employment.csv: 345 monthly rows, 1998-01 to 2026-09, current vintage (StatCan v65201210 GDP, v2062811 LFS employment). There are no duplicate months and no gaps. GDP is missing only for 2026-08/09 (not yet published). When the y/y columns are recomputed from the levels, they match to within 5e-5 pp (rounding to 4 decimals).
  • Information rule applied at every origin t: GDP months ≤ t−2 and employment months ≤ t−1 only. The code asserts this. Training targets must also be ≤ t−2. At the last origin (2026-04) the latest GDP month available is 2026-02 and the latest employment month is 2026-03.
  • Exclusion (decided in advance, not tuned on evaluation errors): training rows whose target or predictor month falls in 2020-03..2021-06 are dropped from model estimation. In that window the COVID collapse and rebound push y/y values from −16.2% to +18.5%, and these few points would dominate OLS. The naive forecast is unaffected, and no evaluation target falls in that window.
  • I used the y/y columns as given.

# Method

  • Naive: forecast = gdp_yoy(t−2) for both h=1 and h=3.
  • Model ardl_direct_emp: a direct h-step OLS regression, gdp_yoy(s+h) = a + b·gdp_yoy(s−2) + c·emp_yoy(s−1), fitted over pseudo-origins s. At each origin t it is re-estimated on an expanding window (1998 onward) using only pairs whose target month is ≤ t−2 (minus the COVID rows). The forecast plugs in gdp_yoy(t−2) and emp_yoy(t−1). There is no model selection: the specification was fixed before the evaluation was run. In the last estimation sample (origin 2026-04) there are 316 rows for h=1 and 312 for h=3.
  • Evaluation: RMSE and MAE over the 48 origins, per horizon, computed against current-vintage gdp_yoy. The full ledger is in out/forecasts.csv (192 rows).

# Results

horizon RMSE naive RMSE model MAE naive MAE model 1 − RMSE_m/RMSE_n
h=1 0.814 0.741 0.642 0.603 0.089
h=3 1.140 0.947 0.872 0.796 0.170

(Units are percentage points of y/y growth.) The employment-augmented model has lower RMSE and MAE than the naive forecast at both horizons: about 9% lower RMSE at h=1 and 17% at h=3. Both methods over-predict on average over 2022–2026. The mean error is +0.30 (naive) and +0.34 (model) pp at h=1, and +0.46 and +0.53 pp at h=3, consistent with growth slowing over the evaluation window.

# Uncertainty

  • I ran a Diebold–Mariano test on the squared-error loss differential (model − naive). It uses a Newey–West long-run variance with h+1 lags, because the effective distance from the last observed GDP month is h+2 and errors from consecutive origins overlap. It also applies the Harvey–Leybourne–Newbold small-sample correction and Student-t(47) reference.
    • h=1: DM = −1.33, p = 0.19.
    • h=3: DM = −1.26, p = 0.22.
  • The improvements are therefore not statistically distinguishable from zero at conventional levels with 48 overlapping, autocorrelated origins. The point estimates favour the model, but the evidence is weak.

# Limitations and open issues

  • The data are the current (revised) vintage. The exercise simulates publication timing only, not the first releases that a forecaster would actually have seen, so no real-time validity is claimed. Revisions to both GDP and LFS could change the results.
  • The 48 origins cover a single macro episode (post-COVID disinflation and slowdown), so the results may not generalise.
  • I did not run an ablation (the same model without employment). The gain could therefore partly come from the regression structure (mean reversion of y/y growth toward its historical average) rather than from employment itself. Whether employment specifically adds value is not evaluated.
  • The COVID exclusion window is a judgement call. I did not try other windows, to avoid tuning on the test sample.
  • The HAC/DM inference is approximate with T=48.
Files · main
Menu

Theme