ssm_nlg | R Documentation |
Constructs an object of class ssm_nlg
by defining the corresponding
terms of the observation and state equation.
ssm_nlg(
y,
Z,
H,
T,
R,
Z_gn,
T_gn,
a1,
P1,
theta,
known_params = NA,
known_tv_params = matrix(NA),
n_states,
n_etas,
log_prior_pdf,
time_varying = rep(TRUE, 4),
state_names = paste0("state", 1:n_states)
)
y |
Observations as multivariate time series (or matrix) of length
|
Z, H, T, R |
An external pointers (object of class |
Z_gn, T_gn |
An external pointers (object of class |
a1 |
Prior mean for the initial state as object of class
|
P1 |
Prior covariance matrix for the initial state as object of class
|
theta |
Parameter vector passed to all model functions. |
known_params |
A vector of known parameters passed to all model functions. |
known_tv_params |
A matrix of known parameters passed to all model functions. |
n_states |
Number of states in the model (positive integer). |
n_etas |
Dimension of the noise term of the transition equation (positive integer). |
log_prior_pdf |
An external pointer (object of class
|
time_varying |
Optional logical vector of length 4, denoting whether the values of Z, H, T, and R vary with respect to time variable (given identical states). If used, this can speed up some computations. |
state_names |
A character vector containing names for the states. |
The nonlinear Gaussian model is defined as
y_t = Z(t, \alpha_t, \theta) + H(t, \theta) \epsilon_t,
(\textrm{observation equation})
\alpha_{t+1} = T(t, \alpha_t, \theta) + R(t, \theta)\eta_t,
(\textrm{transition equation})
where \epsilon_t \sim N(0, I_p)
, \eta_t \sim N(0, I_m)
and
\alpha_1 \sim N(a_1, P_1)
independently of each other, and functions
Z, H, T, R
can depend on \alpha_t
and parameter vector
\theta
.
Compared to other models, these general models need a bit more effort from
the user, as you must provide the several small C++ snippets which define the
model structure. See examples in the vignette and cpp_example_model
.
An object of class ssm_nlg
.
# Takes a while on CRAN
set.seed(1)
n <- 50
x <- y <- numeric(n)
y[1] <- rnorm(1, exp(x[1]), 0.1)
for(i in 1:(n-1)) {
x[i+1] <- rnorm(1, sin(x[i]), 0.1)
y[i+1] <- rnorm(1, exp(x[i+1]), 0.1)
}
pntrs <- cpp_example_model("nlg_sin_exp")
model_nlg <- ssm_nlg(y = y, a1 = pntrs$a1, P1 = pntrs$P1,
Z = pntrs$Z_fn, H = pntrs$H_fn, T = pntrs$T_fn, R = pntrs$R_fn,
Z_gn = pntrs$Z_gn, T_gn = pntrs$T_gn,
theta = c(log_H = log(0.1), log_R = log(0.1)),
log_prior_pdf = pntrs$log_prior_pdf,
n_states = 1, n_etas = 1, state_names = "state")
out <- ekf(model_nlg, iekf_iter = 100)
ts.plot(cbind(x, out$at[1:n], out$att[1:n]), col = 1:3)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.