# kf: Kalman filter In pomp: Statistical Inference for Partially Observed Markov Processes

 kalmanFilter R 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)

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 July 1, 2024, 5:06 p.m.