如何预测时间序列,包括R中的季节性因素

时间:2018-07-31 07:50:30

标签: r time-series forecasting

我有以下示例数据:

library(data.table)
dt <- data.table('time' = c(1:10),
                    'units'= c(89496264,81820040,80960072,109164545,96226255,96270421,95694992,117509717,105134778,0))

我想在forecastunits做一个time = 10

我可以看到在time = 4*kk = 1,2,...的单位数量大大增加了,我想将其作为季节性因素。

我该如何在R中这样做?我调查了auto.arima,但看来这不是路要走。

谢谢

2 个答案:

答案 0 :(得分:1)

通过Prophet API,您可以通过加法模型轻松计算预测,该模型将非线性趋势与每年,每周和每天的季节性相吻合。

从上面的链接引用:

  

它最适合于具有强烈季节性影响和多个季节历史数据的时间序列。先知对丢失数据和趋势变化具有鲁棒性,通常可以很好地处理异常值。

install.packages(‘prophet’)
library(prophet)
model <- prophet(dt) # see ?prophet for details, this builds the model (like auto.arima)
future <- make_future_dataframe(model, periods = 10) # creates the "future" data 
forecast <- predict(model, future) # predictions

tail(forecast)

Here the complete Example in R.

答案 1 :(得分:1)

您是对的,您可以打赌98.4%的赌注表明t = 4 * k有季节性,其值为+21108156。如果假设季节性是乘性的而不是加性的,则可以得出98.5%的季节性,其值为+18.7%。

这是我的工作方式,无需使用现成的包装,这样您就可以提出各种类似的问题。

首先引入一个新的布尔变量dt$season = (dt$time %% 4)==0,对于t = 0,4,8,...为true(即= 1),否则为false(即= 0)。那么对于时间t = 0,4,8,...,函数x~a*season+b等于a+b,而对于其他地方,b等于。换句话说,a是季节效应和非季节效应之间的差异。

线性回归fit <- lm(units ~ season, data= dt),给您a=21108156,并且summary(fit)告诉您标准错误a为6697979,因此观测值{{1} }如果为0,则出现的可能性小于0.0161。因此,您可以合理地认为存在一个4周期的季节性,其发生正确的可能性大于1-0.0161 = 98.388%。

如果假设季节性是可乘的,则对变量a=21108156使用相同的推理。这次dt$mult = dt$units * dt$season等于a * dt$mult + b(适用于季节性),而不适用于a * dt$units + b。因此,季节性带来了b的差异,即用平均值a * dt$units乘以a=.1877=18.77%

这就是现成的包装的工作方式。