Description Usage Arguments Details Value Note Author(s) See Also Examples
Kalman filtering and smoothing for a Dynamic Linear Model, using the specified back-end for the computations.
1 2 3 4 5 6 7 |
yt |
matrix of observed values (one column per time step). |
model |
an object of class |
backend |
an optional argument which specifies the back-end to use for the computations. |
smooth |
an optional argument which specifies if the back-end shoud also run the smoothing algorithm. |
raw.result |
if TRUE, the raw results from the back-end will be stored in |
logLik |
an optional argument which specifies if the back-end shoud compute the log-likelihood. |
filter |
an optional argument which specifies if the back-end shoud also run the filtering algorithm. |
filt |
filtered |
This function will automatically load the adequate back-end package.
Currently, packages KFAS
(used by default), FKF
and dlm
are
supported. Refer to dlmodeler
for more information.
An object of class dlmodeler.filtered
which contains the following elements:
f |
matrix containing the one step ahead predictions E(y(t) | y(1),y(2)...y(t-1)) |
at |
matrix containing the one step ahead predicted state variables E(a(t) | y(1),y(2)...y(t-1)) |
Pt |
matrix containing the one step ahead predicted state covariance matrices cov(a(t) | y(1),y(2)...y(t-1)) |
logLik |
the value of the log-likelihood for the model |
backend |
a character string indicating which back-end was used for the computation |
raw.result |
the raw result from the back-end, or NA if it wasn't requested |
Or an object of class dlmodeler.smoothed
which contains the following elements:
at |
matrix containing the one step ahead smoothed state variables E(a(t) | y(1),y(2)...y(n)) |
Pt |
matrix containing the one step ahead predicted state covariance matrices cov(a(t) | y(1),y(2)...y(n)) |
backend |
a character string indicating which back-end was used for the computation |
raw.result |
the raw result from the back-end, or NA if it wasn't requested |
Package dlm
does not offer a way to obtain the
log-likelihood and the filtered values at the same time (as of v1.1-2).
The log-likelihood is not computed by default, but this can be done by using the
parameter logLik=TRUE
. The computation of the filtered values can also be
disabled with parameter filter=FALSE
if these values are not needed.
Package FKF
does not implement a smoothing algorithm (as of v0.1.1).
Cyrille Szymanski <cnszym@gmail.com>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | ## Not run:
require(dlmodeler)
# generate some data
N <- 365*5
t <- c(1:N,rep(NA,365))
a <- rnorm(N+365,0,.5)
y <- pi + cos(2*pi*t/365.25) + .25*sin(2*pi*t/365.25*3) +
exp(1)*a + rnorm(N+365,0,.5)
# build a model for this data
m <- dlmodeler.build.polynomial(0,sigmaH=.5,name='level') +
dlmodeler.build.dseasonal(7,sigmaH=0,name='week') +
dlmodeler.build.tseasonal(365.25,3,sigmaH=0,name='year') +
dlmodeler.build.regression(a,sigmaH=0,name='reg')
m$name <- 'mymodel'
system.time(f <- dlmodeler.filter(y, m, raw.result=TRUE))
# extract all the components
m.state.mean <- dlmodeler.extract(f,m,type="state",
value="mean")
m.state.cov <- dlmodeler.extract(f,m,type="state",
value="covariance")
m.obs.mean <- dlmodeler.extract(f,m,type="observation",
value="mean")
m.obs.cov <- dlmodeler.extract(f,m,type="observation",
value="covariance")
m.obs.int <- dlmodeler.extract(f,m,type="observation",
value="interval",prob=.99)
par(mfrow=c(2,1))
# show the one step ahead forecasts & 99% prediction intervals
plot(y,xlim=c(N-10,N+30))
lines(m.obs.int$mymodel$upper[1,],col='light grey')
lines(m.obs.int$mymodel$lower[1,],col='light grey')
lines(m.obs.int$mymodel$mean[1,],col=2)
# see to which values the filter has converged:
m.state.mean$level[,N] # should be close to pi
mean(abs(m.state.mean$week[,N])) # should be close to 0
m.state.mean$year[1,N] # should be close to 1
m.state.mean$year[6,N] # should be close to .25
m.state.mean$reg[,N] # should be close to e
# show the filtered level+year components
plot(m.obs.mean$level[1,]+m.obs.mean$year[1,],
type='l',ylim=c(pi-2,pi+2),col='light green',
ylab="smoothed & filtered level+year")
system.time(s <- dlmodeler.smooth(f,m))
# show the smoothed level+year components
s.obs.mean <- dlmodeler.extract(s,m,type="observation",
value="mean")
lines(s.obs.mean$level[1,]+s.obs.mean$year[1,],type='l',
ylim=c(pi-2,pi+2),col='dark green')
## End(Not run)
|
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.