Phát hiện các ngoại lệ trong chuỗi thời gian (LS / AO / TC) bằng gói tsoutliers trong R. Làm thế nào để biểu thị các ngoại lệ ở định dạng phương trình?


35

Bình luận: Trước hết tôi muốn nói một lớn cảm ơn bạn cho tác giả của mới tsoutliers gói mà cụ Chen và Liu phát hiện chuỗi thời gian outlier được công bố trên Tạp chí của Hiệp hội thống kê Mỹ vào năm 1993 trong mã nguồn mở phần mềm .R

Gói phát hiện 5 loại ngoại lệ khác nhau lặp lại trong dữ liệu chuỗi thời gian:

  1. Phụ gia ngoại lệ (AO)
  2. Đổi mới ngoại lệ (IO)
  3. Thay đổi cấp độ (LS)
  4. Thay đổi tạm thời (TC)
  5. Thay đổi cấp độ theo mùa (SLS)

Điều tuyệt vời hơn nữa là gói này triển khai auto.arima từ gói dự báo để phát hiện các ngoại lệ là liền mạch. Ngoài ra gói sản xuất các lô đẹp để hiểu rõ hơn về dữ liệu chuỗi thời gian.

Dưới đây là những câu hỏi của tôi:

Tôi đã thử chạy một vài ví dụ bằng cách sử dụng gói này và nó hoạt động rất tốt. Các ngoại lệ phụ gia và thay đổi cấp độ là trực quan. Tuy nhiên, tôi đã có 2 câu hỏi liên quan đến việc trao các thay đổi tạm thời ngoại lệ và các ngoại lệ đổi mới mà tôi không thể hiểu được.

Thay đổi tạm thời ngoại lệ Ví dụ:

Hãy xem xét ví dụ sau:

library(tsoutliers)
library(expsmooth)
library(fma)

outlier.chicken <- tsoutliers::tso(chicken,types = c("AO","LS","TC"),maxit.iloop=10)
outlier.chicken
plot(outlier.chicken)

Chương trình phát hiện đúng sự thay đổi cấp độ và thay đổi tạm thời tại địa điểm sau.

Outliers:
  type ind time coefhat tstat
1   LS  12 1935   37.14 3.153
2   TC  20 1943   36.38 3.350

Dưới đây là cốt truyện và câu hỏi của tôi.

  • Làm thế nào để viết thay đổi tạm thời trong một định dạng phương trình? (Sự thay đổi cấp độ có thể dễ dàng được viết dưới dạng biến nhị phân, bất cứ lúc nào trước 1935 / Quan sát 12 là 0 và bất kỳ lúc nào sau 1935 và sau là 1.)

Phương trình thay đổi tạm thời trong hướng dẫn gói và bài viết được đưa ra là:

L(B)= =11-δB

trong đó là 0,7. Tôi chỉ cố gắng để dịch điều này sang ví dụ trên.δ

  • Câu hỏi thứ hai của tôi là về ngoại lệ đổi mới, tôi chưa bao giờ bắt
    gặp một ngoại lệ đổi mới trong thực tế. bất kỳ ví dụ số hoặc một ví dụ trường hợp sẽ rất hữu ích.

ngoại lệ

Chỉnh sửa: @Irishstat, chức năng tsoutliers thực hiện công việc tuyệt vời trong việc xác định các ngoại lệ và đề xuất một mô hình ARIMA thích hợp. Nhìn vào bộ dữ liệu Nile, xem ứng dụng auto.arima bên dưới và sau đó áp dụng tsoutliers (với các giá trị mặc định bao gồm auto.arima):

auto.arima(Nile)
Series: Nile 
ARIMA(1,1,1)                    

Coefficients:
         ar1      ma1
      0.2544  -0.8741
s.e.  0.1194   0.0605

sigma^2 estimated as 19769:  log likelihood=-630.63
AIC=1267.25   AICc=1267.51   BIC=1275.04

Sau khi áp dụng chức năng tsoutliers, nó xác định LS ngoại lệ và phụ gia ngoại lệ và đề xuất một đơn đặt hàng ARIMA (0,0,0).

nile.outliers <- tso(Nile,types = c("AO","LS","TC"))
nile.outliers
Series: Nile 
ARIMA(0,0,0) with non-zero mean 

