Các mô hình được xác định bởi auto.arima () phân tích kỹ?


13

Tôi đã cố gắng học và áp dụng các mô hình ARIMA. Tôi đã được đọc một văn bản xuất sắc về ARIMA bởi Pankratz - Dự báo với hộp Univariate - Mô hình Jenkins: Khái niệm và trường hợp . Trong văn bản, tác giả đặc biệt nhấn mạnh đến nguyên tắc của sự kỳ thị trong việc lựa chọn các mô hình ARIMA.

Tôi bắt đầu chơi với auto.arima()chức năng trong R gói dự báo . Đây là những gì tôi đã làm, tôi mô phỏng ARIMA và sau đó áp dụng auto.arima(). Dưới đây là 2 ví dụ. Như bạn có thể thấy trong cả hai ví dụ auto.arima()đã xác định rõ một mô hình mà nhiều người sẽ coi là không phân tích. Đặc biệt là trong ví dụ 2, trong đó auto.arima()ARIMA đã xác định (3.0,3) khi thực sự ARIMA (1,0,1) sẽ là đủ và tuyệt vời.

Dưới đây là những câu hỏi của tôi. Tôi sẽ đánh giá cao bất kỳ đề xuất và khuyến nghị.

  1. Có hướng dẫn nào về thời điểm sử dụng / sửa đổi các mô hình được xác định bằng thuật toán tự động như auto.arima()không?
  2. Có bất kỳ hố nào rơi vào chỉ sử dụng AIC (đó là những gì tôi nghĩ auto.arima()sử dụng) để xác định mô hình?
  3. Một thuật toán tự động có thể được xây dựng mà là tuyệt vời?

Bằng cách này, tôi auto.arima()chỉ sử dụng như một ví dụ. Điều này sẽ áp dụng cho bất kỳ thuật toán tự động.

Dưới đây là ví dụ # 1:

set.seed(182)
y <- arima.sim(n=500,list(ar=0.2,ma=0.6),mean = 10)

auto.arima(y)

qa <- arima(y,order=c(1,0,1))
qa

Dưới đây là kết quả từ auto.arima(). Xin lưu ý rằng tất cả các hệ số là không đáng kể. tức là giá trị t <2.

ARIMA(1,0,2) with non-zero mean 

Coefficients:
         ar1     ma1      ma2  intercept
      0.5395  0.2109  -0.3385    19.9850
s.e.  0.4062  0.4160   0.3049     0.0878

sigma^2 estimated as 1.076:  log likelihood=-728.14
AIC=1466.28   AICc=1466.41   BIC=1487.36

Dưới đây là kết quả từ việc chạy thường xuyên arima()với đơn hàng ARIMA (1,0,1)

Series: y 
ARIMA(1,0,1) with non-zero mean 

Coefficients:
         ar1     ma1  intercept
      0.2398  0.6478    20.0323
s.e.  0.0531  0.0376     0.1002

sigma^2 estimated as 1.071:  log likelihood=-727.1
AIC=1462.2   AICc=1462.28   BIC=1479.06

Ví dụ 2:

set.seed(453)
y <- arima.sim(n=500,list(ar=0.2,ma=0.6),mean = 10)

auto.arima(y)

qa <- arima(y,order=c(1,0,1))
qa

Dưới đây là kết quả từ auto.arima():

ARIMA(3,0,3) with non-zero mean 

Coefficients:
         ar1      ar2     ar3     ma1     ma2     ma3  intercept
      0.7541  -1.0606  0.2072  0.1391  0.5912  0.5491    20.0326
s.e.  0.0811   0.0666  0.0647  0.0725  0.0598  0.0636     0.0939

sigma^2 estimated as 1.027:  log likelihood=-716.84
AIC=1449.67   AICc=1449.97   BIC=1483.39

Dưới đây là kết quả chạy thường xuyên arima()với đơn hàng ARIMA (1,0,1)

Series: y 
ARIMA(1,0,1) with non-zero mean 

Coefficients:
         ar1     ma1  intercept
      0.2398  0.6478    20.0323
s.e.  0.0531  0.0376     0.1002

sigma^2 estimated as 1.071:  log likelihood=-727.1
AIC=1462.2   AICc=1462.28   BIC=1479.06

Có vẻ như bạn đang làm điều gì đó ở đây vì thủ tục AIC có thể xác định sai mô hình đơn giản nhất. Ngoài ra, tiêu chí AIC không có xung / không thay đổi mức / không có xung theo mùa / không có xu hướng thời gian cục bộ / hằng số của tham số / hằng số của phương sai lỗi.
IrishStat

