![](/img/trans.png)
[英]How to forecast time series for many products, including a seasonality factor in 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 = 10
的units
进行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)
没错,您可以打赌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=21108156
, summary(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.