Wie richte ich das xreg-Argument in auto.arima () in R ein? [geschlossen]

19

Ich arbeite an einem kleinen Projekt mit einer Zeitreihe, die die Kundenbesuchsdaten (täglich) misst. Meine Kovariaten sind eine kontinuierliche Variable Day, um zu messen, wie viele Tage seit dem ersten Tag der Datenerfassung vergangen sind, und einige Dummy-Variablen, z. B. ob dieser Tag Weihnachten ist und welcher Wochentag es ist usw.

Ein Teil meiner Daten sieht so aus:

Date    Customer_Visit  Weekday Christmas       Day
11/28/11        2535       2        0            1   
11/29/11        3292       3        0            2   
11/30/11        4103       4        0            3   
12/1/11         4541       5        0            4   
12/2/11         6342       6        0            5  
12/3/11         7205       7        0            6   
12/4/11         3872       1        0            7   
12/5/11         3270       2        0            8   
12/6/11         3681       3        0            9   

Mein Plan ist es, das ARIMAX-Modell zu verwenden, um die Daten anzupassen. Dies kann in R mit der Funktion erfolgen auto.arima(). Ich verstehe, dass ich meine Kovariaten in das xregArgument einfügen muss, aber mein Code für diesen Teil gibt immer einen Fehler zurück.

Hier ist mein Code:

xreg     <- c(as.factor(modelfitsample$Christmas), as.factor(modelfitsample$Weekday), 
              modelfitsample$Day)
modArima <- auto.arima(ts(modelfitsample$Customer_Visit, freq=7), allowdrift=FALSE, 
                       xreg=xreg)

Die von R zurückgegebene Fehlermeldung lautet:

Error in model.frame.default(formula = x ~ xreg, drop.unused.levels = TRUE) 
 :variable lengths differ (found for 'xreg')

Ich habe viel gelernt von Wie kann ich ein ARIMAX-Modell mit R ausrüsten? Ich bin mir aber immer noch nicht ganz sicher, wie ich die Kovariaten oder Dummies in der xregArgumentation in auto.arima()Funktion setzen soll.

Michelle
quelle

Antworten:

32

Das Hauptproblem ist, dass Ihr xregkeine Matrix ist. Ich denke, der folgende Code macht, was Sie wollen. Ich habe einige künstliche Daten verwendet, um zu überprüfen, ob es funktioniert.

library(forecast)
# create some artifical data
modelfitsample <- data.frame(Customer_Visit=rpois(49,3000),Weekday=rep(1:7,7),
                             Christmas=c(rep(0,40),1,rep(0,8)),Day=1:49)

# Create matrix of numeric predictors
xreg <- cbind(Weekday=model.matrix(~as.factor(modelfitsample$Weekday)), 
                  Day=modelfitsample$Day,
              Christmas=modelfitsample$Christmas)

# Remove intercept
xreg <- xreg[,-1]

# Rename columns
colnames(xreg) <- c("Mon","Tue","Wed","Thu","Fri","Sat","Day","Christmas")

# Variable to be modelled
visits <- ts(modelfitsample$Customer_Visit, frequency=7)

# Find ARIMAX model
modArima <- auto.arima(visits, xreg=xreg)
Rob Hyndman
quelle
Hallo Prof.Rob, der Code funktioniert einwandfrei. Vielen Dank für Ihre Lösung. Ich schätze deine Hilfe sehr!
Michelle
auto.arima (diff (Visits), xreg = xreg) löst den gleichen Fehler aus.
Enthusiast
@MdAzimulHaque - Wenn Sie diffein tsObjekt haben, verkürzen Sie dessen Länge um mindestens eine Beobachtung. auto.arima(diff(visits), xreg = xreg)bittet auto.arimaum die Anpassung eines ARIMA-Modells an 48 Beobachtungen mit externen Regressoren mit nrow49.
Jubbles
@Jubbles Ich habe die Antwort vor einer Weile. Es gibt zwei Möglichkeiten, damit umzugehen. 1. Methode: auto.arima (diff (diff (Visits)), xreg = diff (diff (xreg)) 2. Methode: auto.arima (Visits, d = 2, xreg)
Enthusiast