使用 auto.Arima() 和 xreg 进行 ARIMA 预测
Posted
技术标签:
【中文标题】使用 auto.Arima() 和 xreg 进行 ARIMA 预测【英文标题】:ARIMA forecasting with auto.Arima() and xreg 【发布时间】:2021-10-18 13:13:59 【问题描述】:我正在研究预测商店销售的项目以学习预测。到目前为止,我已经成功使用简单的 auto.Arima() 函数进行预测。但是为了使这些预测更准确,我可以使用协变量。我已经定义在这篇文章的帮助下,使用 xreg 运算符影响商店销售的假期、促销等协变量: 如何在 R 的 auto.arima() 中设置 xreg 参数?
但是我的代码失败了:
ARIMAfit
并给出错误提示:
model.frame.default(formula = x ~ xreg, drop.unused.levels = TRUE) 中的错误:可变长度不同(为 'xreg' 找到)另外:警告消息:在 !is.na(x) & !is.na(rowSums(xreg)) : 较长的对象长度不是较短对象长度的倍数
以下是我的数据集的链接:https://drive.google.com/file/d/0B-KJYBgmb044blZGSWhHNEoxaHM/view?usp=sharing
这是我的代码:
data = read.csv("xdata.csv")[1:96,]
View(data)
saledata <- ts(data[1:96,4],start=1)
View(saledata)
saledata[saledata == 0] <- 1
View(saledata)
covariates = cbind(DayOfWeek=model.matrix(~as.factor(data$DayOfWeek)),
Customers=data$Customers,
Open=data$Open,
Promo=data$Promo,
SchoolHoliday=data$SchoolHoliday)
View(head(covariates))
# Remove intercept
covariates <- covariates[,-1]
View(covariates)
require(forecast)
ARIMAfit <- auto.arima(saledata, xreg=covariates)//HERE IS ERROR LINE
summary(ARIMAfit)
还告诉我如何预测接下来的 48 天。我知道如何使用简单的 auto.Arima() 和 n.ahead 进行预测,但不知道在使用 xreg 时如何进行。
【问题讨论】:
【参考方案1】:几点。一,您可以将整个矩阵转换为 ts 对象,然后稍后隔离变量。其次,如果您在 arima 模型中使用协变量,那么您需要在预测样本外时提供它们。这可能意味着在为您感兴趣的变量生成预测之前预测每个协变量。在下面的示例中,为简单起见,我将数据分成两个样本。
dta = read.csv("xdata.csv")[1:96,]
dta <- ts(dta, start = 1)
# to illustrate out of sample forecasting with covariates lets split the data
train <- window(dta, end = 90)
test <- window(dta, start = 91)
# fit model
covariates <- c("DayOfWeek", "Customers", "Open", "Promo", "SchoolHoliday")
fit <- auto.arima(train[,"Sales"], xreg = train[, covariates])
# forecast
fcast <- forecast(fit, xreg = test[, covariates])
【讨论】:
Hii NBATrends 我不理解您编写的第二个代码,用于说明使用协变量进行样本预测的方法让我们拆分数据。窗口函数的作用以及此处指定的 end=90 和 start=91 的作用在窗口函数中 就像我说的那样,当您的 arima 模型中有协变量时,为了预测样本外的样本,您需要提供它们的值。在上面的示例中,我只是将数据分成两部分以进行说明。第一个样本用于拟合模型,第二个样本使用协变量进行预测。窗口函数可用于对数据进行子集化。 好的,因此从 1 到 90 的数据将用于训练模型,而 91 到 96(6 天)将用于预测这 6 天,并使用这 6 天的协变量。对吧?? 注意到我犯了一个错误,请参阅上面的编辑。我们使用前 90 周或 624 天进行训练,然后使用剩余 42 天的协变量进行预测。 但我的数据是每天观察 96 次的数据。怎么可能有 90 周?我很困惑。告诉我是否必须使用前 48 次观察来训练模型并预测接下来的 48 天使用在上面的数据集中,他们可用的协变量对于火车结束将是 48,对于测试开始将是 49。对吗??以上是关于使用 auto.Arima() 和 xreg 进行 ARIMA 预测的主要内容,如果未能解决你的问题,请参考以下文章
使用 auto.arima 和 xreg=解释变量进行 R 时间序列预测