Como configurar o argumento xreg no auto.arima () no R? [fechadas]

19

Estou trabalhando em um pequeno projeto com uma série temporal que mede os dados de visita do cliente (diariamente). Minhas covariáveis ​​são uma variável contínua Daypara medir quantos dias se passaram desde o primeiro dia de coleta de dados e algumas variáveis ​​fictícias, como se esse dia é Natal e em que dia da semana é etc.

Parte dos meus dados se parece com:

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   

Meu plano é usar o modelo ARIMAX para ajustar os dados. Isso pode ser feito em R, com a função auto.arima(). Entendo que tenho que colocar minhas covariáveis ​​no xregargumento, mas meu código para esta parte sempre retorna um erro.

Aqui está o meu 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)

A mensagem de erro retornada por R é:

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

Aprendi muito com Como ajustar um modelo ARIMAX ao R? Mas ainda não estou muito claro como configurar as covariáveis ​​ou manequins no xregargumento em auto.arima()função.

Michelle
fonte

Respostas:

32

O principal problema é que você xregnão é uma matriz. Eu acho que o código a seguir faz o que você deseja. Eu usei alguns dados artificiais para verificar se eles funcionam.

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
fonte
Olá, Prof. Rob, o código funciona perfeitamente. Muito obrigado pela sua solução. Eu realmente aprecio sua ajuda!
23412 Michelle
auto.arima (diff (visitas), xreg = xreg) lança o mesmo erro.
Entusiasta
@MdAzimulHaque - quando você é diffum tsobjeto, diminui seu comprimento em pelo menos uma observação. auto.arima(diff(visits), xreg = xreg)está pedindo auto.arimapara ajustar um modelo ARIMA em 48 observações utilizando regressores externos com nrowde 49.
Jubbles
@ Jubbles eu tenho a resposta há um tempo atrás. existem 2 maneiras de lidar com isso. Primeiro método: auto.arima (diff (diff (visitas)), xreg = diff (diff (xreg))) 2º método: auto.arima (visitas, d = 2, xreg)
Entusiasta