Ước tính cùng một mô hình trong nhiều chuỗi thời gian


26

Tôi có một nền tảng mới về chuỗi thời gian (một số ước tính / dự báo ARIMA) và đang đối mặt với một vấn đề tôi không hiểu hết. Mọi sự trợ giúp sẽ rất được trân trọng.

Tôi đang phân tích nhiều chuỗi thời gian, tất cả trên cùng một khoảng thời gian và tất cả cùng tần số, tất cả đều mô tả một loại dữ liệu tương tự. Mỗi loạt chỉ là một biến, không có dự đoán tương ứng nào khác mà tôi đang xem.

Tôi đã được yêu cầu ước tính một mô hình duy nhất mô tả TẤT CẢ chuỗi - ví dụ: hãy tưởng tượng tôi có thể tìm thấy một ARIMA (p, d, q) với cùng một thứ tự, hệ số, v.v. có thể phù hợp với tất cả các chuỗi. Người giám sát của tôi không muốn tôi ước tính riêng từng chuỗi, anh ta cũng không muốn tôi thực hiện một số mô hình VAR với sự phụ thuộc giữa các chuỗi.

Câu hỏi của tôi là: những gì tôi thậm chí sẽ gọi một mô hình như vậy, và làm thế nào tôi có thể đi về ước tính / dự báo nó? Nếu bạn dễ dàng sử dụng các ví dụ mã hơn, tôi nói cả SAS và R.

Câu trả lời:


8

Bạn có thể thực hiện tìm kiếm dạng lưới: bắt đầu với ARIMA (1,0,0) và thử tất cả các khả năng lên đến ARIMA (5,2,5) hoặc một cái gì đó. Điều chỉnh mô hình phù hợp với từng chuỗi và ước tính phép đo lỗi độc lập theo tỷ lệ như MAPE hoặc MASE (MASE có thể sẽ tốt hơn). Chọn mô hình ARIMA với MASE trung bình thấp nhất trong tất cả các mô hình của bạn.

Bạn có thể cải thiện quy trình này bằng cách xác thực chéo phép đo lỗi của mình cho từng chuỗi và cũng bằng cách so sánh kết quả của bạn với dự báo ngây thơ .

Có thể là một ý tưởng tốt để hỏi tại sao bạn đang tìm kiếm một mô hình duy nhất để mô tả tất cả các loạt. Trừ khi chúng được tạo ra bởi cùng một quy trình, điều này dường như không phải là một ý tưởng tốt.


2
Cảm ơn bạn - tôi sẽ thử điều này. Tôi đồng ý rằng điều này dường như không phải là ý tưởng tốt nhất. Lập luận tôi nhận được là mỗi loạt không có đủ các quan sát (~ 28) cho một ước tính tốt và nó sẽ mạnh mẽ hơn để ước tính trên tất cả các chuỗi. Tôi không chắc là tôi đồng ý với lập luận đó.
sparc_s Lan

21

Một cách để làm điều đó là xây dựng một chuỗi thời gian dài với tất cả dữ liệu của bạn và với các chuỗi giá trị bị thiếu giữa chuỗi để phân tách chúng. Ví dụ, trong R, nếu bạn có ba loạt ( x, yz) mỗi chiều dài 100 và tần số 12, bạn có thể tham gia cùng họ như sau

combined <- ts(c(x,rep(NA,56),y,rep(NA,56),z,rep(NA,56)),frequency=12)

Lưu ý rằng số lượng giá trị còn thiếu được chọn để đảm bảo thời gian theo mùa được giữ lại. Tôi đã đệm năm cuối cùng với 8 giá trị bị thiếu và sau đó thêm bốn năm bị thiếu (48 giá trị) trước chuỗi tiếp theo. Điều đó là đủ để đảm bảo bất kỳ mối tương quan nối tiếp rửa sạch giữa các loạt.

Sau đó, bạn có thể sử dụng auto.arima()để tìm mô hình tốt nhất:

library(forecast)
fit <- auto.arima(combined)

Cuối cùng, bạn có thể áp dụng mô hình kết hợp cho từng chuỗi riêng biệt để thu được dự báo:

fit.x <- Arima(x,model=fit)
fit.y <- Arima(y,model=fit)
fit.z <- Arima(z,model=fit)

5
+1, thủ thuật gọn gàng. Đánh giá theo nhận xét của OP cho câu trả lời khác, tôi sẽ đề xuất một số loại mô hình dữ liệu bảng điều khiển, nhưng cách này tốt hơn.
mpiktas

Đây là một sự giúp đỡ rất lớn, được đánh giá cao. Bạn có thể giải thích thêm: số lượng giá trị còn thiếu được chọn để đảm bảo thời gian theo mùa được giữ lại không? Xin lỗi tôi đã không hoàn toàn làm theo - cảm ơn.
sparc_s Lan 23/2 '

1
Nếu có tính thời vụ trong dữ liệu (như thường thấy với các quan sát hàng tháng), bạn muốn chuỗi dài vẫn có các Januaries cách nhau 12 lần, Februaries cách nhau 12 lần, v.v. Sau đó, khi mô hình đang được chọn, tính thời vụ có thể được mô hình hóa một cách thích hợp.
Rob Hyndman

