0

我已经使用 R 中的 dlmFilter [来自 dlm 包] 将动态线性模型拟合到一些数据。从所述过滤器中,我使用 dlmForecast 函数预测了提前 7 步。预测的结果非常好,但我想添加一个 95% 的置信区间,并且 [经过大量测试] 很难做到这一点。

我在下面模拟了一些类似的代码:

library(dlm)

data <- c(20.68502, 17.28549, 12.18363, 13.53479, 15.38779, 16.14770, 20.17536, 43.39321, 42.91027, 49.41402, 59.22262, 55.42043)

    mod.build <- function(par) {
  dlmModPoly(1, dV = exp(par[1]), dW = exp(par[2]))
}

# Returns most likely estimate of relevant values for parameters
mle <- dlmMLE(a2, rep(0,2), mod.build); #nileMLE$conv
if(mle$convergence==0) print("converged") else print("did not converge")

mod1 <- dlmModPoly(dV = v, dW = c(0, w))
mod1Filt <- dlmFilter(a1, mod1)
fut1 <- dlmForecast(mod1Filt, n = 7)

预测结果似乎非常好[尽管由于观察次数较少,该模型在某种程度上过度拟合了数据]。但是,我想添加一个 95% 的置信区间,并且一直在努力弄清楚如何做到这一点。

任何意见,将不胜感激?

干杯

4

1 回答 1

0
hwidth <- (outer(sapply(fut1$Q, FUN=function(x) sqrt(diag(x))), qnorm(0.025, lower = FALSE)) +as.vector(t(fut1$f)))
于 2020-07-02T01:30:57.817 回答