Bagaimana cara mengatur argumen xreg di auto.arima () di R? [Tutup]

19

Saya sedang mengerjakan proyek kecil dengan satu seri waktu yang mengukur data kunjungan pelanggan (setiap hari). Kovariat saya adalah variabel kontinu Dayuntuk mengukur berapa hari telah berlalu sejak hari pertama pengumpulan data, dan beberapa variabel dummy, seperti apakah hari itu Natal, dan hari apa dalam seminggu, dll.

Bagian dari data saya terlihat seperti:

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   

Rencana saya adalah menggunakan model ARIMAX agar sesuai dengan data. Ini dapat dilakukan dalam R, dengan fungsi auto.arima(). Saya mengerti bahwa saya harus memasukkan kovariat saya ke dalam xregargumen, tetapi kode saya untuk bagian ini selalu menghasilkan kesalahan.

Ini kode saya:

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)

Pesan kesalahan yang dikembalikan oleh R adalah:

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

Saya belajar banyak dari Bagaimana cara memasangkan model ARIMAX dengan R? Tapi saya masih belum begitu jelas bagaimana mengatur kovariat atau boneka dalam xregargumen dalam auto.arima()fungsi.

Michelle
sumber

Jawaban:

32

Masalah utama adalah bahwa Anda xregbukan sebuah matriks. Saya pikir kode berikut melakukan apa yang Anda inginkan. Saya telah menggunakan beberapa data buatan untuk memeriksa apakah itu berfungsi.

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
sumber
Hai, Prof.Rob, kodenya berfungsi sempurna. Terima kasih banyak atas solusi Anda. Saya sangat menghargai bantuan Anda!
Michelle
auto.arima (beda (kunjungan), xreg = xreg) melempar kesalahan yang sama.
Penggemar
@MdAzimulHaque - ketika Anda diffsebuah tsobjek, Anda mempersingkat panjang oleh setidaknya satu pengamatan. auto.arima(diff(visits), xreg = xreg)meminta auto.arimaagar sesuai dengan model ARIMA pada 48 pengamatan menggunakan regresi eksternal dengan nrow49.
Jubbles
@ Jubbles saya mendapat jawaban beberapa waktu lalu. ada 2 cara untuk menangani ini. Metode 1: auto.arima (diff (diff (kunjungan)), xreg = diff (diff (xreg))) Metode 2: auto.arima (kunjungan, d = 2, xreg)
Penggemar