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:
srwbeatsrw,srpbeatsrp. 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 —
srworintercept;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
Entropic tilting — the first rung: reweight the forecast density without touching the model
Scenario plausibility — the second: force a path, and price it