Learn R Programming

pomp (version 6.3)

kalmanFilter: Kalman filter

Description

The basic Kalman filter for multivariate, linear, Gaussian processes.

Usage

kalmanFilter(object, X0 = rinit(object), A, Q, C, R, tol = 1e-06)

Value

A named list containing the following elements:

object

the ‘pomp’ object

A, Q, C, R

as in the call

filter.mean

\(E[X_t|y^*_1,\dots,y^*_t]\)

pred.mean

\(E[X_t|y^*_1,\dots,y^*_{t-1}]\)

forecast

\(E[Y_t|y^*_1,\dots,y^*_{t-1}]\)

cond.logLik

\(f(y^*_t|y^*_1,\dots,y^*_{t-1})\)

logLik

\(f(y^*_1,\dots,y^*_T)\)

Arguments

object

a pomp object containing data;

X0

length-m vector containing initial state. This is assumed known without uncertainty.

A

\(m\times m\) latent state-process transition matrix. \(E[X_{t+1} | X_t] = A.X_t\).

Q

\(m\times m\) latent state-process covariance matrix. \(Var[X_{t+1} | X_t] = Q\)

C

\(n\times m\) link matrix. \(E[Y_t | X_t] = C.X_t\).

R

\(n\times n\) observation process covariance matrix. \(Var[Y_t | X_t] = R\)

tol

numeric; the tolerance to be used in computing matrix pseudoinverses via singular-value decomposition. Singular values smaller than tol are set to zero.

Details

If the latent state is \(X\), the observed variable is \(Y\), \(X_t \in R^m\), \(Y_t \in R^n\), and $$X_t \sim \mathrm{MVN}(A X_{t-1}, Q)$$ $$Y_t \sim \mathrm{MVN}(C X_t, R)$$ where \(\mathrm{MVN}(M,V)\) denotes the multivariate normal distribution with mean \(M\) and variance \(V\). Then the Kalman filter computes the exact likelihood of \(Y\) given \(A\), \(C\), \(Q\), and \(R\).

See Also

enkf, eakf

Examples

Run this code
if (require(dplyr)) {

  gompertz() -> po

  po |>
    as.data.frame() |>
    mutate(
      logY=log(Y)
    ) |>
    select(time,logY) |>
    pomp(times="time",t0=0) |>
    kalmanFilter(
      X0=c(logX=0),
      A=matrix(exp(-0.1),1,1),
      Q=matrix(0.01,1,1),
      C=matrix(1,1,1),
      R=matrix(0.01,1,1)
    ) -> kf

  po |>
    pfilter(Np=1000) -> pf

  kf$logLik
  logLik(pf) + sum(log(obs(pf)))

}

Run the code above in your browser using DataLab