我有一个包含“时间、区域、销售额”变量的数据集,我想使用 ARIMA 或 ETS(SES) 来预测每个区域的销售额library(forecast)
。总共有 70 个区域,每个区域都有 152 个观测值(3 年的数据)。像这样的事情:
Week Region Sales
01/1/2011 A 129
07/1/2011 A 140
14/1/2011 A 133
21/1/2011 A 189
... ... ...
01/12/2013 Z 324
07/12/2013 Z 210
14/12/2013 Z 155
21/12/2013 Z 386
28/12/2013 Z 266
因此,我希望 R 将每个区域视为不同的数据集并执行auto.arima
。我猜 for 循环应该是这里的理想选择,但我悲惨地失败了。
理想情况下,我希望它做的是一个 for 循环来运行类似这样的东西(每 152 个观测值有一个自动 arima):
fit.A <- auto.arima(data$Sales[1:152])
fit.B <- auto.arima(data$Sales[153:304])
....
fit.Z <- auto.arima(data$Sales[10490:10640])
我碰到this http://robjhyndman.com/hyndsight/batch-forecasting/但是在将数据帧转换为时间序列时,我得到的只是 NA。
任何帮助表示赞赏!谢谢。
尝试非常有效的data.table
包(假设您的数据集称为temp
)
library(data.table)
library(forecast)
temp <- setDT(temp)[, list(AR = list(auto.arima(Sales))), by = Region]
最后一步会将您的结果保存在temp
in a list
格式(因为这是可以存储此类对象的唯一格式)。
之后,您可以对这些列表执行任何您想要的操作,例如,检查它们:
temp$AR
#[[1]]
# Series: Sales
# ARIMA(0,0,0) with non-zero mean
#
# Coefficients:
# intercept
# 147.7500
# s.e. 12.0697
#
# sigma^2 estimated as 582.7: log likelihood=-18.41
# AIC=40.82 AICc=52.82 BIC=39.59
#
#[[2]]
# Series: Sales
# ARIMA(0,0,0) with non-zero mean
#
# Coefficients:
# intercept
# 268.2000
# s.e. 36.4404
#
# sigma^2 estimated as 6639: log likelihood=-29.1
# AIC=62.19 AICc=68.19 BIC=61.41
或者绘制预测(等等)
temp[, sapply(AR, function(x) plot(forecast(x, 10)))]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)