So sánh auto.arima() và ets() trên dữ liệu không có mùa vụ
Thống kê AICc hữu ích để chọn giữa các mô hình trong cùng một lớp. Ví dụ, bạn có thể dùng nó để chọn một mô hình ETS hoặc để chọn một mô hình ARIMA. Tuy nhiên, bạn không thể dùng nó để so sánh ETS và ARIMA vì chúng thuộc hai lớp mô hình khác nhau.
Thay vào đó, bạn có thể dùng cross-validation theo chuỗi thời gian để so sánh một mô hình ARIMA và một mô hình ETS trên dữ liệu austa. Vì tsCV() yêu cầu các hàm trả về đối tượng dự báo, bạn sẽ thiết lập một vài hàm đơn giản để khớp mô hình và trả về các dự báo. Các đối số của tsCV() là một chuỗi thời gian, hàm dự báo, và chân trời dự báo h. Xem đoạn mã từ chương 2 dưới đây:
e <- matrix(NA_real_, nrow = 1000, ncol = 8)
for (h in 1:8)
e[, h] <- tsCV(goog, naive, h = h)
...
Bên cạnh đó, nhớ rằng toán tử pipe trong R lấy giá trị ở bên trái và truyền nó làm đối số cho những gì ở bên phải, từng bước, từ trái sang phải. Đây là một ví dụ dựa trên mã bạn đã thấy ở chương trước:
# Vẽ dự báo 20 năm cho chuỗi lynx được mô hình hóa bằng ets()
lynx %>% ets() %>% forecast(h = 20) %>% autoplot()
Trong bài tập này, bạn sẽ so sánh MSE của hai hàm dự báo áp dụng cho austa, và vẽ dự báo của hàm cho kết quả tốt nhất. Nhắc lại, austa đã được nạp vào không gian làm việc của bạn.
Bài tập này là một phần của khóa học
Dự báo bằng R
Hướng dẫn bài tập
- Điền vào hàm
farima()để dự báo kết quả củaauto.arima(). Làm theo cấu trúc của mã đã viết sẵn trongfets()vốn làm điều tương tự choets(). - Tính các sai số cross-validated cho mô hình ETS trên
austabằngtsCV()với sai số một bước, và lưu vàoe1. - Tính các sai số cross-validated cho mô hình ARIMA trên
austabằngtsCV()với sai số một bước, và lưu vàoe2. - Tính MSE cross-validated cho mỗi lớp mô hình và loại bỏ các giá trị thiếu. Tham khảo chương trước nếu bạn không nhớ cách tính MSE.
- Tạo và vẽ dự báo 10 năm cho các giá trị tương lai của
austabằng lớp mô hình tốt nhất.
Bài tập tương tác thực hành trực tiếp
Hãy thử làm bài tập này bằng cách hoàn thành đoạn mã mẫu này.
# Set up forecast functions for ETS and ARIMA models
fets <- function(x, h) {
forecast(ets(x), h = h)
}
farima <- function(x, h) {
forecast(___, ___)
}
# Compute CV errors for ETS on austa as e1
e1 <- tsCV(austa, ___, ___)
# Compute CV errors for ARIMA on austa as e2
e2 <- tsCV(___, ___, ___)
# Find MSE of each model class
mean(___, ___)
mean(___, ___)
# Plot 10-year forecasts using the best model class
austa %>% ___ %>% ____