我已经有118天的数据集了。我应该预测下一个28天的数值。我已经试用了下面的代码。但是我得到了28天相同的数值。你能帮我找到我的错误吗?谢谢。
library(forecast)
library(dplyr)
head(product)
ts_product = ts(product$Qty, start=1,frequency=1)
ts_product
plot(ts_product)
#predictions of 28 days
m_ets = ets(ts_product)
f_ets = forecast(m_ets, h=28)
plot(f_ets)Qty的数据由以下方法提供:
Qty = c(53、40、37、45、69、105、62、101、104、46、92、157、133、173、139、163、145、154、245、147、85、131、228、192、240、346、267、267、243、233、233、244、241、136、309、236、310、266、280、321、349、335、410、226、391、314、250、368、282、203、250、233、277、338、279、279、266、253、178238、126、279、258、350、277、226、287、180、268、191、279、214、133、292、212、307、232、165、107、121、188、198、154、128、85、106、67、63、88、107、56、41、59、27、58、80、75、93、54、14、36、107、82、83、112、37、57、9、51、47、57、68、97、25、45、69、89)
这是我得到的预言。
Point Forecast Lo 80 Hi 80 Lo 95 Hi 95
119 69.53429 2.089823 136.9788 -33.61312 172.6817
120 69.53429 -2.569107 141.6377 -40.73834 179.8069
121 69.53429 -6.944751 146.0133 -47.43031 186.4989
122 69.53429 -11.083248 150.1518 -53.75959 192.8282
123 69.53429 -15.019428 154.0880 -59.77946 198.8480
124 69.53429 -18.780346 157.8489 -65.53129 204.5999
125 69.53429 -22.387517 161.4561 -71.04798 210.1166
126 69.53429 -25.858385 164.9270 -76.35622 215.4248
127 69.53429 -29.207323 168.2759 -81.47798 220.5466
128 69.53429 -32.446345 171.5149 -86.43163 225.5002
129 69.53429 -35.585612 174.6542 -91.23273 230.3013
130 69.53429 -38.633808 177.7024 -95.89454 234.9631
131 69.53429 -41.598429 180.6670 -100.42854 239.4971
132 69.53429 -44.485993 183.5546 -104.84468 243.9133
133 69.53429 -47.302214 186.3708 -109.15172 248.2203
134 69.53429 -50.052133 189.1207 -113.35736 252.4259
135 69.53429 -52.740222 191.8088 -117.46844 256.5370
136 69.53429 -55.370474 194.4391 -121.49106 260.5596
137 69.53429 -57.946468 197.0150 -125.43070 264.4993
138 69.53429 -60.471431 199.5400 -129.29230 268.3609
139 69.53429 -62.948280 202.0169 -133.08032 272.1489
140 69.53429 -65.379664 204.4482 -136.79880 275.8674
141 69.53429 -67.768000 206.8366 -140.45144 279.5200
142 69.53429 -70.115495 209.1841 -144.04163 283.1102
143 69.53429 -72.424177 211.4928 -147.57245 286.6410
144 69.53429 -74.695908 213.7645 -151.04676 290.1153
145 69.53429 -76.932409 216.0010 -154.46719 293.5358
146 69.53429 -79.135268 218.2038 -157.83618 296.9048另外,你认为除了ets以外,我们在这里使用的任何其他模型都能解决这个问题吗?
发布于 2016-04-26 01:58:53
理解ets()
ets()函数是状态空间模型的一种指数平滑技术。默认情况下,ets()函数将尝试使用提供的frequency=参数通过model = 'ZZZ'自动将模型与时间序列相匹配。这尤其有问题,因为不正确指定的frequency=将导致生成非理想模型w.r.t到季节性,从而产生平坦的估计。
季节性
您可能认为应该在frequency=1对象中为日常数据指定ts()。然而,这是一种不正确的做法。事实上,指定frequency=的正确方法是理解R的“唯一”定义:
频率是每个季节的观测次数。
因此,我们需要关注数据的季节性。
有两个指导表可供参考。
第一个是宏视图:
Data Frequency
Annual 1
Quarterly 4
Monthly 12
Weekly 52第二种是微观观点:
Data Frequencies
Minute Hour Day Week Year
Daily 7 365.25
Hourly 24 168 8766
Half-hourly 48 336 17532
Minutes 60 1440 10080 525960
Seconds 60 3600 86400 604800 31557600在日常数据中有两个季节(例如frequency=选项)需要考虑:
7 (每周)和365.25 (每日)
有关更多信息,请参见:季节周期
重新审视估计
ets()不能正常工作的原因是由于所使用的季节性。(如frequency = 1)。通过在上述基础上对其进行更改,我们得到:
# Changed the frequency to 7
ts_product = ts(product$Qty, start=1, frequency=7)
# Predictions of 28 days
m_ets <- ets(ts_product)
f_ets <- forecast(m_ets, h = 28)
plot(f_ets)

替代模型
还有另外两种模型值得简短地研究:HoltWinters()和auto.arima()。的讨论可用于前面的:HoltWinters与ets
hw = HoltWinters(ts_product)
f_ets = predict(hw, n.ahead = 28, prediction.interval = T, level = 0.95)
plot(hw, f_ets)

运行ARIMA生成的auto.arima()
aa = auto.arima(ts_product)
f_ets = forecast(aa, h = 28)
plot(f_ets)

Misc数据说明
简要查看您的数据如下:
ts_product = ts(a, start=1, frequency=1)
plot(ts_product)

注意,在18-85次之间有一个相对较大的扰动,这会导致模型被认为是非平稳的。您可能希望首先尝试通过diff()对其进行差分,然后重复上面的内容。
此外,您可能希望获得全年的数据,而不是仅仅118天。
发布于 2016-04-26 00:36:13
看看?arima。例如:
mar=arima(product$Qty,order = c(1,0,1))
f_ar=forecast(mar, h=28)
plot(f_ar)

您的数据似乎具有季节性,尝试在ets或arima模型中使用这些信息。
https://stackoverflow.com/questions/36851269
复制相似问题