Add a sparse AR(p) process to the state distribution. A sparse AR(p) is an AR(p) process with a spike and slab prior on the autoregression coefficients.
AddAutoAr(state.specification, y, lags = 1, prior = NULL, sdy = NULL, ...)
A list of state components. If omitted, an empty list is assumed.
A numeric vector. The time series to be modeled. This can
be omitted if
The maximum number of lags ("p") to be considered in the AR(p) process.
An object inheriting from
The sample standard deviation of the time series to be
modeled. Used to scale the prior distribution. This can be omitted
Extra arguments passed to
The model contributes alpha[t] to the expected value of y[t], where the transition equation is
alpha[t] = phi * alpha[t-1] + ... + phi[p] * alpha[t-p] + epsilon[t-1], with epsilon[t-1] ~ N(0, sigma^2)
The state consists of the last
p lags of
state transition matrix has
phi in its first row, ones along
its first subdiagonal, and zeros elsewhere. The state variance matrix
sigma^2 in its upper left corner and is zero elsewhere.
The observation matrix has 1 in its first element and is zero
This model differs from the one in
AddAr only in that
some of its coefficients may be set to zero.
state.specification with an AR(p) state component
added to the end.
Steven L. Scott email@example.com
Harvey (1990), "Forecasting, structural time series, and the Kalman filter", Cambridge University Press.
Durbin and Koopman (2001), "Time series analysis by state space methods", Oxford University Press.
n <- 100 residual.sd <- .001 # Actual values of the AR coefficients true.phi <- c(-.7, .3, .15) ar <- arima.sim(model = list(ar = true.phi), n = n, sd = 3) ## Layer some noise on top of the AR process. y <- ar + rnorm(n, 0, residual.sd) ss <- AddAutoAr(list(), y, lags = 6) # Fit the model with knowledge with residual.sd essentially fixed at the # true value. model <- bsts(y, state.specification=ss, niter = 500, prior = SdPrior(residual.sd, 100000)) # Now compare the empirical ACF to the true ACF. acf(y, lag.max = 30) points(0:30, ARMAacf(ar = true.phi, lag.max = 30), pch = "+") points(0:30, ARMAacf(ar = colMeans(model$AR6.coefficients), lag.max = 30)) legend("topright", leg = c("empirical", "truth", "MCMC"), pch = c(NA, "+", "o"))
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.