首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用预测包auto.arima loop编写用于预测100个不同序列的循环?

如何使用预测包auto.arima loop编写用于预测100个不同序列的循环?
EN

Stack Overflow用户
提问于 2020-10-05 23:16:07
回答 1查看 176关注 0票数 0

我的系列有3个不同的列,第一个ID标签标识第一个插座,然后是时间标签,最后是测量。

我需要创建100个不同的系列(奥特莱斯)预测。首先,我需要为第一个门店设置ID子集,然后预测arima函数,最后收集每个门店7天前的预测。此外,我还需要在我的模型每小时,每周,每天假人。所以我需要xregs到auto.arima过程。

然而,我不能创建下面的代码,用一个循环来运行所有100个不同的ID。

代码语言:javascript
复制
df11 <-subset(df10,ID==288)%>%select(Tag,Measure)
sales.xts <- xts(df11[ ,c(-1)],order.by = df11$Tag) 
sales.xts_m<-sales.xts["2020-07-22/2020-10-04"]
dummies<- xts(Seasonaldummies_all[,-1],order.by = Seasonaldummies_all$Tag)
dummies_hd_m<-dummies_hd["2020-07-22/2020-10-04"]
model<-auto.arima(sales.xts_m,xreg=dummies_hd_m, biasadj = TRUE,max.p=7,max.q=7,seasonal=FALSE,test=c("kpss"),lambda = "auto",num.cores=15,stationary = TRUE)

你能向我展示一种通过应用函数或循环函数来完成这项工作的快速方法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-07 15:02:14

如果你想使用forecast包,你需要将你的数据转换成一个ts (mts)对象。为此,首先将您的数据从长格式转换为宽格式(从您在上面发布的图像中,我假设您的数据是长格式)。然后使用ts()函数创建一个ts()对象,如下例所示。

让我们生成一些示例ts数据

代码语言:javascript
复制
sales.xts_m <- ts(data.frame(AA = arima.sim(list(order=c(1,0,0), ar=.5), n=100, 
                                       mean = 12), 
                        AB = arima.sim(list(order=c(1,0,0), ar=.5), n=100, 
                                       mean = 12), 
                        AC = arima.sim(list(order=c(1,0,0), ar=.5), n=100, 
                                       mean = 11), 
                        BA = arima.sim(list(order=c(1,0,0), ar=.5), n=100, 
                                       mean = 10), 
                        BB = arima.sim(list(order=c(1,0,0), ar=.5), n=100, 
                                       mean = 14)), start = c(2000, 1), 
          frequency = 12)

nts <- ncol(sales.xts_m) # number of time series

h <- 12 # forecast horizon

示例xreg

代码语言:javascript
复制
dummies_hd_m <- forecast::seasonaldummy(sales.xts_m[,1])

dummies_hd_m_future <- forecast::seasonaldummy(sales.xts_m[,1], h = h)

mylist <- list()

fc <- matrix(nrow = h, ncol = nts)

如果您需要保留模型

模型将在mylist中,并以fc格式对每个ts进行点预测

代码语言:javascript
复制
for (i in 1:nts) {
  mylist[[i]] <- auto.arima(sales.xts_m[,i],xreg=dummies_hd_m, biasadj = TRUE,
                            max.p=7,max.q=7,seasonal= FALSE,test=c("kpss"),
                            lambda = "auto",num.cores=15,stationary = TRUE ) 
  fc[,i] <- forecast(mylist[[i]], h=h, xreg = dummies_hd_m_future)$mean
  
}

#ts names 
colnames(fc) <- colnames(sales.xts_m)

如果您不需要保存模型

代码语言:javascript
复制
fc <- matrix(nrow = h, ncol = nts)

for (i in 1:nts) {
  fc[,i] <- forecast(auto.arima(sales.xts_m[,i],xreg=dummies_hd_m, biasadj = TRUE,
                                max.p=7,max.q=7,seasonal=FALSE,test=c("kpss"),
                                lambda = "auto",num.cores=15,stationary = TRUE ), h=h, 
                     xreg = dummies_hd_m_future)$mean
  
}

#ts names 
colnames(fc) <- colnames(sales.xts_m)

如果要在项目中使用ML模型

代码语言:javascript
复制
devtools::install_github("Akai01/caretForecast")

library(caretForecast)


nts <- ncol(sales.xts_m) # mumber of time series

h <- 12 # forecast horizon

fc <- matrix(nrow = h, ncol = nts)

示例:线性核的支持向量机。您只需更改caret_method参数即可使用其他模型,例如caret_method = "ridge“或caret_method = "rf”等。Ref:https://github.com/Akai01/caretForecast

代码语言:javascript
复制
for (i in 1:nts) {
  fc[,i] <- forecast(ARml(sales.xts_m[,i], maxlag = 12, xreg = dummies_hd_m,
                          caret_method = "svmLinear", seasonal = FALSE ), 
                     h=h, xreg = dummies_hd_m_future)$mean
  
}

colnames(fc) <- colnames(sales.xts_m)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64211445

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档