3
Để thêm vào thủ thuật này - bạn có thể thêm các biến hồi quy bên ngoài (xreg) cho biết tư cách thành viên của danh mục. Điều này sẽ chiếm các phương tiện riêng cho các chuỗi khác nhau, trong khi vẫn giữ các hệ số khác chung.
Jameson Quinn

6

Ước tính mô hình duy nhất cho chuỗi nhiều thời gian là lĩnh vực của kinh tế lượng dữ liệu bảng điều khiển . Tuy nhiên trong trường hợp của bạn không có biến giải thích @Rob Hyndman câu trả lời có lẽ là phù hợp nhất. Tuy nhiên, nếu nó chỉ ra rằng các phương tiện của chuỗi thời gian là khác nhau (hãy thử nó, vì trong trường hợp này phương pháp của @Rob Hyndman sẽ thất bại!), Nhưng cấu trúc ARMA là như nhau, thì bạn sẽ phải sử dụng Arellano-Bond (xin lỗi wikipedia có không có trang nào trên đó, vì vậy hãy tìm kiếm nó trên google) loại công cụ ước tính. Mô hình trong trường hợp đó sẽ là:

ytôit= =αtôi+ρ1ytôi,t-1+...+ρpytôi,t-p+εtôit

tôiεtôittôi


1
Thực sự đánh giá cao giải pháp của bạn và những người khác là tốt. Bạn đề cập rằng: Tuy nhiên, nếu nó chỉ ra rằng các phương tiện của chuỗi thời gian là khác nhau (hãy kiểm tra nó, vì trong trường hợp này phương pháp của @Rob Hyndman sẽ thất bại!) Bạn có thể giải thích thêm về lý do tại sao điều này không? Cảm ơn.
sparc_s Lan 23/2 '

2
@sparc_s Lan, giả sử đó chỉ là hai bộ. Một là trung tâm ở khoảng 0 với phương sai 1 và một là trung tâm ở 1000 với phương sai 1. Sau đó, nếu cả hai chuỗi đều phù hợp khi sử dụng cùng một hệ số, điều đó có nghĩa là chúng tôi ràng buộc alpha_1 = alpha_2, vì vậy dự đoán cho cả hai chuỗi sẽ xảy ra 500, tắt khủng khiếp. Về cơ bản, việc xử lý tất cả các chuỗi thuộc cùng một mô hình có thể yêu cầu một số hồi quy / chuẩn hóa trước khi lắp mô hình khớp.
zkurtz

4

Một cách khác để tiếp cận Rob Robnd, để tạo một chuỗi dữ liệu duy nhất, là hợp nhất dữ liệu. Điều này có thể phù hợp nếu chuỗi nhiều thời gian của bạn thể hiện các bài đọc ồn ào từ một bộ máy ghi cùng một sự kiện. (Nếu mỗi chuỗi thời gian ở một thang đo khác nhau, bạn cần bình thường hóa dữ liệu trước.)

LƯU Ý: bạn vẫn chỉ kết thúc với 28 bài đọc, chỉ cần ít tiếng ồn hơn, vì vậy điều này có thể không phù hợp với tình huống của bạn.

t1=xts(jitter(sin(1:28/10),amount=0.2),as.Date("2012-01-01")+1:28)
t2=xts(jitter(sin(1:28/10),amount=0.2),as.Date("2012-01-01")+1:28)
t3=(t1+t2)/2

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


Điều này sẽ chỉ hoạt động nếu tất cả các tín hiệu tương tự về bản chất (ví dụ định kỳ) đều cùng pha - trong ví dụ của bạn nếu hai trong số các sóng hình sin lệch pha 180 độ thì chúng sẽ hủy hoàn toàn!
tdc

3
Có, tính trung bình dữ liệu của bạn chỉ phù hợp khi mỗi chuỗi ngày được cho là đại diện cho cùng một dữ liệu và (bạn rất vui khi cho rằng) chúng chỉ khác nhau ở mỗi chuỗi có tiếng ồn khác nhau.
Darren Cook

1

Tôi sẽ xem xét các mô hình Markov ẩn và mạng Bayesian năng động. Họ mô hình dữ liệu chuỗi thời gian. Ngoài ra, họ được đào tạo sử dụng nhiều trường hợp chuỗi thời gian, ví dụ như nhiều chuỗi thời gian huyết áp từ nhiều người khác nhau. Bạn nên tìm các gói trong Python và R để xây dựng các gói đó. Bạn có thể phải xác định cấu trúc cho các mô hình này.


0

Tôi đang cố gắng làm điều tương tự. Rõ ràng, có một cái gì đó gọi là mô hình 'Đa biến tự động' ngoài kia. Tôi đã tìm thấy tài liệu tham khảo về nó, nhưng không biết cách sử dụng nó. Dựa trên bài báo được liên kết, tôi cho rằng nó đã được thực hiện trong R.

http://journal.r-project.org/archive/2012-1/RJournal_2012-1_Holmes~et~al.pdf


Cách tiếp cận tiêu chuẩn là tự động vectơ và có một gói R được gọi là var .
Tây An

Là một véc tơ tự động khác với tự động xâm lấn vào dữ liệu bảng điều khiển? Hay là vấn đề của các lĩnh vực khác nhau, tên khác nhau? Gói plm được đề xuất cho dữ liệu bảng. cran.r-project.org/web/packages/plm/vignettes/plm.pdf clidyn.ethz.ch/ con / berit.pdf
Mox
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.