ekpf_filter | R Documentation |
Function ekpf_filter
performs a extended Kalman particle filtering
with stratification resampling, based on Van Der Merwe et al (2001).
ekpf_filter(model, particles, ...)
## S3 method for class 'ssm_nlg'
ekpf_filter(
model,
particles,
seed = sample(.Machine$integer.max, size = 1),
...
)
model |
Model of class |
particles |
Number of particles as a positive integer. Suitable values depend on the model and the data, and while larger values provide more accurate estimates, the run time also increases with respect to the number of particles, so it is generally a good idea to test the filter first with a small number of particles, e.g., less than 100. |
... |
Ignored. |
seed |
Seed for the C++ RNG (positive integer). |
A list containing samples, filtered estimates and the corresponding covariances, weights, and an estimate of log-likelihood.
Van Der Merwe, R., Doucet, A., De Freitas, N., & Wan, E. A. (2001). The unscented particle filter. In Advances in neural information processing systems (pp. 584-590).
# Takes a while
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 <- ekpf_filter(model_nlg, particles = 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.