我在 R 预测包中尝试了很多
holt()
和 ets()
的组合,但无法在 Excel 2016 及更高版本中复制 =forecast.ets
的结果。我在一家受监管的天然气公用事业公司工作,依赖无法验证/复制的黑盒 Excel 结果不是一个选择。我希望能够在 R 中复制 Excel 结果。
“问题”是,使用 Excel 中的数据
=forecast.ets
得到的预测比 R 中的 holt()
更准确。
我正在使用预测包中的
holt()
函数,因为我的数据不是季节性的。我尝试了各种组合来提供我自己的最佳 alpha 和 beta 值以及允许 holt()
设置它们。我已使用 Excel 创建的 alpha 和 beta 参数,但无法协调结果。
#Normally the data comes via ODBC, but this is the same thing
upc <- data_frame(Result=c(296,292,284,286,286,
273,282,276,273,294,284,290,293,293,288))
#Turn the table into a time series from 2003 to 2017
upc.ts <- ts(upc$Result, start=2003, end=2017, frequency=1)
#Use 2003 to 2015 to develop the model
train <- window(upc.ts, start=2003, end=2015)
#Use holt to get the forecast value for 2016 and 2017
holt.upc <- holt(train, h = 2)
#The result:
#Point Forecast Lo 80 Hi 80 Lo 95 Hi 95
#2016 298.1118 286.5946 309.6290 280.4977 315.7259
#2017 303.4814 290.4835 316.4792 283.6029 323.3599
对于 2016 年值,公式
=FORECAST.ETS(2016,B2:B14,A2:A14,0,0)
在 Excel 中 = 286.45(与 holt()
中的 298.11 相差甚远)。
2016年实际值为293.2。
对于 2017 年值,公式
=FORECAST.ETS(2017,B2:B14,A2:A14,0,0)
在 Excel 中 = 286.27(与 holt()
中的 303.48 相差甚远)。
2016年实际值为288.4。
我有 20 个类似的预测需要完成,其他的结果也类似。
我正在尝试使用 R 复制 Excel 结果。
我很抱歉五年后才得到答复。我遇到了同样的问题,并且希望能够验证 Excel 和 R 之间的差异。我花了几个小时,但我能够解决这个问题,并认为我会将答案留在这里,以防其他人需要它。有两件事需要考虑。
如果您将这两个点合并到 R 中,那么您最终将得到与 Excel 相同或接近相同的结果。
现在开始困难的谈话。 Excel 计算平滑参数的方式与 R 中的 ETS 函数不同。R 中的 ETS 版本对时间序列模型中的最后一个值更敏感。因此,如果最新值显着上升或下降,则平滑参数会自动减少修正该变化的作用。而在 Excel 中,人们倾向于更加平滑这种差异。 Excel 和 R 中的 ETS 函数都会自动检测和应用平滑参数。不同之处在于两者如何编码来处理数据平滑。
希望回答对你有帮助。