1.8. Diffuse initialization
State-space models with a nonstationary (unit-root) state – a random walk, a
stochastic trend, an integrated process – have no finite unconditional variance
for the diffuse directions, so the Kalman filter needs a diffuse initial
condition. RISE selects the initial covariance through the option
kf_init_variance:
[](default)The unconditional (Lyapunov) variance for the stationary states and
lyapunov_diffuse_factorfor the nonstationary ones.- a positive scalar \(\kappa\)
Harvey’s large-variance approximation: put \(\kappa\) on all states, optionally discarding a presample (
kf_presample) while the diffuseness washes out.'exact'The exact Durbin–Koopman diffuse filter: the diffuse directions are resolved in a short, exact diffuse phase and the likelihood is \(\kappa\)-free.
1.8.1. Why prefer exact
The big-\(\kappa\) likelihood carries a spurious offset \(-\tfrac{q}{2}\log(2\pi\kappa)\) (with \(q\) the number of diffuse directions) that depends on \(\kappa\). It therefore contaminates the log-likelihood, the marginal data density, and any model comparison. Exact initialization removes it: there is no \(\kappa\) to choose, no presample to discard, and no conditioning penalty (big-\(\kappa\) also loses accuracy as \(\kappa\) grows and the covariance becomes ill-conditioned).
1.8.2. Usage
m = solve(dsge_model('mymodel.rs'));
m = set(m, 'data', db);
[~, loglik] = filter(m, 'kf_init_variance', 'exact'); % 2nd output is the loglik
filter returns [filtration, LogLik, Incr, retcode, obj]. Use
kf_presample = 0 if you want the diffuse-period term included in the
likelihood (a presample discards it).
1.8.3. Scope
Exact diffuse initialization is available in the interacting-multiple-model
(imm, the default) engine and in the GPB-family regime-switching filters
immn, kim_nelson and gpbn. It works for both constant-parameter
and regime-switching models – a single-regime model is routed to imm by
default. To use one of the GPB filters, pin it with kf_user_algo (for example
filter(m, 'kf_init_variance', 'exact', 'kf_user_algo', @rise.engine.filtering.kim_nelson));
all four give the same diffuse loglik. If a filter that does not implement
exact is pinned (e.g. imm_o or the constrained cell filter), RISE warns and
falls back to big-\(\kappa\); those may gain exact support in future.
Exact diffuse is valid for the regular case: a diffuse block that is the same across regimes (a shared trend or unit root, with switching confined to transitory dynamics, loadings, or shock variances). Two guards keep it there. If the nonstationary invariant subspace differs across regimes (a regime-dependent diffuse block), or if the measurement-noise covariance \(H\) is non-diagonal (the univariate diffuse cascade assumes a diagonal \(H\)), RISE warns and falls back to big-\(\kappa\) rather than return a silently-wrong likelihood. The regime-dependent case is the home of the augmented (de Jong) formulation, which is derived but not yet implemented.
Smoothing over the diffuse period: kim_nelson runs a Durbin–Koopman
dual-accumulator backward recursion across the diffuse span. The shared
regime-switching smoother of imm, immn and gpbn smooths the diffuse
steps pairwise too, with the updated covariance \(P_* + \kappa P_\infty\),
\(\kappa = 10^8\): the exact-diffuse limit to \(O(1/\kappa)\).
The diffuse subspace is the nonstationary invariant subspace of the state
transition, computed from an ordered real Schur decomposition, so it is correct
not only for a random walk but for multiple and defective unit roots –
e.g. a local linear trend, whose transition [1 1; 0 1] is a Jordan block with
a two-dimensional diffuse subspace but a single eigenvector.
The worked example Estimation/diffuse_initialization/howto.m in the tutorials
prints the \(\kappa\)-offset and demonstrates its removal
(ll_bigk + \tfrac{q}{2}\log\kappa \to ll_{exact} at rate \(O(1/\kappa)\)).
Note
Reference: Durbin, J. and Koopman, S. J. (2012), Time Series Analysis by State Space Methods, 2nd ed., ch. 5 (the exact initial Kalman filter).