ARIMA forecasting with auto.Arima() and xreg

11,324

A few points. One, you can just convert the entire matrix to a ts object and then isolate the variables later. Second, if you are using covariates in your arima model then you will need to provide them when you forecast out-of-sample. This may mean forecasting each of the covariates before generating forecasts for your variable of interest. In the example below I split the data into two samples for simplicity.

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])
Share:
11,324
ptim ktim
Author by

ptim ktim

Updated on August 22, 2022

Comments

  • ptim ktim
    ptim ktim over 1 year

    I am working on project to forecast sales of stores to learn forecasting.Till now I have successfully used simple auto.Arima() function for forecasting.But to make these forecast more accurate I can make use of covariates.I have defined covariates like holidays, promotion which affect on sales of store using xreg operator with the help of this post: How to setup xreg argument in auto.arima() in R?

    But my code fails at line:

    ARIMAfit <- auto.arima(saledata, xreg=covariates)

    and gives error saying:

    Error in model.frame.default(formula = x ~ xreg, drop.unused.levels = TRUE) : variable lengths differ (found for 'xreg') In addition: Warning message: In !is.na(x) & !is.na(rowSums(xreg)) : longer object length is not a multiple of shorter object length

    Below is link to my Dataset: https://drive.google.com/file/d/0B-KJYBgmb044blZGSWhHNEoxaHM/view?usp=sharing

    This is my code:

    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)
    

    Also tell me how I can forecast for next 48 days.I know how to forecast using simple auto.Arima() and n.ahead but dont know how to do it when xreg is used.