Xác định tham số (p, d, q) cho mô hình ARIMA


10

Tôi còn khá mới với thống kê và R. Tôi muốn biết quy trình xác định các tham số ARIMA cho tập dữ liệu của mình. Bạn có thể giúp tôi tìm ra điều tương tự bằng cách sử dụng R và về mặt lý thuyết (nếu có thể) không?

Phạm vi dữ liệu từ ngày 12 tháng 1 đến ngày 14 tháng 3 và mô tả doanh số hàng tháng. Đây là tập dữ liệu:

99 58 52 83 94 73 97 83 86 63 77 70 87 84 60 105 87 93 110 71 158 52 33 68 82 88 84

Và đây là xu hướng:

nhập mô tả hình ảnh ở đây

Dữ liệu không thể hiện xu hướng, hành vi theo mùa hoặc theo chu kỳ.

Câu trả lời:


9

Nói chung, đào sâu vào sách giáo khoa phân tích chuỗi thời gian nâng cao (sách giới thiệu thường sẽ hướng bạn chỉ tin tưởng vào phần mềm của bạn), như Phân tích chuỗi thời gian của Box, Jenkins & Reinsel. Bạn cũng có thể tìm thấy thông tin chi tiết về quy trình Box-Jenkins bằng cách googling. Lưu ý rằng có những cách tiếp cận khác ngoài Box-Jenkins, ví dụ: phương pháp dựa trên AIC.

Trong R, trước tiên bạn chuyển đổi dữ liệu của mình thành một tsđối tượng (chuỗi thời gian) và nói với R rằng tần số là 12 (dữ liệu hàng tháng):

require(forecast)
sales <- ts(c(99, 58, 52, 83, 94, 73, 97, 83, 86, 63, 77, 70, 87, 84, 60, 105, 87, 93, 110, 71, 158, 52, 33, 68, 82, 88, 84),frequency=12)

Bạn có thể vẽ các hàm tự tương quan (một phần):

acf(sales)
pacf(sales)

Chúng không đề xuất bất kỳ hành vi AR hoặc MA.

Sau đó, bạn phù hợp với một mô hình và kiểm tra nó:

model <- auto.arima(sales)
model

Xem ?auto.arimađể được giúp đỡ. Như chúng ta thấy, auto.arimachọn một mô hình (0,0,0) đơn giản, vì nó không thấy xu hướng cũng không theo mùa cũng như AR hoặc MA trong dữ liệu của bạn. Cuối cùng, bạn có thể dự báo và vẽ chuỗi thời gian và dự báo:

plot(forecast(model))

dự báo

Nhìn vào ?forecast.Arima(lưu ý vốn A!).

Sách giáo khoa trực tuyến miễn phí này là một giới thiệu tuyệt vời về phân tích và dự báo chuỗi thời gian bằng R. Rất khuyến khích.


Xin chào Stephan, tôi đã thêm dữ liệu và cốt truyện cho tập dữ liệu của mình. Như bạn có thể thấy rằng tôi chỉ có 27 điểm dữ liệu, vì vậy tôi đang chạy trên khói ở đây. Bạn có thể đề nghị một cái gì đó ở đây.
Raunak87

Tôi chỉnh sửa câu trả lời. Loạt của bạn không thể hiện rất nhiều cấu trúc, vì vậy thực sự có rất ít bạn có thể làm. Vì về cơ bản bạn có tiếng ồn và ít khác, bạn có được khoảng dự đoán lớn.
Stephan Kolassa

4

Hai điều. Chuỗi thời gian của bạn là hàng tháng, bạn cần ít nhất 4 năm dữ liệu để ước tính ARIMA hợp lý, vì phản ánh 27 điểm không đưa ra cấu trúc tự tương quan. Điều này cũng có thể có nghĩa là doanh số của bạn bị ảnh hưởng bởi một số yếu tố bên ngoài, thay vì tương quan với giá trị của chính nó. Cố gắng tìm hiểu yếu tố nào ảnh hưởng đến doanh số của bạn và yếu tố đó có được đo lường không. Sau đó, bạn có thể chạy hồi quy hoặc VAR (Vector AutoreTHERion) để nhận dự báo.

