我有以下示例数据:
library(data.table)
dt <- data.table('time' = c(1:10),
'units'= c(89496264,81820040,80960072,109164545,96226255,96270421,95694992,117509717,105134778,0))
我想在forecast
为units
做一个time = 10
。
我可以看到在time = 4*k
,k = 1,2,...
的单位数量大大增加了,我想将其作为季节性因素。
我该如何在R
中这样做?我调查了auto.arima
,但看来这不是路要走。
谢谢
答案 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)
答案 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%
。
这就是现成的包装的工作方式。