| dlmForecast {dlm} | R Documentation |
The function evaluates the expected value and variance of future observations and system states. It can also generate a sample from the distribution of future observations and system states.
dlmForecast(mod, nAhead = 1, method = c("plain", "svd"), sampleNew = FALSE)
mod |
An object of class "dlm", or a list with components
m0, C0,
FF, V, GG, and W, defining the model
and the parameters of the prior distribution. mod can also be
an object of class "dlmFiltered", such as the output from
dlmFilter. |
nAhead |
Number of steps ahead for which a forecast is requested. |
method |
method="svd" uses singular value decomposition
for the calculations. Corrently, only method="plain"
is implemented. |
sampleNew |
If sampleNew=n for an integer n, them a
sample of size n from the forecast distribution of states and
observables will be returned. |
A list with components
a | matrix of expected values of future states |
R | list of variances of future states |
f | matrix of expected values of future observations |
Q | list of variances of future observations |
newStates | list of matrices containing the simulated future values |
| of the states. Each component of the list corresponds | |
| to one simulation. | |
newObs | same as newStates, but for the observations. |
sampleNew=FALSE.
The function is currently entirely written in R and is not particularly fast.
Giovanni Petris GPetris@uark.edu
## Comparing theoretical prediction intervals with sample quantiles
set.seed(353)
n <- 20; m <- 1; p <- 5
mod <- dlmModPoly() + dlmModSeas(4, dV=0)
mod$W[] <- rwishart(2*p,p) * 1e-1
mod$m0[] <- rnorm(p, sd=5)
mod$C0[] <- diag(p) * 1e-1
new <- 100
fore <- dlmForecast(mod, nAhead=n, sampleNew=new)
ciTheory <- (outer(sapply(fore$Q, FUN=function(x) sqrt(diag(x))), qnorm(c(0.1,0.9))) +
as.vector(t(fore$f)))
ciSample <- t(apply(array(unlist(fore$newObs), dim=c(n,m,new))[,1,], 1,
FUN=function(x) quantile(x, c(0.1,0.9))))
plot.ts(cbind(ciTheory,fore$f[,1]),plot.type="s", col=c("red","red","green"),ylab="y")
for (j in 1:2) lines(ciSample[,j], col="blue")
legend(2,-40,legend=c("forecast mean", "theoretical bounds", "Monte Carlo bounds"),
col=c("green","red","blue"), lty=1, bty="n")