9. Robust forecasts

The economy’s long-run mean has moved — an inflation regime, a productivity slowdown, a new normal for interest rates — and the model does not know it.

A DSGE model, like almost every econometric model, forecasts by equilibrium correction: at first order, its forecast from today’s state is

ybar + S^h * (y(T) - ybar)

where ybar is the steady state and S the transition matrix. When the mean has shifted, the forecast keeps returning to the old ybar. The error this causes does not fade with the horizon; it grows towards the size of the shift. A better-specified model does not cure that, because the problem is not the dynamics — it is where they are heading.

rise.scenario.relocate keeps the model’s dynamics and replaces only the mean they return to:

mu + S^h * (y(T) - mu)

with mu a local, robust estimate of where the economy now is.

out = rise.scenario.relocate(m, history, Method="srw", Window=4, Horizon=12);

9.1. The devices

model       ybar                          the model as specified
rw          y(T)                          the random walk
srw         mean of the last Window obs.  the smooth random walk
rp          y(T) + S*inv(I-S)*dy(T)       the robust predictor
srp         mean of rp over the Window    the smooth robust predictor
intercept   model forecast + last one-step error, at every horizon

history holds every endogenous variable, most recent observation last. With real data those are the smoothed states, not only the observables — the model’s dynamics act on all of them.

The robust predictor is written for a single equation as x(T) + rho/(1-rho)*dx(T). S*inv(I-S) is its form for a system; on a one-equation model it is exactly the scalar formula.

9.2. What it buys, and what it costs

A small New Keynesian model, inflation forecasts, 300 simulated histories, forecast origins 4 to 24 quarters after the shift. RMSE relative to the model, averaged over horizons 1 to 12:

            level shift   slope break   no break
srw                0.80          0.75       1.19
rw                 0.84          0.76       1.24
intercept          0.80          0.75       1.20
srp                1.02          0.91       1.49
rp                 1.66          1.44       2.39

Below 1 beats the model. Three readings:

  • After a shift, the cheap devices beat the model: the smooth random walk and intercept correction cut the error by about a fifth.

  • Smoothing earns its keep: srw beats rw, srp beats rp. A local estimate from one observation is too noisy; averaging a few trades a little bias for much less variance.

  • The insurance has a premium. In the “no break” column there is nothing to correct. The random walks and intercept correction then cost about a fifth more error than simply trusting the model; the smooth robust predictor about half again, and the plain one more than double. Use them when you have reason to believe the mean has moved, not as a default.

9.3. Which device for which break

The robust predictor extrapolates the latest change. When the mean has shifted once and settled, that change is mostly noise, and the gain S*inv(I-S) — four, at persistence 0.8 — amplifies it. When the mean is trending, the change carries signal. So the predictor should improve as the trend steepens. It does:

slope of the new mean    relative RMSE at h1       at h12
(sd per quarter)         srw   srp    rp          srw   srp    rp
     0.00               1.04  1.11  1.41         1.33  1.74  3.01
     0.06               0.56  0.60  0.74         0.82  1.00  1.61
     0.15               0.29  0.31  0.34         0.59  0.64  0.84
     0.30               0.20  0.21  0.18         0.53  0.55  0.58
     0.60               0.17  0.17  0.11         0.51  0.52  0.49

The rule of thumb:

  • a level shift, or a gentle drift — srw or intercept;

  • a strong trend break — rp.

9.4. What it gives up

Each variable’s mean is relocated on its own. The relocated means are not, in general, a steady state of the model: ratios the model holds fixed need not hold between them. That is the price of forecasting around the model rather than with it. If you need the structure to hold, the model itself has to change.

Pass Variables to relocate only some means and keep the model’s steady state for the rest.

9.5. What it refuses

historyTooShort            fewer observations than the method needs
historyMissingVariables    a variable absent from the history
historyNotFinite           a gap in the history
historyRagged              variables of different lengths
unknownVariable            a name in Variables the model does not have
unitRootInDynamics         rp or srp on dynamics with a root at one
notSolved                  no first-order solution
switchingNotSupported      a regime-switching model

All carry the prefix RISE:scenario:. On a unit root the random walks still work; only the predictors, which divide by I - S, are refused.

9.6. References

  • Martinez, Castle and Hendry (2026), “Smooth robust multi-horizon forecasts”, presented at Model Invariance and Constancy in the Face of Large Shocks, Oslo.

  • Hendry, Castle and Doornik (2026), “A forecast-error taxonomy facing multiple shifts”, same conference.

  • Castle, Clements and Hendry (2015), “Robust approaches to forecasting”, International Journal of Forecasting 31(1), 99–112.

  • Hendry (2006), “Robustifying forecasts from equilibrium-correction systems”, Journal of Econometrics 135(1–2), 399–426.

  • Clements and Hendry (1998), Forecasting Economic Time Series, Cambridge University Press.

9.7. See also