使用`dygraphs`绘制`预测'预测

时间:2017-04-26 03:44:06

标签: r forecasting dygraphs

我想使用forecast绘制dygraphs套餐时间序列模型的预测。 documentation建议采用以下方法进行实际预测:

hw <- HoltWinters(ldeaths)
p <- predict(hw, n.ahead = 36, prediction.interval = TRUE)
all <- cbind(ldeaths, p)

dygraph(all, "Deaths from Lung Disease (UK)") %>%
  dySeries("ldeaths", label = "Actual") %>%
  dySeries(c("p.lwr", "p.fit", "p.upr"), label = "Predicted")

导致: enter image description here

关于绘制对象all的有趣之处在于它的类:

> class(all) [1] "mts" "ts" "matrix"

> is.mts(all)
[1] TRUE
> is.ts(all)
[1] TRUE
> is.matrix(all)
[1] TRUE

str提供了有关对象all的更多信息:

> str(all)
 Time-Series [1:108, 1:4] from 1974 to 1983: 3035 2552 2704 2554 2014 ...
 - attr(*, "dimnames")=List of 2
  ..$ : NULL
  ..$ : chr [1:4] "ldeaths" "p.fit" "p.upr" "p.lwr"

更多检查显示all是一个数组:

> tail(all)
         ldeaths     p.fit    p.upr     p.lwr
Jul 1982      NA 1128.3744 1656.127  600.6217
Aug 1982      NA  948.6089 1478.090  419.1282
Sep 1982      NA  960.1201 1491.429  428.8112
Oct 1982      NA 1326.5626 1859.802  793.3235
Nov 1982      NA 1479.0320 2014.306  943.7583
Dec 1982      NA 1929.8349 2467.249 1392.4206
> dim(all)
[1] 108   4
> is.array(all)
[1] TRUE

我无法使用forecast

中的预测创建此类对象

使用我的forecast模型unemp.mod,我创建了预测:

> f <- forecast(unemp.mod)
> f
         Point Forecast    Lo 80    Hi 80    Lo 95    Hi 95
Apr 2017       4.528274 4.287324 4.769224 4.159773 4.896775
May 2017       4.515263 4.174337 4.856189 3.993861 5.036664
Jun 2017       4.493887 4.055472 4.932303 3.823389 5.164386
Jul 2017       4.479992 3.936385 5.023599 3.648617 5.311367
Aug 2017       4.463073 3.807275 5.118871 3.460116 5.466030

虽然它看起来与示例中的数组类似,但它是一个完全不同的对象:

> class(f)
[1] "forecast"
> str(f)
List of 10 <truncated>

如果我尝试使用基本R&#39; predict生成预测,就像示例中一样,我最后还会得到一个列表对象:

> predict(unemp.mod, n.ahead = 5, prediction.interval = TRUE)
$pred
          Apr      May      Jun      Jul      Aug
2017 4.528274 4.515263 4.493887 4.479992 4.463073

$se
           Apr       May       Jun       Jul       Aug
2017 0.1880140 0.2660260 0.3420974 0.4241788 0.5117221

是否有人建议如何根据dygraphs模型预测使用forecast创建正确的对象?

2 个答案:

答案 0 :(得分:4)

在对forecast(model)生成的列表进行进一步调查后,我注意到实际值和点预测以ts个对象的形式给出,上下界与{{1}的格式相同} HoltWinters的例子。我创建了一个函数,用于创建绘制假设dygraphs

所需的数组
forecast_obj <- forecast(model)

请注意,下限和上限是二维数组。由于gen_array <- function(forecast_obj){ actuals <- forecast_obj$x lower <- forecast_obj$lower[,2] upper <- forecast_obj$upper[,2] point_forecast <- forecast_obj$mean cbind(actuals, lower, upper, point_forecast) } 不支持多个预测间隔,因此我只挑选一对(95%)。

然后我使用以下内容绘制结果数组:

dygraphs

导致此图表:

enter image description here

答案 1 :(得分:3)

?dygraphs::dygraph中,data参数必须为

  

时间序列数据或数字数据。对于时间序列,这必须是   xts对象或可转换为xts的对象。对于数字   数据,这必须是一个命名列表或数据框,第一个   element / column提供x轴值和所有后续值   元素/列提供一个或多个y值系列。

因此,您需要使用summary从预测类中提取数据。将其转换为xts类,然后使用dygraph

library(forecast)
f <- forecast(ldeaths)

#use summary to get the model fit by forecast package
df <- summary(f)

#convert into a Time-Series class
dfTs <- xts(df, as.Date(paste("01", rownames(df)), "%d %b %Y"))

#plot
dygraph(dfTs)