MARSS-package
. MARSSkf()
is a native R implementation that allows x0 to be at t=0 or t=1 (data starts at t=1). MARSSkfas()
uses the Kalman filter-smoother functions in the KFAS package. This requires that x0 be at t=1 (kf.x0="x10"), but the functions use more efficient and more stable algorithms. Exact diffuse priors are also allowed in the KFAS Kalman filter function.MARSSkf( MLEobj )
marssMLE
object with the par
element of estimated parameters, model
element with the model description and data, and control
element for the fitting algorithm specimssm.params
and innovations.MLEobj$model$miss.value
.
The expected value of the initial state, x0, is an estimated parameter (or treated as a prior). This E(initial state) can be treated in two different ways. One can treat it as x00, meaning E(x at t=0 | y at t=0), and then compute x10, meaning E(x at t=1 | y at t=0), from x00. Or one can simply treat the initial state as x10, meaning E(x at t=1 | y at t=0). The approaches lead to the same parameter estimates, but the likelihood is written slightly differently in each case and you need your likelihood calculation to correspond to how the initial state is treated in your model (either x00 or x10). The EM algorithm in the MARSS package (MARSSkem
) follows Shumway and Stoffer's derivation and uses x00, while Ghahramani et al uses x10. The MLEobj$model$tinitx
argument specifies whether the initial states (specified with x0 and V0) is at t=0 (tinitx=0
) or t=1 (tinitx=1
).
The Kalman filter/smoother code has been altered to allow the user to specify partially deterministic models (some or all elements of the Q diagonal equal to 0) and partially perfect observation models (some or all elements of the R diagonal equal to 0). In addition, the code includes numerous checks to alert the user if matrices are becoming ill-conditioned and the algorithm unstable. In addition, the likelihood computation returns the exact likelihood when there are missing values (rather than the approximate likelihood typically used).
All parameters may be time-varying. See marssm
for a description of marssm model objects and of how time-varying parameters are specified.RShowDoc("UserGuide",package="MARSS")
to open a copy.MARSS
marssm
MARSSkem
dat = t(harborSeal)
dat = dat[2:nrow(dat),]
#you can use MARSS to construct a MLEobj
#MARSS calls MARSSinits to construct default initial values
MLEobj = MARSS(dat, fit=FALSE)
#MARSSkf needs a marss MLE object with the par element set
MLEobj$par=MLEobj$start
#Compute the kf output at the params used for the inits
kfList = MARSSkf( MLEobj )
Run the code above in your browser using DataLab