2015-12-13 205 views
1

我正在研究商店的銷售預測以瞭解預測。現在我已經成功地使用了簡單的auto.Arima()函數進行預測。但是爲了使這些預測更加準確我可以利用協變量。我已經定義了協變量,例如節假日,促銷,這會影響使用xreg運算符在本文的幫助下銷售商店: 如何在R中的auto.arima()中設置xreg參數?ARIMA使用auto.Arima()和xreg進行預測

但我的代碼無法在行:

ARIMAfit < - auto.arima(saledata,XREG =協)

,並給出錯誤說:

錯誤model.frame.default(公式= x〜xreg,drop.unused.levels = TRUE):可變長度不同(發現'xreg')另外:警告消息:In!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個days.I知道如何使用簡單的auto.Arima(預測預測)和n.ahead,但不知道如何使用xreg時如何去做。

回答

0

有幾點。一,你可以將整個矩陣轉換爲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]) 
+0

斐伊川NBATrends我不明白,你已經writen說明了樣本外預測與協讓分裂data.What窗函數做和什麼目的= 90,並開始= 91此處指定窗口中第二個代碼函數 –

+0

就像我說的,當你在你的arima模型中有協變量時,爲了預測樣本外,你將需要提供它們的值。在上面的例子中,我只是將數據分成兩部分來進行說明。我用來擬合模型的第一個樣本,第二個樣本使用了預測的協變量。 窗口函數可用於數據的子集。 – Raad

+0

沒問題,所以將1到90的數據用於訓練模型,91到96(6天)的數據將用於這6天的協變量的預測。對?? –