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 MARSSkemdat = 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