繁体   English   中英

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

[英]How to forecast time series, including a seasonality factor in R

我有以下示例数据:

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

我想对time = 10units进行forecast

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

我如何在R做到这一点? 我已经看过auto.arima但是看来这不是路要走。

谢谢

通过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)

这是R中的完整示例。

没错,您可以打赌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 x~a*season+b等于a+b ,否则b 换句话说, a是季节效应和非季节效应之间的差。

线性回归fit <- lm(units ~ season, data= dt) a=21108156 summary(fit) a=21108156 fit <- lm(units ~ season, data= dt) ,给你a=21108156summary(fit)告诉你std误差a是6697979,因此观察值a=21108156有概率如果为0,则小于0.0161出现。因此,您可以合理地认为存在一个4周期的季节性,其机会大于1-0.0161 = 98.388%。

如果假设季节性是可乘的,则对变量dt$mult = dt$units * dt$season使用相同的推理。 这个时候a * dt$mult + b等于a * dt$units + b当季节性申请和b ,当它没有。 因此,季节性带来了a * dt$units的差异,即平均值乘以a=.1877=18.77% ,显着性为0.01471=1-98.5%

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM