¿Cómo configurar el argumento xreg en auto.arima () en R? [cerrado]

19

Estoy trabajando en un pequeño proyecto con una serie de tiempo que mide los datos de visitas del cliente (diariamente). Mis covariables son una variable continua Daypara medir cuántos días han transcurrido desde el primer día de recopilación de datos, y algunas variables ficticias, como si ese día es Navidad y qué día de la semana es, etc.

Parte de mis datos se ve así:

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   

Mi plan es usar el modelo ARIMAX para ajustar los datos. Esto se puede hacer en R, con la función auto.arima(). Entiendo que tengo que poner mis covariables en el xregargumento, pero mi código para esta parte siempre devuelve un error.

Aquí está mi código:

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)

El mensaje de error devuelto por R es:

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

Aprendí mucho de Cómo ajustar un modelo ARIMAX con R? Pero todavía no tengo muy claro cómo configurar las covariables o las variables ficticias en el xregargumento en auto.arima()función.

Michelle
fuente

Respuestas:

32

El principal problema es que tu xregno es una matriz. Creo que el siguiente código hace lo que quieres. He usado algunos datos artificiales para verificar que funcionen.

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
fuente
Hola, Prof.Rob, el código funciona perfecto. Muchas gracias por tu solución. ¡Realmente aprecio tu ayuda!
Michelle
auto.arima (diff (visitas), xreg = xreg) arroja el mismo error.
Entusiasta
@MdAzimulHaque: cuando eres diffun tsobjeto, acortas su longitud en al menos una observación. auto.arima(diff(visits), xreg = xreg)está pidiendo auto.arimaajustar un modelo ARIMA en 48 observaciones usando regresores externos con nrow49.
Jubbles
@Jubbles recibí la respuesta hace un tiempo. Hay 2 formas de manejar esto. 1er método: auto.arima (diff (diff (visitas)), xreg = diff (diff (xreg))) 2do método: auto.arima (visitas, d = 2, xreg)
Entusiasta