使用“笔图"绘制“预测"预测 [英] Plotting `forecast` prediction using `dygraphs`
问题描述
我想使用dygraphs
绘制forecast
包时间序列模型的预测. 文档建议采用以下方法进行实际预测:
I want to plot a forecast
package time series model's predictions using dygraphs
. The documentation suggests the following approach for predictions with actuals:
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
的有趣之处在于其类:
The interesting thing about the plotted object all
is its class:
> class(all)
[1] "mts" "ts" "matrix"
> class(all)
[1] "mts" "ts" "matrix"
> is.mts(all)
[1] TRUE
> is.ts(all)
[1] TRUE
> is.matrix(all)
[1] TRUE
str
提供有关对象all
的更多信息:
str
provides a little more information about the object 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
是一个数组:
More inspection shows that all
is an array:
> 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
包中的预测来创建此类对象
I am unable to create this type of object using predictions from the forecast
package
使用我的forecast
模型unemp.mod
创建预测:
With my forecast
model unemp.mod
I create predictions:
> 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
虽然看起来与示例中的数组相似,但它是一个完全不同的对象:
While it looks similar to the array in the example, it's a totally different object:
> class(f)
[1] "forecast"
> str(f)
List of 10 <truncated>
如果像示例中那样我尝试使用基数R的predict
生成预测,那么我还会看到一个列表对象:
If I try to generate the forecast using base R's predict
like in the example, I also wind up with a list object:
> 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
有人对基于forecast
模型预测如何使用dygraphs
创建正确的对象进行绘制有任何建议吗?
Does anyone have any suggestions on how to create the right object to plot using dygraphs
based on forecast
model predictions?
推荐答案
在进一步研究forecast(model)
生成的列表时,我注意到实际值和点预测均以ts
对象的形式给出,上下界在与dygraphs
HoltWinters示例相同的数组格式.我创建了一个函数,该函数创建用于绘制假设forecast_obj <- forecast(model)
所需的数组.
Upon further investigation of the list generated by forecast(model)
I noticed the actuals and point forecasts are given as ts
objects and the upper and lower bounds are in the same array format as the dygraphs
HoltWinters example. I created a function that creates the array needed for plotting supposing 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)
}
请注意,上下限是二维数组.由于dygraphs
不支持一个以上的预测间隔,因此我只选择一对(95%).
Note that the lower and upper bounds are 2 dimensional arrays. Since dygraphs
does not support more than one prediction interval I only pick one pair (the 95%).
然后我使用类似这样的图形绘制结果数组:
I then plot the resulting array using something like this:
dygraph(ts_array, main = graph_title) %>%
dyRangeSelector() %>%
dyRangeSelector(height = 40,
dateWindow = c("2011-04-01", "2019-4-01")) %>%
dySeries(name = "actuals", label = "actual") %>%
dySeries(c("lower","point_forecast","upper"), label = "Predicted") %>%
dyLegend(show = "always", hideOnMouseOut = FALSE) %>%
dyHighlight(highlightCircleSize = 5,
highlightSeriesOpts = list(strokeWidth = 2)) %>%
dyOptions(axisLineColor = "navy", gridLineColor = "grey")
此图的结果:
这篇关于使用“笔图"绘制“预测"预测的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!