如何在R中的auto.arima()中设置xreg参数?[关闭]


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')

我从如何用R拟合ARIMAX模型中学到了很多东西但是我仍然不太清楚如何xregauto.arima()函数的参数中设置协变量或虚拟变量。

Answers:


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)

嗨,罗布教授,代码很完美。非常感谢您的解决方案。非常感谢您的帮助!
米歇尔(Michelle)

auto.arima(diff(visits),xreg = xreg)引发相同的错误。
2015年

@MdAzimulHaque-当您diff使用ts对象时,可以通过至少一项观察来缩短其长度。auto.arima(diff(visits), xreg = xreg)是要求auto.arima以适合于使用外部回归量48个观测的ARIMA模型nrow的49
Jubbles

@Jubbles我前段时间得到了答案。有两种处理方法。第一种方法:auto.arima(diff(diff(diff(visits)),xreg = diff(diff(xreg))))第二种方法:auto.arima(visits,d = 2,xreg)
发烧友
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.