Comment configurer l'argument xreg dans auto.arima () dans R? [fermé]

19

Je travaille sur un petit projet avec une série chronologique qui mesure les données de visites des clients (quotidiennement). Mes covariables sont une variable continue Daypour mesurer le nombre de jours écoulés depuis le premier jour de collecte des données, et certaines variables factices, telles que le jour de Noël ou le jour de la semaine, etc.

Une partie de mes données ressemble à:

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   

Mon plan est d'utiliser le modèle ARIMAX pour ajuster les données. Cela peut être fait en R, avec la fonction auto.arima(). Je comprends que je dois mettre mes covariables dans l' xregargument, mais mon code pour cette partie renvoie toujours une erreur.

Voici mon 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)

Le message d'erreur renvoyé par R est:

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

J'ai beaucoup appris de Comment adapter un modèle ARIMAX avec R? Mais je ne sais toujours pas très bien comment configurer les covariables ou les variables muettes dans l' xregargument en auto.arima()fonction.

Michelle
la source

Réponses:

32

Le principal problème est que vous xregn'êtes pas une matrice. Je pense que le code suivant fait ce que vous voulez. J'ai utilisé des données artificielles pour vérifier que cela fonctionne.

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
la source
Salut, Prof.Rob, le code fonctionne parfaitement. Merci beaucoup pour votre solution. J'apprécie vraiment votre aide!
Michelle
auto.arima (diff (visites), xreg = xreg) renvoie la même erreur.
Enthusiast
@MdAzimulHaque - lorsque vous êtes diffun tsobjet, vous raccourcissez sa longueur d'au moins une observation. auto.arima(diff(visits), xreg = xreg)demande auto.arimad'ajuster un modèle ARIMA sur 48 observations en utilisant des régresseurs externes avec nrowdes 49.
Jubbles
@Jubbles j'ai eu la réponse il y a un moment. il y a 2 façons de gérer cela. 1ère méthode: auto.arima (diff (diff (visites ()), xreg = diff (diff (xreg))) 2e méthode: auto.arima (visites, d = 2, xreg)
Enthusiast