% File src/library/stats/man/KalmanLike.Rd % Part of the R package, https://www.R-project.org % Copyright 1995-2018 R Core Team % Distributed under GPL 2 or later \name{KalmanLike} \alias{KalmanLike}%-> ../R/Kalman.R \alias{KalmanRun} \alias{KalmanSmooth} \alias{KalmanForecast} \alias{makeARIMA}%-> ../R/arima.R \title{\I{Kalman} Filtering} \description{ Use \I{Kalman} Filtering to find the (Gaussian) log-likelihood, or for forecasting or smoothing. } \usage{ KalmanLike(y, mod, nit = 0L, update = FALSE) KalmanRun(y, mod, nit = 0L, update = FALSE) KalmanSmooth(y, mod, nit = 0L) KalmanForecast(n.ahead = 10L, mod, update = FALSE) makeARIMA(phi, theta, Delta, kappa = 1e6, SSinit = c("Gardner1980", "Rossignol2011"), tol = .Machine$double.eps) } \arguments{ \item{y}{a univariate time series.} \item{mod}{a list describing the state-space model: see \sQuote{Details}.} \item{nit}{the time at which the initialization is computed. \code{nit = 0L} implies that the initialization is for a one-step prediction, so \code{Pn} should not be computed at the first step.} \item{update}{if \code{TRUE} the update \code{mod} object will be returned as attribute \code{"mod"} of the result.} \item{n.ahead}{the number of steps ahead for which prediction is required.} \item{phi, theta}{numeric vectors of length \eqn{\ge 0} giving AR and MA parameters.} \item{Delta}{vector of differencing coefficients, so an ARMA model is fitted to \code{y[t] - Delta[1]*y[t-1] - \dots}.} \item{kappa}{the prior variance (as a multiple of the innovations variance) for the past observations in a differenced model.} \item{SSinit}{a string specifying the algorithm to compute the \code{Pn} part of the state-space initialization; see \sQuote{Details}.} \item{tol}{tolerance eventually passed to \code{\link{solve.default}} when \code{SSinit = "Rossignol2011"}.} } \details{ These functions work with a general univariate state-space model with state vector \samp{a}, transitions \samp{a <- T a + R e}, \eqn{e \sim {\cal N}(0, \kappa Q)}{e ~ N(0, kappa Q)} and observation equation \samp{y = Z'a + eta}, \eqn{(eta\equiv\eta), \eta \sim {\cal N}(0, \kappa h)}{eta ~ N(0, kappa h)}. The likelihood is a profile likelihood after estimation of \eqn{\kappa}{kappa}. The model is specified as a list with at least components \describe{ \item{\code{T}}{the transition matrix} \item{\code{Z}}{the observation coefficients} \item{\code{h}}{the observation variance} \item{\code{V}}{\samp{RQR'}} \item{\code{a}}{the current state estimate} \item{\code{P}}{the current estimate of the state uncertainty matrix \eqn{Q}} \item{\code{Pn}}{the estimate at time \eqn{t-1} of the state uncertainty matrix \eqn{Q} (not updated by \code{KalmanForecast}).} } \code{KalmanSmooth} is the workhorse function for \code{\link{tsSmooth}}. \code{makeARIMA} constructs the state-space model for an ARIMA model, see also \code{\link{arima}}. The state-space initialization has used Gardner \abbr{et al.}'s method (\code{SSinit = "Gardner1980"}), as only method for years. However, that suffers sometimes from deficiencies when close to non-stationarity. For this reason, it may be replaced as default in the future and only kept for reproducibility reasons. Explicit specification of \code{SSinit} is therefore recommended, notably also in \code{\link{arima}()}. The \code{"Rossignol2011"} method has been proposed and partly documented by \I{Raphael Rossignol}, Univ. Grenoble, on 2011-09-20 (see PR#14682, below), and later been ported to C by \I{Matwey V. Kornilov}. It computes the covariance matrix of \eqn{(X_{t-1},...,X_{t-p},Z_t,...,Z_{t-q})} by the method of difference equations (page 93 of \bibcite{Brockwell and Davis (1991)}), apparently suggested by a referee of Gardner \abbr{et al.}\sspace(see p.314 of their paper). } \value{ For \code{KalmanLike}, a list with components \code{Lik} (the log-likelihood less some constants) and \code{s2}, the estimate of \eqn{\kappa}{kappa}. For \code{KalmanRun}, a list with components \code{values}, a vector of length 2 giving the output of \code{KalmanLike}, \code{resid} (the residuals) and \code{states}, the contemporaneous state estimates, a matrix with one row for each observation time. For \code{KalmanSmooth}, a list with two components. Component \code{smooth} is a \code{n} by \code{p} matrix of state estimates based on all the observations, with one row for each time. Component \code{var} is a \code{n} by \code{p} by \code{p} array of variance matrices. For \code{KalmanForecast}, a list with components \code{pred}, the predictions, and \code{var}, the unscaled variances of the prediction errors (to be multiplied by \code{s2}). For \code{makeARIMA}, a model list including components for its arguments. } \section{Warning}{ These functions are designed to be called from other functions which check the validity of the arguments passed, so very little checking is done. } \references{ Brockwell, P. J. and Davis, R. A. (1991). \emph{Time Series: Theory and Methods}, second edition. Springer. Durbin, J. and Koopman, S. J. (2001). \emph{Time Series Analysis by State Space Methods}. Oxford University Press. Gardner, G, Harvey, A. C. and Phillips, G. D. A. (1980). Algorithm AS 154: An algorithm for exact maximum likelihood estimation of autoregressive-moving average models by means of Kalman filtering. \emph{Applied Statistics}, \bold{29}, 311--322. \doi{10.2307/2346910}. R bug report PR#14682 (2011-2013) \url{https://bugs.r-project.org/show_bug.cgi?id=14682}. } \seealso{ \code{\link{arima}}, \code{\link{StructTS}}. \code{\link{tsSmooth}}. } \examples{ ## an ARIMA fit fit3 <- arima(presidents, c(3, 0, 0)) predict(fit3, 12) ## reconstruct this pr <- KalmanForecast(12, fit3$model) pr$pred + fit3$coef[4] sqrt(pr$var * fit3$sigma2) ## and now do it year by year mod <- fit3$model for(y in 1:3) { pr <- KalmanForecast(4, mod, TRUE) print(list(pred = pr$pred + fit3$coef["intercept"], se = sqrt(pr$var * fit3$sigma2))) mod <- attr(pr, "mod") } } \keyword{ts}