AIC và BIC tỷ lệ thuận với phương sai của các lỗi từ một mô hình đoán. Cách tiếp cận này theo kinh nghiệm của tôi chỉ đơn giản là do một số vấn đề tôi đã nêu ra và các vấn đề không thể đảo ngược được nêu ra ở đây. Không có sự thay thế nào cho một hệ thống nhận dạng thông minh xây dựng các mô hình lặp kết luận khi không còn các tham số không cần thiết và không có thông tin / cấu trúc rõ ràng trong phần dư. Tóm lại, nhận dạng mô hình tự động là một quá trình lặp không phải là quá trình một bước giống như trong tất cả các phân tích thống kê.
IrishStat

@Irishstat Dấu hiệu của hệ số ma nên được hiểu là -0.1391 -0.5912 -0.5491 là gì?
dự báo

về mặt Văn bản Pankratz .. có! . Bạn có thể kiểm tra các gốc của đa thức ma để xem chúng có đáp ứng các yêu cầu không thể đảo ngược hay không.
IrishStat

vì vậy auto.arima ở trên không thể đảo ngược, tức là -0.1391-0.5912-0.5491 là <1 do đó mô hình vẫn ổn.
dự báo

Câu trả lời:


17

Có một vài vấn đề ở đây. Đầu tiên, đừng cho rằng ARIMA mô phỏng thực sự theo thứ tự bạn chỉ định; bạn đang lấy một mẫu từ mô hình đã chỉ định và do tính ngẫu nhiên, mô hình phù hợp nhất cho mẫu cụ thể được vẽ có thể không phải là mô hình mà từ đó mô phỏng được rút ra.

Tôi đề cập đến vấn đề này vì vấn đề thứ hai và quan trọng hơn: auto.arima()hàm có thể ước tính các mô hình thông qua thuật toán phù hợp hiệu quả hơn, sử dụng các tổng bình phương có điều kiện, để tránh thời gian tính toán quá mức cho chuỗi dài hoặc cho các mô hình theo mùa phức tạp. Khi quy trình ước tính này được sử dụng, hãy auto.arima() tính gần đúng các tiêu chí thông tin cho một mô hình (vì khả năng nhật ký của mô hình chưa được tính toán). Một heuristic đơn giản được sử dụng để xác định xem các tổng có điều kiện của ước lượng bình phương có hoạt động hay không, nếu người dùng không cho biết nên sử dụng phương pháp nào .

approximation(length(x)>100 | frequency(x)>12)approximationTRUE n= =100n= =500 approximationauto.arima()approximation = TRUEarima()

Ví dụ 1 của bạn, chúng ta nên có

> auto.arima(y, approximation = FALSE)
Series: y 
ARIMA(0,0,1) with non-zero mean 

Coefficients:
         ma1  intercept
      0.7166    19.9844
s.e.  0.0301     0.0797

sigma^2 estimated as 1.079:  log likelihood=-728.94
AIC=1463.87   AICc=1463.92   BIC=1476.52
> qa
Series: y 
ARIMA(1,0,1) with non-zero mean 

Coefficients:
         ar1     ma1  intercept
      0.0565  0.6890    19.9846
s.e.  0.0626  0.0456     0.0830

sigma^2 estimated as 1.078:  log likelihood=-728.53
AIC=1465.06   AICc=1465.14   BIC=1481.92

Do đó auto.arima()đã chọn một mô hình khác biệt hơn so với mô hình thực sự; một ARIMA (0, 0, 1) được chọn. Nhưng điều này dựa trên các tiêu chí thông tin và bây giờ chúng phù hợp; mô hình được chọn có AIC, AICc và BIC thấp hơn, mặc dù sự khác biệt đối với AIC và AICc là nhỏ. Ít nhất bây giờ việc lựa chọn phù hợp với các tiêu chuẩn để lựa chọn các mô hình dựa trên các tiêu chí thông tin.

Lý do cho MA (1) được chọn, tôi tin, liên quan đến vấn đề đầu tiên tôi đã đề cập; cụ thể là mô hình phù hợp nhất với mẫu được rút ra từ ARIMA đã nêu (p, d, q) có thể không cùng thứ tự với mô hình thực. Điều này là do lấy mẫu ngẫu nhiên. Thực hiện một chuỗi dài hơn hoặc đốt cháy lâu hơn trong khoảng thời gian có thể giúp tăng cơ hội lựa chọn mô hình thực sự, nhưng đừng ngân hàng vào nó.

