我想使用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")
关于绘制对象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
创建正确的对象?
答案 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
导致此图表:
答案 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)