This takes a MARSS::marssMLE object (fitted or not) and estimates
parameters. Note this is the TMB method for the MARSS::MARSSfit generic.
The typical use would be to call as MARSS(data, method="TMB")
.
# S3 method for TMB
MARSSfit(x, fun = 1, ...)
A properly formatted MARSS::marssMLE object ready for fitting.
A debugging option to switch between estimate_marss() and estimate_marss2()
not used
The MARSS::marssMLE object which was passed in, with additional components:
method
: From the call or argument method if user passed that in.
kf
: Kalman filter output.
iter.record
: If x$control$trace = TRUE
, then this is the $message
value from stats::optim()
or stats::nlminb()
plus the output from the TMB::MakeADFun()
call and the output from the optimization function.
numIter
: Number of iterations needed for convergence.
convergence
: Did estimation converge successfully?
convergence=0
: Converged in less than x$control$maxit
iterations and no evidence of degenerate solution.
convergence=3
: No convergence diagnostics were computed because all parameters were fixed thus no fitting required.
convergence=-1
: No convergence diagnostics were computed because the MLE object was not fit (called with fit=FALSE). This is not a convergence error just information. There is not par element so no functions can be run with the object.
convergence=1
: Maximum number of iterations x$control$maxit
was reached before convergence.
For other convergence errors, seestats::optim()
or stats::nlminb()
.
logLik
: Log-likelihood.
states
: State estimates from the Kalman smoother.
states.se
: Confidence intervals based on state standard errors, see caption of Fig 6.3 (p. 337) in Shumway & Stoffer (2006).
errors
: Any error messages.
Restrictions
V0 fixed (not estimated)
Q and R cannot be time-varying (at the moment)
opt.control
is what is passed to the control argument in nlminb()
or optim()
. If you use fit <- MARSS(data, method="TMB")
, this will be set to appropriate defaults which you can see via fit$control
. But if you call estimate_marss()
with a marssMLE object from a call such as MARSS(data, method="kem")
(so not a TMB method), you will need to set opt.control
if you want values different from the base defaults for those functions. Note as a shortcut for nlminb()
, you can set both eval.max
, iter.max
to the same value with opt.control=list(maxit=1000)
. Note, if you pass in opt.control
, this will replace all values currently in fit$control
that are associated with the optimizer function.
The defaults set in MARSS::MARSS()
are
nlminb
: eval.max = 5000
, iter.max = 5000
and trace = 0
.
optim
: maxit = 5000
and trace = 0
All other controls for the optimization function are left at NULL. You can
set other controls in the call MARSS(..., control=list(...))
.