Jak ustawić argument xreg w auto.arima () w R? [Zamknięte]

19

Pracuję nad małym projektem z jednym szeregiem czasowym, który mierzy dane o wizytach klientów (codziennie). Moje zmienne towarzyszące są zmienną ciągłąDay mierzącą liczbę dni, które upłynęły od pierwszego dnia zbierania danych, oraz niektóre zmienne zastępcze, takie jak to, czy ten dzień jest Bożym Narodzeniem, a który dzień tygodnia itd.

Część moich danych wygląda następująco:

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   

Mój plan polega na zastosowaniu modelu ARIMAX w celu dopasowania danych. Można to zrobić za pomocą funkcji Rauto.arima() . Rozumiem, że muszę wstawić zmienne towarzyszące do xregargumentu, ale mój kod dla tej części zawsze zwraca błąd.

Oto mój kod:

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)

Komunikat o błędzie zwrócony przez R to:

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

Wiele się nauczyłem od Jak dopasować model ARIMAX do R? Ale nadal nie jestem bardzo jasny, jak ustawić zmienne towarzyszące lub manekiny w funkcji xregargumentu auto.arima().

Michelle
źródło

Odpowiedzi:

32

Głównym problemem jest to, że xregnie jest to matryca. Myślę, że poniższy kod robi to, co chcesz. Użyłem sztucznych danych, aby sprawdzić, czy to działa.

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
źródło
Cześć, Prof.Rob, kod działa idealnie. Dziękuję bardzo za twoje rozwiązanie. Doceniam twoją pomoc!
Michelle,
auto.arima (diff (wizyty), xreg = xreg) zgłasza ten sam błąd.
Entuzjasta
@MdAzimulHaque - kiedy obiektu, skrócenie jego długości przez co najmniej jedną obserwację. prosi o dopasowanie modelu ARIMA na 48 obserwacjach przy użyciu zewnętrznych regresorów z difftsauto.arima(diff(visits), xreg = xreg)auto.arimanrow
liczbą
@Jubbles dostałem odpowiedź jakiś czas temu. istnieją 2 sposoby, aby sobie z tym poradzić. 1. metoda: auto.arima (diff (diff (wizyty)), xreg = diff (diff (xreg))) 2. metoda: auto.arima (wizyty, d = 2, xreg)
Entuzjasta