Skip to content

Projection facility

Learning can push beliefs to values at which the model has no stable solution. The projection facility is the toolbox's only stabilising device. Terms: the PLM is the learners' forecasting rule; the ALM (actual law of motion) is the model with the current beliefs and shares plugged in.

Option Values (default first) Meaning
projection.facility 'plm_alm', 'alm', 'none' Check each PLM block, then the ALM; check the ALM only; no restriction. Project baseline: 'alm'

What each value does

'alm' (the project baseline). The PLMs are never touched; they may be explosive as long as the model stays solvable. Each quarter, after the belief update, the model with the new beliefs and shares is solved. If it has no stable solution, every belief (coefficients and moment matrices of every PLM equation) goes back to its value before this quarter's update, event projection_alm.

'plm_alm' (the default). First each PLM block is checked: a block whose new beliefs have a root above 1 in modulus (AR(1): \(|\beta| > 1\)) keeps its previous beliefs, event projection_plm; the other blocks update. Then the ALM is checked as under 'alm'. A PLM block is a set of PLM equations linked through their regressors: a VAR is one block, an auxiliary PLM belongs to the block that uses it, separate AR(1)s are separate blocks.

'none'. No restriction. A quarter that must be simulated without a model solution stops the run with hetlearn:engine:noSolution (date, stage, shares, each PLM block's largest root, the IRIS flag). Exception: an anchored model in which every forward-looking variable learns has no leads at all; it is simulated as it is, with explosive events.

Shares kept as the last step. Under 'alm' and 'plm_alm', if the model is still unstable with every belief at its previous value, the shares alone are the problem: last quarter's model shares stay in force for this quarter, event projection_alm_shares. Switching carries on underneath: the fitness and the discrete-choice shares n1, n2 keep updating, the next quarter tries the new shares again, and n1_model records the share actually in the model.

When 'alm' and 'plm_alm' stop. Only when there is no earlier solved model to fall back on: the initial beliefs and shares are already unstable at the first check. The error is hetlearn:engine:almUnstable.

The same rules apply in every stage that updates beliefs: the history (where the model is solved each quarter only for this check; 3-10 seconds for SW07 over 1966-2022), the inversion, the forecast, density draws, evaluation runs and Ramsey runs. Mode 'rational' skips the check. The endogenous gain updates from the forecast error whatever the facility does.

Examples

% The default: PLM blocks, then the ALM (variant v3_all_plm_alm)
cfg = v3_all(); cfg.id = 'v3_all_plm_alm';
cfg.projection.facility = 'plm_alm';

% The ALM only (the project baseline; variant v3_all_alm)
cfg = v3_all(); cfg.id = 'v3_all_alm';
cfg.projection.facility = 'alm';

% No facility: the run stops if the model loses its solution
cfg = a1_learn(); cfg.id = 'a1_nofacility';
cfg.projection.facility = 'none';
res = hetlearn.run(cfg, 'save', false);

Project-wide: o.projection.facility = 'alm'; in config/master_options.m.

Reading the events

res = hetlearn.run(v3_all(), 'save', false);
res.events                                       % date, type, variable, detail, stage
sum(strcmp(res.events.type, 'projection_alm'))   % beliefs reverted
Event Meaning
projection_plm 'plm_alm': a PLM block kept its beliefs (detail: block and root)
projection_alm No stable model solution; every belief went back to its value before the update
projection_alm_shares Still unstable with the old beliefs; last quarter's model shares stayed in force
explosive A model without leads was simulated without a stable solution

Check events.csv before reading a run that leans on the facility: a run whose shares are held for many quarters is mostly the facility's doing.

In the project

The facility never acts in Applications 1-6 (point forecasts) or in model variants 2 and 4. It matters for learning on all twelve forward-looking variables (model variant 3):

Scenario Facility Average inflation 2022Q3-2026Q2 (%) Events
a1_learn 'alm' 3.45 none
v3_all = v3_all_alm 'alm' 14.50 4 belief reverts, 17 kept shares
v3_all_plm_alm 'plm_alm' 2.72 87 PLM blocks kept

On 2026-10-20, with no facility, the same all-variable run averaged 33.48%. Elsewhere the facility acts in v1_mc_learn (model-consistent RE agents, 4 belief reverts), in 23 of the 500 learning mark-up density draws of Application 5, and in some real-time evaluation runs.