如何使用 R 中的 ets() 或 holt() 函数复制 Excel 2016 Forecast.ets 的结果?

问题描述 投票:0回答:1

我在 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 结果。

r excel
1个回答
0
投票

我很抱歉五年后才得到答复。我遇到了同样的问题,并且希望能够验证 Excel 和 R 之间的差异。我花了几个小时,但我能够解决这个问题,并认为我会将答案留在这里,以防其他人需要它。有两件事需要考虑。

  1. Excel 使用 ETS AAA 方法,这意味着您的模型应该是 火车.hw <- ETS(train, model ="AAA") # Here we declare the model. fctMTFit.hw <- forecast(MTFit.hw, h=2) # Here we forecast the model and specify how far we forecast out.
  2. 另一个问题是 Excel 会自动检测并确定要使用的平滑参数。平滑参数是 alpha、beta 和 gamma 值。要查找 Excel 中使用的值,您需要执行函数 Forecast.ets.stat。这将帮助您找到 Excel 选择的 alpha beta 和 gamma 值。获取这些值并将它们应用到 R 中的代码中。 雨.hw <- ETS(train, model ="AAA", alpha = .1 beta = .1 gamma = .1) This is just an example your values will be different. The alpha and the beta are the important values the gamma is less significant. You can also enter NULL to let the ETS function auto select the parameters.

如果您将这两个点合并到 R 中,那么您最终将得到与 Excel 相同或接近相同的结果。

现在开始困难的谈话。 Excel 计算平滑参数的方式与 R 中的 ETS 函数不同。R 中的 ETS 版本对时间序列模型中的最后一个值更敏感。因此,如果最新值显着上升或下降,则平滑参数会自动减少修正该变化的作用。而在 Excel 中,人们倾向于更加平滑这种差异。 Excel 和 R 中的 ETS 函数都会自动检测和应用平滑参数。不同之处在于两者如何编码来处理数据平滑。

希望回答对你有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.