Coefficients:
      intercept       LS29       AO43
      1097.7500  -242.2289  -399.5211
s.e.    22.6783    26.7793   120.8446

sigma^2 estimated as 14401:  log likelihood=-620.65
AIC=1249.29   AICc=1249.71   BIC=1259.71

Outliers:
  type ind time coefhat  tstat
1   LS  29 1899  -242.2 -9.045
2   AO  43 1913  -399.5 -3.306

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


8
Tôi rất vui khi thấy bạn tìm thấy gói hữu ích, cảm ơn! BTW Tôi đã sửa lỗi chính tả trong hàm vẽ kết quả để trong lần phát hành tiếp theo của gói, trục y sẽ bao gồm phạm vi của cả chuỗi gốc và chuỗi đã điều chỉnh.
javlacalle

2
Trong phiên bản cuối cùng của gói, chức năng tsoutliersđã được đổi tên thành tsođể tránh xung đột với chức năng cùng tên trong gói forecast.
javlacalle

1
@javlacalle Tôi đã tải xuống gói tsoutliers mới nhất nhưng nó vẫn có tsoutliers không tso. Tôi không chắc chắn khi gói sẽ được cập nhật. Tôi rất vui vì chúng tôi có tên khác nhau.
dự báo

Tôi vội vàng một chút thông báo về việc cập nhật. Phải mất một thời gian cho đến khi nó được cập nhật trên CRAN. Tôi vừa thấy rằng phiên bản mới nhất 0.4 có thể được tải xuống từ CRAN.
javlacalle

@javlacalle Tôi thấy tsoutliers rất khó cài đặt trên máy mac của tôi. Tôi BREW cài đặt GSL, tôi đã cố gắng để biên dịch sử dụng clanggcckhông phải công trình. Tôi nghĩ rằng nó là một gói tuyệt vời nhưng cài đặt thực sự làm tan vỡ trái tim tôi.
B.M.W.

Câu trả lời:


19

filterδ= =0δ= =1

tc <- rep(0, 50)
tc[20] <- 1
tc1 <- filter(tc, filter = 0, method = "recursive")
tc2 <- filter(tc, filter = 0.3, method = "recursive")
tc3 <- filter(tc, filter = 0.7, method = "recursive")
tc4 <- filter(tc, filter = 1, method = "recursive")
par(mfrow = c(2,2))
plot(tc1, main = "TC delta = 0")
plot(tc2, main = "TC delta = 0.3")
plot(tc3, main = "TC delta = 0.7")
plot(tc4, main = "TC delta = 1", type = "s")

thay đổi tạm thời

Trong ví dụ của bạn, bạn có thể sử dụng hàm outliers.effectsđể biểu diễn các hiệu ứng của các ngoại lệ được phát hiện trên chuỗi được quan sát:

# unit impulse
m1 <- ts(outliers.effects(outlier.chicken$outliers, n = length(chicken), weights = FALSE))
tsp(m1) <- tsp(chicken)
# weighted by the estimated coefficients
m2 <- ts(outliers.effects(outlier.chicken$outliers, n = length(chicken), weights = TRUE))
tsp(m2) <- tsp(chicken)

Các ngoại lệ đổi mới, IO, là đặc biệt hơn. Trái ngược với các loại ngoại lệ khác được xem xét tsoutliers, hiệu ứng của IO phụ thuộc vào mô hình được chọn và vào các ước tính tham số. Thực tế này có thể gây rắc rối trong loạt với nhiều ngoại lệ. Trong các lần lặp đầu tiên của thuật toán (trong đó hiệu ứng của một số ngoại lệ có thể không được phát hiện và điều chỉnh), chất lượng của các ước tính của mô hình ARIMA có thể không đủ tốt để xác định chính xác IO. Hơn nữa, khi thuật toán tạo ra tiến trình, một mô hình ARIMA mới có thể được chọn. Do đó, có thể phát hiện IO ở giai đoạn sơ bộ với mô hình ARIMA nhưng cuối cùng, động của nó được xác định bởi một mô hình ARIMA khác được chọn trong giai đoạn cuối.

Trong tài liệu này cho thấy, trong một số trường hợp, ảnh hưởng của IO có thể tăng lên khi ngày xuất hiện của nó trở nên xa hơn trong quá khứ, đây là điều khó diễn giải hoặc giả định.

