bootstrap_filter {bssm} | R Documentation |
Bootstrap Filtering
Description
Function bootstrap_filter
performs a bootstrap filtering with
stratification resampling.
Usage
bootstrap_filter(model, particles, ...)
## S3 method for class 'lineargaussian'
bootstrap_filter(
model,
particles,
seed = sample(.Machine$integer.max, size = 1),
...
)
## S3 method for class 'nongaussian'
bootstrap_filter(
model,
particles,
seed = sample(.Machine$integer.max, size = 1),
...
)
## S3 method for class 'ssm_nlg'
bootstrap_filter(
model,
particles,
seed = sample(.Machine$integer.max, size = 1),
...
)
## S3 method for class 'ssm_sde'
bootstrap_filter(
model,
particles,
L,
seed = sample(.Machine$integer.max, size = 1),
...
)
Arguments
model |
A model object 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). |
L |
Positive integer defining the discretization level for SDE models. |
Value
List with samples (alpha
) from the filtering distribution and
corresponding weights (weights
), as well as filtered and predicted
states and corresponding covariances (at
, att
, Pt
,
Ptt
), and estimated log-likelihood (logLik
).
References
Gordon, NJ, Salmond, DJ, Smith, AFM (1993) Novel approach to nonlinear/non-Gaussian Bayesian state estimation. IEE Proceedings F, 140(2), p. 107-113.
Examples
set.seed(1)
x <- cumsum(rnorm(50))
y <- rnorm(50, x, 0.5)
model <- bsm_lg(y, sd_y = 0.5, sd_level = 1, P1 = 1)
out <- bootstrap_filter(model, particles = 1000)
ts.plot(cbind(y, x, out$att), col = 1:3)
ts.plot(cbind(kfilter(model)$att, out$att), col = 1:3)
data("poisson_series")
model <- bsm_ng(poisson_series, sd_level = 0.1, sd_slope = 0.01,
P1 = diag(1, 2), distribution = "poisson")
out <- bootstrap_filter(model, particles = 100)
ts.plot(cbind(poisson_series, exp(out$att[, 1])), col = 1:2)