带假期的每周预测

问题描述 投票:8回答:3

我使用Hyndman的forecast包在每周级别产生一些准确的tbats预测,但我在假期有重大错误。如何在模型中包含假期?此外,有证据表明Arima不适合我的每周数据。所以假期必须以非芳香的方式添加。

我见过两种解决方案。一个https://robjhyndman.com/hyndsight/dailydata/显示了如何使用傅里叶项将假期添加为虚拟变量。问题是假变量采用1或0的形式。我知道不同的假期有不同的效果,1或0不会捕获。例如,黑色星期五与中国新年非常不同。

另一个解决方案是在这里看到https://robjhyndman.com/hyndsight/forecast7-part-2/,其中协变量nnetr变化用作auto.arima的替代品,具有季节性虚拟变量。问题是我没有看到如何编写R代码来输入我的假期。一个例子很有用。

r time-series forecasting
3个回答
7
投票

官方统计机构使用的时间序列建模基准是美国人口普查局的x13-arima-seats。它涉及季节性影响以及“参数化”假期,包括中国新年和复活节。

R通过seasonal软件包提供该功能,该软件包安装并使用底层的x13-arima-seat二进制文件。

此外,还有一个功能齐全的interactive website可以访问大多数(如果不是全部)功能。


6
投票

你读过Facebook的prophet包吗?

没有使用它,但从阅读文档,它似乎是一个快速实现也占假期:

https://cran.r-project.org/web/packages/prophet/prophet.pdf

实施一个基于加性模型预测时间序列数据的程序,其中非线性趋势与年度和每周季节性相适应,加上假期[...]

https://cran.r-project.org/web/packages/prophet/vignettes/quick_start.html


4
投票

以下做了我需要做的一切。

k=23
#forecast holidays
#bool list of future holidays
holidayf <- c(0,0,0,0,0,1,0,0,0,1,1,1,1,1,0,0,0)
h <- length(holidayf)

#given holidays
holiday <- df[,2] 
y <- ts(df[,1],start = 2011,frequency = 52)
z <- fourier(y, K=k)
zf <- fourier(y, K=k, h=h)
fit <- auto.arima(y, xreg=cbind(z,holiday), seasonal=FALSE)
fc <- forecast(fit, xreg=cbind(zf,holidayf), h=h)
fc %>% autoplot()
summary(fit)

为了解决不同假期有不同影响的问题,我简单地添加了额外的假日虚拟变量。例如,你可以制作一个好假期的矢量和坏假期的矢量和cbind然后把它们放在xreg。我没有在上面的代码中显示这一点,但它是直截了当的。

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