Nếu bạn hoàn toàn không có gì khác ngoài những giá trị này, cách tốt nhất của bạn là sử dụng phương pháp làm mịn theo cấp số nhân để có được một dự báo ngây thơ. Làm mịn theo cấp số nhân có sẵn trong R.

Thứ hai, không thấy doanh số bán sản phẩm bị cô lập, doanh số của hai sản phẩm có thể tương quan với nhau, ví dụ tăng doanh số bán cà phê có thể phản ánh sự sụt giảm doanh số bán trà. sử dụng thông tin sản phẩm khác để cải thiện dự báo của bạn.

Điều này thường xảy ra với dữ liệu bán hàng trong chuỗi bán lẻ hoặc chuỗi cung ứng. Chúng không hiển thị nhiều cấu trúc tự tương quan trong chuỗi. Mặt khác, các phương thức khác như ARIMA hoặc GARCH thường hoạt động với dữ liệu thị trường chứng khoán hoặc các chỉ số kinh tế nơi bạn thường có tự động tương quan.


3

Đây thực sự là một nhận xét nhưng vượt quá mức cho phép vì vậy tôi đăng nó dưới dạng câu trả lời gần đúng vì nó gợi ý cách chính xác để phân tích dữ liệu chuỗi thời gian. .

Một thực tế nổi tiếng nhưng thường bị bỏ qua ở đây và các nơi khác là ACF / PACF trên lý thuyết được sử dụng để xây dựng mô hình ARIMA dự kiến ​​không có xung / Chuyển dịch cấp / Xung theo mùa / Xu hướng thời gian địa phương. Ngoài ra, nó có các tham số không đổi và phương sai lỗi không đổi theo thời gian. Trong trường hợp này, quan sát thứ 21 (value = 158) dễ dàng được gắn cờ là ngoại lệ / Xung và điều chỉnh đề xuất -80 mang lại giá trị được sửa đổi là 78. ACF / PACF kết quả của loạt sửa đổi cho thấy ít hoặc không có bằng chứng về cấu trúc ngẫu nhiên (ARIMA). Trong trường hợp này, ca phẫu thuật đã thành công nhưng bệnh nhân đã chết. ACF mẫu được dựa trên hiệp phương sai / phương sai và phương sai phồng / phồng quá mức mang lại sự sai lệch đi xuống so với ACF. Giáo sư Keith Ord từng gọi đây là "Hiệu ứng Alice ở xứ sở thần tiên"


2

Như đã được Stephan Kolassa chỉ ra, không có nhiều cấu trúc trong dữ liệu của bạn. Các hàm tự tương quan không đề xuất cấu trúc ARMA (xem acf(sales), pacf(sales)) và forecast::auto.arimakhông chọn bất kỳ thứ tự AR hoặc MA nào.

require(forecast)
require(tsoutliers)
fit1 <- auto.arima(sales, d=0, D=0, ic="bic")
fit1
#ARIMA(0,0,0) with non-zero mean 
#Coefficients:
#      intercept
#        81.3704
#s.e.     4.4070

Tuy nhiên, lưu ý rằng null của tính quy tắc trong phần dư được loại bỏ ở mức ý nghĩa 5%.

JarqueBera.test(residuals(fit1))[[1]]
#X-squared = 12.9466, df = 2, p-value = 0.001544

Ngoài ra lưu ý: JarqueBera.testdựa trên chức năng jarque.bera.testcó sẵn trong gói tseries.

Bao gồm cả phụ gia ngoại lệ tại quan sát 21 được phát hiện với tsoutlierstính quy phạm trong phần dư. Do đó, ước tính của đánh chặn và dự báo không bị ảnh hưởng bởi quan sát bên ngoài.

res <- tsoutliers::tso(sales, types=c("AO", "TC", "LS"), 
  args.tsmethod=list(ic="bic", d=0, D=0))
res
#ARIMA(0,0,0) with non-zero mean 
#Coefficients:
#      intercept     AO21
#        78.4231  79.5769
#s.e.     3.3885  17.6072
#sigma^2 estimated as 298.5:  log likelihood=-115.25
#AIC=236.49   AICc=237.54   BIC=240.38
#Outliers:
#  type ind time coefhat tstat
#1   AO  21 2:09   79.58  4.52
JarqueBera.test(residuals(res$fit))[[1]]
#X-squared = 1.3555, df = 2, p-value = 0.5077

1
n=12n
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.