kf: Kalman filter

kalmanFilterR Documentation

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)

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.

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)

See Also

enkf, eakf

Examples

 # takes too long for R CMD check

  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)))
    
  }


pomp documentation built on Sept. 13, 2024, 1:08 a.m.