Як налаштувати аргумент xreg в auto.arima () в R? [зачинено]


19

Я працюю над невеликим проектом з одним часовим рядом, який вимірює дані про відвідування клієнта (щодня). Мої коваріати - це суцільна змінна, Dayяка вимірює кількість днів, що минули з першого дня збору даних, і деякі фіктивні змінні, наприклад, чи є цей день Різдвом, а який день тижня - тощо.

Частина моїх даних виглядає так:

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   

Мій план - використовувати модель ARIMAX, щоб відповідати даним. Це можна зробити в R, з функцією auto.arima(). Я розумію, що я повинен вводити свої коваріати в xregаргумент, але мій код у цій частині завжди повертає помилку.

Ось мій код:

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)

Повідомлення про помилку, повернене R:

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

Я багато чого навчився з Як підходити до моделі ARIMAX з R? Але мені все ще не дуже зрозуміло, як налаштувати коваріатів чи манекенів у xregаргументі на auto.arima()функції.

Відповіді:


32

Основна проблема полягає в тому, що ваш xregне є матрицею. Я думаю, що наступний код робить те, що ви хочете. Я використав деякі штучні дані, щоб перевірити, чи працює він.

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)

Привіт, Проф.Роб, код ідеально працює. Дякую за ваше рішення. Я дуже ціную вашу допомогу!
Мішель

auto.arima (розл. (відвідування), xreg = xreg) видає ту саму помилку.
Ентузіаст

@MdAzimulHaque - коли ви об'єкт, ви скоротите його довжину , щонайменше , одне спостереження. просить встановити модель ARIMA на 48 спостереженнях за допомогою зовнішніх регресорів із 49.difftsauto.arima(diff(visits), xreg = xreg)auto.arimanrow
Jubbles

@Jubbles я отримав відповідь деякий час тому. Є два способи впоратися з цим. 1-й метод: auto.arima (diff (diff (відвідування)), xreg = diff (diff (xreg))) 2-й метод: auto.arima (відвідування, d = 2, xreg)
ентузіаст
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.