首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R,时间序列,Arima模型,预测,每日数据

R,时间序列,Arima模型,预测,每日数据
EN

Stack Overflow用户
提问于 2013-11-26 15:01:34
回答 1查看 7.2K关注 0票数 4

我正在尝试使用从2012年1月16日到2013年10月10日的每日数据进行一些需求预测。但预测只会返回糟糕的结果。有什么线索吗?

图中的数据看起来是这样的:存在每周和每月的季节性。即:平日需求较多,周末需求较少。

以下是预测图的外观:其中黑线是实际数据,蓝线是预测数据。

代码语言:javascript
复制
 x = ts(data, freq=7, start=c(3,2))
 fit <- auto.arima(x)
 pred <- forecast(fit, h=300)

我做了很多关于如何用arima模型拟合日常数据的研究。由于有每周的季节性,所以我选择了freq=7。

然而,由于预测是糟糕的。有人很友好地指出了海德曼教授分享的一种方法,即用多种季节性来拟合模型。

https://stats.stackexchange.com/questions/74418/frequency-of-time-series-in-r/74426#74426

因此,我采纳了好家伙的建议,并使用上面链接中给出的两种方法对模型进行拟合。

方法1:使用tbats()函数。

代码语言:javascript
复制
x_new <- msts(x, seasonal.periods=c(7,7*52))
fit <- tbats(x_new)
fc <- forecast(fit, h=7*52)

我使用每周季节性7和每年季节性7*52。因为我还没有想出一个简单的方法来获得每月的季节性数据。根据结果,预测也不是很好。注意:如果我使用7*4作为每月的第二个季节周期,它给出的预测更差。

方法2:使用傅立叶作为xreg。

代码语言:javascript
复制
seas1 <- fourier(x, K=1)
seas2 <- fourier(ts(x,freq=7*52), K=1)
fit <- auto.arima(x, xreg=cbind(seas1,seas2))
seas1.f <- fourierf(x, K=1, h=7*52)
seas2.f <- fourierf(ts(x,freq=7*52), K=1, h=7*52)
fc1 <- forecast(fit, xreg=cbind(seas1.f, seas2.f))

我尝试了不同的K,但它不能改善预测。

因此,我被卡住了!因为预测有很大的偏差。谁能指出我的错误在哪里?或者我应该如何改进我的模型?

非常感谢!

EN

回答 1

Stack Overflow用户

发布于 2013-11-26 23:28:55

你错过了假期的影响,以及围绕假期和异常值的领先或滞后影响(脉冲异常值,水平变化,趋势变化,一周中一天的变化影响(即季节性脉冲))。如果你处理这些事情,那么你就不能很好地阅读一周中的一天模式。你能把你的数据上传到dropbox.com上让我看看吗?指定开始日期和数据来源的国家/地区。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20210504

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档