Bất kể, đạo đức ở đây là khi một cái gì đó rõ ràng là sai, như trong câu hỏi của bạn, hãy đọc trang hướng dẫn hoặc tài liệu liên quan để đảm bảo với bạn rằng bạn hiểu cách phần mềm hoạt động.


Cảm ơn đã phản ứng chi tiết. Tôi đã sử dụng cách tiếp cận của bạn cho ví dụ thứ hai: set.seed (453) y <- arima.sim (n = 500, list (ar = 0.2, ma = 0.6), mean = 10) auto.arima (y, xấp xỉ = FALSE) và đây là những gì tôi nhận được, rõ ràng là quá mức dữ liệu - ARIMA (2,0,4) với hệ số trung bình khác không: ar1 ar2 ma1 ma2 ma3 ma4 chặn 0,5369 -0,9627 0,3681 0,6799 0,7065 0,1701 20,0329 0,0533 0,0630 0,0793 0,0574 0,0927 sigma ^ 2 ước tính là 1,024: khả năng đăng nhập = -716,17 AIC = 1448,33 AICc = 1448,63 BIC = 1482,05
dự báo

Tôi chưa đọc chương có một cái gì đó gọi là "invertiblity". Liệu auto.arima trong trường hợp thứ hai có vi phạm quy tắc "invertiblity" trong chẩn đoán mô hình không?, Tôi có thể tắt, bạn có thể vui lòng sửa nếu tôi sai không?
dự báo

1
@forecaster Giả sử bạn không biết sự thật, tất cả những gì bạn có là mẫu để trao. Trong hoàn cảnh đó, AIC v.v đang làm những gì bạn đang yêu cầu họ làm. Như tôi đã nói ở trên, sê-ri mô phỏng có thể không phải là sê-ri bạn yêu cầu, hoặc đúng hơn là có thể không xác định thành công sê-ri thật từ mẫu nhỏ bạn đã lấy. Không có gì ngụ ý ở đây hoặc ở nơi khác trong các số liệu thống kê mà bạn sẽ có được một mô hình TRUE. Là nhà thống kê, nếu bạn nghĩ rằng bộ truyện bị quá mức (nói từ kiến ​​thức trước), hãy đặt ra một hạn chế về thứ tự của các thuật ngữ được tìm kiếm. Hoặc sử dụng BIC làm tiêu chí dừng.
Phục hồi Monica - G. Simpson

Tôi không biết rõ khả năng không thể trả lời của câu hỏi đó là gì. Có lẽ hỏi đây là một câu hỏi mới ở đây?
Phục hồi Monica - G. Simpson

@forecaster (Lý do tôi nói BIC, là nó đặt thêm một mức phạt về độ phức tạp. Trong trường hợp này, BIC của ARIMA (1, 0, 1) có BIC thấp hơn mô hình đã auto.arima()giải quyết, vì vậy nếu đó là hai chỉ các mô hình ứng cử viên, mô hình đơn giản hơn sẽ được chọn ...)
Tái lập Monica - G. Simpson

2

Cảm ơn rất nhiều @ Gavin, @Irishstat và @Rob đã trả lời câu hỏi của tôi. Rõ ràng là nếu tôi cần một mô hình tuyệt vời từ một thuật toán tự động như tiêu chí thông tin BIC auto.arima thì nên được sử dụng trái ngược với AIC đặc biệt là sau khi xem bài đăng nàybài đăng của @ Gavin ở trên.

Tôi cũng rất đồng ý với @Irishstat rằng việc chọn một mô hình dựa trên tiêu chí IC có những hạn chế ở chỗ nó không chọn một mô hình tốt hơn để phù hợp với dữ liệu với các ngoại lệ và thay đổi cấp độ. Theo tôi, ngoại lệ + thay đổi cấp độ + dữ liệu lộn xộn = dữ liệu kinh doanh từ thực , bất cứ điều gì khác là bộ dữ liệu sách giáo khoa. Bất kỳ mô hình tự động nào không xem xét các ngoại lệ + thay đổi cấp độ, theo ý kiến ​​của tôi nên được sử dụng một cách thận trọng.

Đến với mã - auto.arima có tùy chọn để chọn giữa AIC hoặc BIC. Xem bên dưới mã đã được sửa đổi từ các câu hỏi trên.

Rất cám ơn cộng đồng xác thực chéo. Tôi học những điều mới và hấp dẫn mỗi ngày.

###############
set.seed(453)
y <- arima.sim(n=500,list(ar=0.2,ma=0.6),mean = 10)

