tsmooth {timsac}R Documentation

Kalman Filter

Description

State estimation of user-defined state space model by Kalman filter.

Usage

  tsmooth(y,f,g,h,q,r,x0=NULL,v0=NULL,filter.end=NULL,predict.end=NULL,outmin=-10.0e+30,outmax=10.0e+30,missed=NULL,np=NULL,plot=FALSE)

Arguments

y l-dimensional time series y(n).
f m * m state transition matrix F(n), where m is the dimension of the state vector x(n).
g m * k matrix G(n), where k is the demension of the system noise.
h l * m matrix H(n).
q system noise variance Q(n).
r observational noise variance R(n).
x0 initial state vector X(0|0).
v0 initial state covariance matrix V(0|0).
filter.end end point of filtering.
predict.end end point of prediction.
outmin lower limits of observations.
outmax upper limits of observations.
missed start position of missed intervals.
np number of missed observations.
plot logical. If TRUE estimated smoothed state is plotted.

Details

The linear Gaussian state space model is

x(n) = F(n)x(n-1) + G(n)v(n),

y(n) = H(n)x(n) + w(n),

where y(n) is an l-dimensional time series, x(n) is m-dimensional state vector. v(n) and w(n) are k- and l-dimensional white noise sequences. F(n), G(n) and H(n) are m * m, m * k and l * m matrices, respectively. R(n) and Q(n) are k * k and l * l matrices, respectively. We asusume that E(v(n),w(n)) = 0, v(n) ~ N(0,Q(n)) and w(n) ~ N(0,R(n)). User should give all the matrices of a state space model and its parameters. In current version, F(n), G(n), H(n), Q(n), R(n) should be time invariant.

Value

mean.smooth mean vectors of the smoother.
cov.smooth variance of the smoother.
esterr estimation error.
lkhood log-likelihood.
aic AIC.

References

Kitagawa, G., (1993) Time series analysis programing (in Japanese). The Iwanami Computer Science Senes.

Kitagawa, G. and Gersch, W., (1996) Smoothness Priors Analysis of Time Series. Lecture Notes in Statistics, No.116, Springer-Verlag.

Examples

## AR model (l=1, m=10, k=1)
#  m <- 5
  m <- 10
  k <- 1
  data(Blsallfood)
  z1 <- exsar(Blsallfood, max.order=m)
  var <- z1$var
  tau2 <- z1$v.mle
  arcoef <- z1$arcoef.mle
  f <- matrix( 0.0e0, m, m )
  f[1,] <- arcoef
  for( i in 2:m ) f[i,i-1] <- 1
  g <- c(1, rep(0.0e0, m-1))
  h <- c(1, rep(0.0e0, m-1))
  q <- tau2
  r <- 0.0e0
  x0 <- rep(0.0e0, m)
  v0 <- matrix( 0.0e0, m, m )
  for( i in 1:m ) v0[i,i] <- var
  z <- tsmooth(Blsallfood, f, g, h, q, r, x0, v0, filter.end=156, predict.end=170, missed=c(41,101), np=c(30,20))

# plot mean vector and estimation error
  xss <- z$mean.smooth[1,] + mean(Blsallfood)
  cov <- z$cov.smooth
  c1 <- xss + sqrt(cov[1,])
  c2 <- xss - sqrt(cov[1,])
  err <- z$esterr
  par(mfcol=c(2,1))
  ymax <- as.integer(max(xss,c1,c2)+1)
  ymin <- as.integer(min(xss,c1,c2)-1)
  plot(c1, type='l', ylim=c(ymin,ymax), col=2, xlab="Mean vectors of the smoother XSS(1,) +/- standard deviation", ylab="")
  par(new=TRUE)
  plot(c2, type='l', ylim=c(ymin,ymax), col=3, xlab="", ylab="")
  par(new=TRUE)
  plot(xss, type='l', ylim=c(ymin,ymax), xlab="", ylab="")
  plot(err[,1,1], type='h', xlim=c(1,length(xss)),xlab="estimation error", ylab="")

## Trend model (l=3, m=2, k=2)
  l <- 3
#  n <- 400
  n <- 500
  m <- 2
  k <- 2
  f <- matrix( c(1, 0,   0, 1), nrow=m, ncol=m, byrow=TRUE )
  g <- matrix( c(1, 0,   0, 1), nrow=m, ncol=k, byrow=TRUE )
  h <- matrix( c(0.1, -0.1,   -0.05, 0.05,   0.2, 0.15), nrow=l, ncol=m, byrow=TRUE)
  q <- matrix( c(0.2*0.2, 0,   0, 0.3*0.3), nrow=k, ncol=k, byrow=TRUE)
  r <- matrix( c(0.2*0.2, 0, 0,   0, 0.1*0.1, 0,   0, 0, 0.15*0.15), nrow=l, ncol=l, byrow=TRUE)
  Xn <- matrix( 0, nrow=m, ncol=n )
  x1 <- rnorm(n+100, 0, 0.2)
  x2 <- rnorm(n+100, 0, 0.3)
  x1 <- cumsum(x1)[101:(n+100)]
  x2 <- cumsum(x2)[101:(n+100)]
  Xn[1,] <- x1-mean(x1)
  Xn[2,] <- x2-mean(x2)
  Yn <- matrix( 0, nrow=l, ncol=n )
  Wn <- matrix( 0, nrow=l, ncol=n )
  Wn[1,] <- rnorm(n, 0, 0.2)
  Wn[2,] <- rnorm(n, 0, 0.1)
  Wn[3,] <- rnorm(n, 0, 0.15)
  Yn <- h %*% Xn + Wn
  Yn <- aperm(Yn, c(2,1))
  x0 <- c(Xn[1,1], Xn[2,1])
  v0 <- matrix( c(var(Yn[,1]), 0,   0, var(Yn[,2])), 2, 2, byrow=TRUE)
  npe <- n+20
  z <- tsmooth(Yn, f, g, h, q, r, x0, v0, filter.end=n, predict.end=npe, missed=n/2, np=n/20)
 
# plot mean vector and state vector
  xss <- z$mean.smooth
  par(mfcol=c(m,1))
  for( i in 1:m ) {
    ymax <- as.integer(max(xss[i,],Xn[i,])+1)
    ymin <- as.integer(min(xss[i,],Xn[i,])-1)
    plot(Xn[i,], type='l', xlim=c(1,npe), ylim=c(ymin,ymax), xlab=paste(" red : mean.smooth[",i,",]  /  black : Xn[",i,",]"), ylab="")
    par(new=TRUE)
    plot(xss[i,], type='l', ylim=c(ymin,ymax), xlab="", ylab="", col=2)
  }


[Package timsac version 1.2.1 Index]