# KalmanLike

##### Kalman Filtering

Use Kalman Filtering to find the (Gaussian) log-likelihood, or for forecasting or smoothing.

- Keywords
- ts

##### 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

- y
a univariate time series.

- mod
a list describing the state-space model: see ‘Details’.

- nit
the time at which the initialization is computed.

`nit = 0L`

implies that the initialization is for a one-step prediction, so`Pn`

should not be computed at the first step.- update
if

`TRUE`

the update`mod`

object will be returned as attribute`"mod"`

of the result.- n.ahead
the number of steps ahead for which prediction is required.

- phi, theta
numeric vectors of length \(\ge 0\) giving AR and MA parameters.

- Delta
vector of differencing coefficients, so an ARMA model is fitted to

`y[t] - Delta[1]*y[t-1] - …`

.- kappa
the prior variance (as a multiple of the innovations variance) for the past observations in a differenced model.

- SSinit
a string specifying the algorithm to compute the

`Pn`

part of the state-space initialization; see ‘Details’.- tol
tolerance eventually passed to

`solve.default`

when`SSinit = "Rossignol2011"`

.

##### Details

These functions work with a general univariate state-space model
with state vector `a`, transitions `a <- T a + R e`,
\(e \sim {\cal N}(0, \kappa Q)\) and observation
equation `y = Z'a + eta`,
\((eta\equiv\eta), \eta \sim {\cal N}(0, \kappa h)\).
The likelihood is a profile likelihood after estimation of
\(\kappa\).

The model is specified as a list with at least components

`T`

the transition matrix

`Z`

the observation coefficients

`h`

the observation variance

`V`

`RQR'``a`

the current state estimate

`P`

the current estimate of the state uncertainty matrix \(Q\)

`Pn`

the estimate at time \(t-1\) of the state uncertainty matrix \(Q\) (not updated by

`KalmanForecast`

).

`KalmanSmooth`

is the workhorse function for `tsSmooth`

.

`makeARIMA`

constructs the state-space model for an ARIMA model,
see also `arima`

.

The state-space initialization has used Gardner *et al*'s method
(`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
`SSinit`

is therefore recommended, notably also in
`arima()`

.
The `"Rossignol2011"`

method has been proposed and partly
documented by Raphael Rossignol, Univ. Grenoble, on 2011-09-20 (see
PR#14682, below), and later been ported to C by Matwey V. Kornilov.
It computes the covariance matrix of
\((X_{t-1},...,X_{t-p},Z_t,...,Z_{t-q})\)
by the method of difference equations (page 93 of Brockwell and Davis),
apparently suggested by a referee of Gardner *et al* (see p.314 of
their paper).

##### Value

For `KalmanLike`

, a list with components `Lik`

(the
log-likelihood less some constants) and `s2`

, the estimate of
\(\kappa\).

For `KalmanRun`

, a list with components `values`

, a vector
of length 2 giving the output of `KalmanLike`

, `resid`

(the
residuals) and `states`

, the contemporaneous state estimates,
a matrix with one row for each observation time.

For `KalmanSmooth`

, a list with two components.
Component `smooth`

is a `n`

by `p`

matrix of state
estimates based on all the observations, with one row for each time.
Component `var`

is a `n`

by `p`

by `p`

array of
variance matrices.

For `KalmanForecast`

, a list with components `pred`

, the
predictions, and `var`

, the unscaled variances of the prediction
errors (to be multiplied by `s2`

).

For `makeARIMA`

, a model list including components for
its arguments.

##### 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

Durbin, J. and Koopman, S. J. (2001).
*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.
*Applied Statistics*, **29**, 311--322.
10.2307/2346910.

R bug report PR#14682 (2011-2013) https://bugs.r-project.org/bugzilla3/show_bug.cgi?id=14682.

##### See Also

##### Examples

`library(stats)`

```
# NOT RUN {
## 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")
}
# }
```

*Documentation reproduced from package stats, version 3.6.0, License: Part of R 3.6.0*