Как настроить аргумент 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)
Роб Хиндман
источник
Привет, Prof.Rob, код работает отлично. Большое спасибо за ваше решение. Я очень ценю вашу помощь!
Мишель
auto.arima (diff (посещения), xreg = xreg) выдает ту же ошибку.
Энтузиаст
@MdAzimulHaque - когда вы объект, вы сократите его длину , по меньшей мере , одно наблюдение. просит согласовать модель ARIMA с 48 наблюдениями с использованием внешних регрессоров с 49.difftsauto.arima(diff(visits), xreg = xreg)auto.arimanrow
Jubbles
@Jubbles Я получил ответ некоторое время назад. Есть 2 способа справиться с этим. 1-й метод: auto.arima (diff (diff (посещения))), xreg = diff (diff (xreg))) 2-й метод: auto.arima (посещения, d = 2, xreg)
энтузиаст