dlmodeler.extract: Extract the mean, covariance and prediction intervals for...

Description Usage Arguments Details Value Author(s) See Also Examples

View source: R/dlmodeler-core.R

Description

Extracts the mean (expectation), the variance-covariance matrix, and the prediction intervals for the states and observations of a filtered or smoothed DLM component.

Usage

1
2
3
4
dlmodeler.extract(fs, model, compnames=NULL,
                  type=c("observation","state"),
                  value=c("mean","covariance","interval"),
                  prob=.90)

Arguments

fs

filtered or smoothed dlmodeler, as a result from a call to dlmodeler.filter() or dlmodeler.smooth().

model

object of class dlmodeler which was used for filtering or smoothing.

compnames

an optional list of components to extract.

type

an optional string indicating the type to extract: observation (output, by default) or state.

value

an optional string indicating the value to extract: mean (expectation, by default), covariance matrix, or prediction intervals.

prob

an optional probability (default = 90%) for the computation of prediction intervals.

Details

A component is a named portion of the state vector matrix which can be extracted with this function. Components are automatically created when DLMs are added together which makes it easier to decompose it later into its building blocks (for example: level+trend+seasonal+cycle).

Let us assume model named m is constructed by adding models named m1 and m2. Typically, m will be constructed with two components named m1 and m1, which can be extracted by this function.

Value

When this function is used with a filtered dlmodeler, it returns the means and covariances of the one-step ahead forecasts for the components:

When this function is used with a smoothed dlmodeler, it returns the means and covariances of the smoothed components:

When the value interval is requested, this function returns a list for each component containing:

Author(s)

Cyrille Szymanski <cnszym@gmail.com>

See Also

dlmodeler, dlmodeler.filter, dlmodeler.smooth

Examples

 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)

dlmodeler documentation built on May 29, 2017, 11:33 a.m.