Exposes the exact matrices qpmR itself uses for filtering, so other
estimators and filters can be built on top of a solved model. The
representation (in deviations from steady state) is
$$a_t = T a_{t-1} + R e_t, e_t ~ N(0, Qc)$$
$$y_t = Z a_t + d + u_t, u_t ~ N(0, H)$$
with d the steady state of the observables and P1 the stationary
(Lyapunov) covariance used to initialize the filter.
Arguments
- solution
A
qpm_solution.- observables
Character vector of observed variables (a subset of the declared variables). Default: all declared variables.
- measurement_error
Measurement-error standard deviation(s): a scalar recycled over observables, or a named vector.
- kappa
Diffuse-prior variance scale for unit-root directions (only used when the model has unit roots).
Details
For stationary models P1 is the exact stationary covariance. When
the model has unit roots (random-walk trends), an approximate diffuse
initialization is used: P1 solves the Lyapunov equation for the
slightly damped transition sqrt(1 - 1/kappa) * T, which reproduces
the stationary covariance in stable directions and a variance of order
kappa in unit-root directions, with the exact cross-coupling. Exact
Durbin-Koopman diffuse recursions are on the roadmap.
Examples
sol <- qpm_solve(qpm_template("bkl"))
ss <- state_space(sol, observables = c("pi", "i", "q"))
dim(ss$T); ss$d
#> [1] 22 22
#> pi i q
#> 5.000000e+00 9.000000e+00 -2.942091e-14