Làm cách nào để thiết lập đối số xreg trong auto.arima () trong R? [đóng cửa]


19

Tôi đang làm việc trên một dự án nhỏ với chuỗi thời gian đo dữ liệu khách hàng truy cập (hàng ngày). Các đồng biến của tôi là một biến liên tục Dayđể đo xem đã trôi qua bao nhiêu ngày kể từ ngày đầu tiên thu thập dữ liệu và một số biến giả, chẳng hạn như ngày đó là Giáng sinh và ngày nào trong tuần, v.v.

Một phần dữ liệu của tôi trông như:

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   

Kế hoạch của tôi là sử dụng mô hình ARIMAX để phù hợp với dữ liệu. Điều này có thể được thực hiện trong R, với chức năng auto.arima(). Tôi hiểu rằng tôi phải đặt các đồng biến của mình vào xregđối số, nhưng mã của tôi cho phần này luôn trả về lỗi.

Đây là mã của tôi:

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)

Thông báo lỗi được trả về bởi R là:

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

Tôi đã học được rất nhiều từ Làm thế nào để phù hợp với mô hình ARIMAX với R? Nhưng tôi vẫn chưa rõ lắm về cách thiết lập hiệp phương sai hoặc hình nộm trong xregđối số trong auto.arima()hàm.

Câu trả lời:


32

Vấn đề chính là bạn xregkhông phải là một ma trận. Tôi nghĩ rằng các mã sau đây làm những gì bạn muốn. Tôi đã sử dụng một số dữ liệu nhân tạo để kiểm tra xem nó có hoạt động không.

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)

Xin chào, Prof.Rob, mã hoạt động hoàn hảo. Cảm ơn rất nhiều cho giải pháp của bạn. Tôi thực sự đánh giá cao sự giúp đỡ của bạn!
Michelle

auto.arima (diff (lượt truy cập), xreg = xreg) đưa ra cùng một lỗi.
Nhiệt tình

@MdAzimulHaque - khi bạn difflà một tsđối tượng, bạn rút ngắn chiều dài của nó bằng ít nhất một quan sát. auto.arima(diff(visits), xreg = xreg)đang yêu cầu điều auto.arimachỉnh mô hình ARIMA trên 48 quan sát bằng cách sử dụng các biến hồi quy bên ngoài với nrow49.
Jubble

@Jubble tôi đã có câu trả lời một lúc trước. Có 2 cách để xử lý việc này. Phương thức thứ nhất: auto.arima (diff (diff (lượt truy cập)), xreg = diff (diff (xreg))) Phương thức thứ 2: auto.arima (lượt truy cập, d = 2, xreg)
Nhiệt tình
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.