## Adequetly describes the unknown data
fit.aic <- auto.arima(y,ic = c("aic"))
fit.aic

## Selects the model that is parsimonious
fit.bic <- auto.arima(y,ic = c("bic"))
fit.bic

BIC IC chọn mô hình MA (2).

> fit.bic
Series: y 
ARIMA(0,0,2) with non-zero mean 

Coefficients:
         ma1     ma2  intercept
      0.9256  0.2335    20.0326
s.e.  0.0453  0.0444     0.0992

sigma^2 estimated as 1.059:  log likelihood=-724.19
AIC=1456.39   AICc=1456.47   BIC=1473.24

1

Tôi đã lấy 500 giá trị vào AUTOBOX (một phần mềm thương mại mà tôi đã giúp phát triển) và nhận được lời khuyên sau đây nhập mô tả hình ảnh ở đâydựa trên Thử nghiệm Chow để xác định các tham số. Một sai lầm rất cơ bản được thực hiện trong nghiên cứu về chuỗi thời gian là giả định rằng dữ liệu được điều khiển bởi một mô hình cụ thể với các tham số không đổi. AUTOBOX đã phát hiện một điểm dừng ở giai đoạn 246 có thể phản ánh một mô phỏng chưa được "làm nóng". Khi mô phỏng dữ liệu, thực hành tốt là xóa các giá trị "n" đầu tiên và sau đó nghiên cứu các giá trị còn lại. Tôi lấy dữ liệu và phân đoạn thành hai phần; 245 đầu tiên và 255 còn lại. Dưới đây là hai nhập mô tả hình ảnh ở đâylô acf rất khác nhau nhập mô tả hình ảnh ở đây.

Quay trở lại phân tích: Đây là mô hình đã được xác định cho 246 giá trị cuối cùng nhập mô tả hình ảnh ở đâyvà ở đây nhập mô tả hình ảnh ở đâyvới các thống kê sau nhập mô tả hình ảnh ở đây. Thực tế / Phù hợp và Dự báo là ở đây nhập mô tả hình ảnh ở đâyvới cốt truyện còn lại ở đây nhập mô tả hình ảnh ở đây. ACF của phần dư cho thấy sự đầy đủnhập mô tả hình ảnh ở đây. Lưu ý rằng 5 xung được xác định có ảnh hưởng rất nhỏ và có thể dễ dàng bị bỏ qua (trong trường hợp này!). Tóm lại bài học rút ra ở đây là đôi khi chúng ta có quá nhiều dữ liệu và chúng ta cần xem xét các hệ số thay đổi thời gian. Trong trường hợp này, chúng tôi đang xác định một sự thay đổi trong các tham số (dường như) không có tác động lớn đến mô hình / tham số kết quả nhưng nó chỉ ra một cải tiến quy trình thường cần thiết trong phân tích chuỗi thời gian. Kinh nghiệm của tôi với auto.arima cho thấy rằng vì nó rõ ràng không xử lý / khắc phục các vi phạm gaussian, nên nó có xu hướng mô hình hóa quá mức bằng cách dựa quá nhiều vào các giá trị lịch sử thay vì trích xuất cấu trúc từ dữ liệu. Trong trường hợp này vì nó là một mô phỏng được kiểm soát chặt chẽ mà không vi phạm gaussian, nhưng tôi thường nghi ngờ về một cách tiếp cận giới hạn và một bước duy nhất để nhận dạng mô hình ARIMA. Tin tưởng nhưng Xác minh!


0

 điểm kinh nghiệm(MộtTôiCmTôin-MộtTôiCTôi)/2

Nếu điều này là như vậy, nó sẽ giúp người dùng thấy các xác suất tương đối này, cùng với AIC (?) Từ auto.arima( ... trace=TRUE ). Ví dụ, dữ liệu trứng chạy như trong câu hỏi này

                                # relprob = exp( (AICmin - AIC) / 2 ) * 100
 ARIMA(0,1,0) with drift : 784.5    100
 ARIMA(0,1,1) with drift : 784.8     86
 ARIMA(1,1,0) with drift : 784.9     82
 ARIMA(0,1,0)            : 792.4      2
 ARIMA(2,1,2) with drift : Inf    0
 ARIMA(1,1,1) with drift : Inf    0

1
Đây là một câu trả lời hay một câu hỏi?
Tim

@Tim, tôi rất thận trọng vì tôi không biết những probs tương đối này là "thực" hay ít nhất là phổ biến.
chối
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.