Come impostare l'argomento xreg in auto.arima () in R? [chiuso]


19

Sto lavorando a un piccolo progetto con una serie temporale che misura i dati di visita del cliente (ogni giorno). Le mie covariate sono una variabile continua Dayper misurare quanti giorni sono trascorsi dal primo giorno di raccolta dei dati e alcune variabili fittizie, come ad esempio se quel giorno è Natale e quale giorno della settimana è, ecc.

Parte dei miei dati assomiglia a:

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   

Il mio piano è utilizzare il modello ARIMAX per adattarlo ai dati. Questo può essere fatto in R, con la funzione auto.arima(). Capisco che devo mettere le mie covariate xregnell'argomento, ma il mio codice per questa parte restituisce sempre un errore.

Ecco il mio codice:

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)

Il messaggio di errore restituito da R è:

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

Ho imparato molto da Come montare un modello ARIMAX con R? Ma non sono ancora molto chiaro come impostare le covariate o i manichini xregnell'argomento in auto.arima()funzione.

Risposte:


32

Il problema principale è che la tua xregnon è una matrice. Penso che il seguente codice faccia quello che vuoi. Ho usato alcuni dati artificiali per verificare che funzioni.

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)

Ciao Prof.Rob, il codice funziona perfettamente. Grazie mille per la tua soluzione. Apprezzo molto il vostro aiuto!
Michelle,

auto.arima (diff (visite), xreg = xreg) genera lo stesso errore.
Entusiasta il

@MdAzimulHaque - quando sei diffun tsoggetto, accorci la sua lunghezza di almeno un'osservazione. auto.arima(diff(visits), xreg = xreg)chiede auto.arimadi inserire un modello ARIMA su 48 osservazioni usando regressori esterni con nrow49.
Jubbles

@Jubbles ho avuto la risposta qualche tempo fa. ci sono 2 modi per gestirlo. 1o metodo: auto.arima (diff (diff (visite)), xreg = diff (diff (xreg))) 2o metodo: auto.arima (visite, d = 2, xreg)
Entusiasta
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.