R中的时间序列分析
我已经收到了118天的数据集。我应该预测未来28天的数值。我已经试过下面的代码。但我得到的28天的值都是一样的。你能帮我找到我的错误吗?多谢各位R中的时间序列分析,r,time-series,forecasting,R,Time Series,Forecasting,我已经收到了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_et
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)
数量数据如下所示:
数量=c53、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, 233,
277, 338, 279, 279, 266, 253, 178, 238, 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之外,我们在这里使用的任何其他模型都能解决这个问题吗?请看一下arima。例如:
mar=arima(product$Qty,order = c(1,0,1))
f_ar=forecast(mar, h=28)
plot(f_ar)
您的数据似乎具有季节性,请尝试在ets或arima模型中使用该信息。查看arima。例如:
mar=arima(product$Qty,order = c(1,0,1))
f_ar=forecast(mar, h=28)
plot(f_ar)
您的数据似乎具有季节性,请尝试在ets或arima模型中使用该信息。了解ets
ets函数是状态空间模型的指数平滑技术。默认情况下,ets功能将尝试使用提供的频率=参数,通过model='ZZZ'自动将模型拟合到时间序列。这是一个特别有问题的问题,因为错误指定的频率=将导致非理想模型产生w.r.t到季节性,从而产生平差估计
季节性
您可能认为应该在ts对象中为每日数据指定frequency=1。然而,这是一种不正确的做法。事实上,指定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
有两个季节性因素,例如:频率=考虑日常数据的选项:
每周7次,每天365.25次 有关更多信息,请参阅: 重新审视估计 ets不能正常工作的原因是使用的季节性。e、 g.频率=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)
通过运行auto.ARIMA生成的ARIMA:
杂项数据说明
在下面简要查看您的数据:
ts_product = ts(a, start=1, frequency=1)
plot(ts_product)
注意,在时间18-85之间存在相对较大的扰动,这将导致模型被视为非平稳。您可能希望首先尝试通过diff进行差分,然后重复上述步骤
此外,您可能希望尝试获取全年的数据,而不是仅获取118天的数据 理解ets
ets函数是状态空间模型的指数平滑技术。默认情况下,ets功能将尝试使用提供的频率=参数,通过model='ZZZ'自动将模型拟合到时间序列。这是一个特别有问题的问题,因为错误指定的频率=将导致非理想模型产生w.r.t到季节性,从而产生平差估计
季节性
您可能认为应该在ts对象中为每日数据指定frequency=1。然而,这是一种不正确的做法。事实上,指定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
有两个季节性因素,例如:频率=考虑日常数据的选项:
每周7次,每天365.25次 有关更多信息,请参阅: 重新审视估计 ets不能正常工作的原因是使用的季节性。e、 g.频率=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)
通过运行auto.ARIMA生成的ARIMA:
杂项数据说明
在下面简要查看您的数据:
ts_product = ts(a, start=1, frequency=1)
plot(ts_product)
注意,在时间18-85之间存在相对较大的扰动,这将导致模型被视为非平稳。您可能希望首先尝试通过diff进行差分,然后重复上述步骤
此外,您可能希望尝试获取全年的数据,而不是仅获取118天的数据 通过'dput'@Coatless发布一些数据谢谢你的建议。我已经按照要求添加了数据。通过'dput'@Coatless发布一些数据。谢谢你的建议。我已按要求添加了数据。