IO có một tiềm năng thú vị vì nó có thể nắm bắt các ngoại lệ theo mùa. Các loại ngoại lệ khác được xem xét trong tsoutlierskhông thể nắm bắt các mẫu theo mùa. Tuy nhiên, trong một số trường hợp, có thể tốt hơn để tìm kiếm sự thay đổi mức độ theo mùa có thể, SLS, thay vì IO (như được hiển thị trong tài liệu được đề cập trước đó).

IO có một cách giải thích hấp dẫn. Đôi khi nó được hiểu là một ngoại lệ phụ gia ảnh hưởng đến thuật ngữ nhiễu và sau đó lan truyền trong chuỗi theo tính năng động của mô hình ARIMA. Theo nghĩa này, IO giống như một ngoại lệ phụ gia, cả hai đều ảnh hưởng đến một quan sát duy nhất nhưng IO là một xung trong thuật ngữ nhiễu trong khi AO là xung được thêm trực tiếp vào các giá trị được tạo bởi mô hình ARIMA hoặc quá trình tạo dữ liệu . Việc các ngoại lệ có ảnh hưởng đến các đổi mới hay nằm ngoài thuật ngữ xáo trộn có thể là vấn đề thảo luận.

Trong tài liệu tham khảo trước, bạn có thể tìm thấy một số ví dụ về dữ liệu thực nơi IO được phát hiện.


Cảm ơn đã trả lời chi tiết. Tôi rất trân trọng điều này. Tôi có một vài câu hỏi bổ sung. Có bất kỳ lợi thế nào trong việc sử dụng auto.arima, xác định p, d, q và sau đó sử dụng tsoutliers sử dụng arima làm tsmethod không?
dự báo

1
Ưu điểm chính của việc sử dụng forecast::auto.arimacùng với tsoutlierslà mọi thứ đều được tự động hóa. Tuy nhiên, nên chạy các thủ tục tự động với các tùy chọn thay thế. Ví dụ, trước tiên bạn có thể xem xét ACF hoặc kiểm tra gốc đơn vị và sau đó chọn mô hình ARIMA được chuyển đến tsoutliers. Nếu bất kỳ ngoại lệ nào được tìm thấy cho mô hình đề xuất của bạn thì bạn có thể lặp lại phân tích cho chuỗi điều chỉnh. Đây là một quá trình lặp đi lặp lại. Quy trình tự động cung cấp một hướng dẫn hữu ích nhưng nó có thể không nhất thiết phải đưa ra giải pháp cuối cùng hoặc duy nhất.
javlacalle

1
Các thủ tục để xác định vị trí ngoại lệ là lặp đi lặp lại. Để an toàn, giới hạn được đặt cho số lần lặp cho phép. Khi bạn quan sát cảnh báo, bạn có thể thử chạy thuật toán tăng đối số maxit.ilooplên 5-6 và xem kết quả có thay đổi không. Nếu cảnh báo được trả về với số lượng lớn maxit.iloop(ví dụ 20 trở lên), đó có thể là dấu hiệu cho thấy một cái gì đó không được mô hình hóa đúng. Loại bỏ IO khỏi các loại ngoại lệ được xem xét có thể là một lựa chọn tốt trong một số trường hợp. Trong hầu hết các trường hợp, bạn có thể bỏ qua cảnh báo. Bạn có thể sử dụng suppressWarningsđể tránh chúng.
javlacalle

2
@mugen Tôi không biết một cuốn sách giáo khoa về vấn đề này kỹ lưỡng. Vì cách tiếp cận được thảo luận trong bài này có liên quan đến phân tích can thiệp, bất kỳ sách giáo khoa nào (về Kinh tế lượng hoặc Chuỗi thời gian) với một chương về vấn đề này sẽ hữu ích; ví dụ: Phân tích chuỗi thời gian. Với ứng dụng trong R . Để biết chi tiết, bạn nên xem lại một số trong nhiều bài báo tạp chí liên quan đến vấn đề này, bắt đầu từ Chen và Liu (1993) và các tài liệu tham khảo trong đó.
javlacalle

2
@mugen, tôi cũng sẽ xem bài viết của Tsay . Ngoài ra, tôi sẽ kiểm tra cuốn sách kinh điển của Pankratz có độ bao phủ tốt trên các ngoại lệ.
dự báo
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.