Chuỗi thời gian 'phân cụm' trong R


38

Tôi có một bộ dữ liệu chuỗi thời gian. Mỗi chuỗi bao gồm cùng một khoảng thời gian, mặc dù ngày thực tế trong mỗi chuỗi thời gian có thể không hoàn toàn chính xác 'xếp hàng'.

Điều đó có nghĩa là, nếu chuỗi Thời gian được đọc thành ma trận 2D, nó sẽ trông giống như thế này:

date     T1   T2   T3 .... TN
1/1/01   100  59   42      N/A
2/1/01   120  29   N/A     42.5
3/1/01   110  N/A  12      36.82
4/1/01   N/A  59   40      61.82
5/1/01    05  99   42      23.68
...
31/12/01  100  59   42     N/A

etc 

Tôi muốn viết một tập lệnh R sẽ phân tách chuỗi thời gian {T1, T2, ... TN} thành 'gia đình' trong đó một gia đình được định nghĩa là một chuỗi các chuỗi "có xu hướng di chuyển đồng cảm" với nhau.

Đối với phần 'phân cụm', tôi sẽ cần chọn / xác định một loại thước đo khoảng cách. Tôi không chắc chắn làm thế nào để giải quyết vấn đề này, vì tôi đang xử lý chuỗi thời gian và một cặp chuỗi có thể di chuyển trong sự đồng cảm trong một khoảng thời gian, có thể không làm như vậy trong một khoảng thời gian tiếp theo.

Tôi chắc chắn có nhiều người có kinh nghiệm / thông minh hơn tôi ở đây, vì vậy tôi sẽ biết ơn bất kỳ đề xuất, ý tưởng nào về thuật toán / heuristic sử dụng cho thước đo khoảng cách và cách sử dụng nó trong cụm thời gian.

Tôi đoán là KHÔNG có một phương pháp thống kê mạnh mẽ nào được thực hiện để làm điều này, vì vậy tôi sẽ rất thích thú khi thấy cách mọi người tiếp cận / giải quyết vấn đề này - suy nghĩ như một nhà thống kê.


1
Bạn cũng có thể quan tâm đến các câu trả lời cho câu hỏi này, stats.stackexchange.com/q/2777/1036
Andy W


1
Có một phương pháp thống kê dựa trên các quy trình Dirichlet hoạt động cho các bộ dữ liệu trong đó các mốc thời gian không giống nhau cho tất cả các mẫu.
Dario

Câu trả lời:


24

Trong truyền dữ liệu và khai thác cơ sở dữ liệu chuỗi thời gian, một cách tiếp cận phổ biến là chuyển đổi chuỗi thành biểu diễn tượng trưng, ​​sau đó sử dụng một số liệu tương tự, chẳng hạn như khoảng cách Euclide, để phân cụm chuỗi. Các đại diện phổ biến nhất là SAX (Keogh & Lin) hoặc iSAX mới hơn (Shieh & Keogh):

Các trang ở trên cũng chứa các tham chiếu đến số liệu khoảng cách và phân cụm. Keogh và phi hành đoàn đang nghiên cứu có thể tái tạo và khá dễ tiếp nhận để phát hành mã của họ. Vì vậy, bạn có thể gửi email cho họ và yêu cầu. Tôi tin rằng họ có xu hướng làm việc trong MATLAB / C ++.

Có một nỗ lực gần đây để tạo ra một triển khai Java và R:

Tôi không biết nó đi được bao xa - nó hướng đến việc tìm kiếm mô-đun, nhưng, tùy thuộc vào mức độ chúng đã nhận được, nó sẽ có các bit cần thiết để bạn kết hợp một thứ gì đó cho nhu cầu của bạn (iSAX và số liệu khoảng cách: vì phần này là phổ biến để phân cụm và tìm kiếm mô-đun).


1
Điều này trông giống như một điểm khởi đầu tốt, dễ điều khiển. cảm ơn các liên kết
morpheous

4
Chúa ơi, tôi nghĩ rằng trang SAX là trang web xấu nhất tôi từng thấy!
nè 101

18

Một cách khác để nói "có xu hướng di chuyển trong sự cảm thông" là "hợp nhất".

Có hai cách tính toán hợp nhất tiêu chuẩn : phương pháp Engle-Granger và thủ tục Johansen. Chúng được trình bày trong "Phân tích chuỗi thời gian tích hợp và hợp nhất với R" (Pfaff 2008) và gói urca R có liên quan . Tôi đánh giá cao cuốn sách nếu bạn muốn theo đuổi các phương pháp này trong R.

Tôi cũng khuyên bạn nên xem câu hỏi này trên chuỗi thời gian đa biến và đặc biệt, tại khóa học của Ruey Tsay tại U. Chicago , bao gồm tất cả các mã R cần thiết.


Tôi đã đi qua sự hợp nhất một vài năm trước - nhưng nó có vẻ phức tạp khủng khiếp đối với tôi (tôi không hiểu điều đó!). Tôi đã hy vọng sẽ có một giải pháp ít lý thuyết hơn (tức là thực tế hơn) ...
morpheous

3
Phương thức Engle-Granger không đặc biệt phức tạp: bạn chỉ cần lấy phần dư của hồi quy giữa hai chuỗi và xác định xem nó có gốc đơn vị không. Điều này chắc chắn là thực tế: nó được sử dụng thường xuyên cho một loạt các vấn đề. Điều đó nói rằng, tôi tưởng tượng rằng bất kỳ câu trả lời nào cho câu hỏi của bạn sẽ cần một số kiến ​​thức thống kê (ví dụ: bạn nên hiểu những thứ như văn phòng phẩm, tính độc lập, v.v.) ...
Shane

Có cách nào tốt hơn để làm điều này hơn là kiểm tra tất cả các chuỗi kết hợp để tìm ra sự hợp nhất (với cùng một lý tưởng trong cụm cụm với nhau không?) Ngoài ra, đề xuất này có phụ thuộc vào thực tế là chính chuỗi đó được tích hợp không lúc bắt đầu?
Andy W

@Andy: Tôi chắc chắn rằng có một cách tốt hơn, và tôi mong muốn được nghe về nó. Đây là một cách tiếp cận khá cơ bản.
Shane

1
> tôi không thể đề xuất bất cứ điều gì khác, nhưng sự hợp nhất là cả hai rất mong manh ('các giả định tham số' đã biến mất trong thực tế) và không phù hợp với nhiệm vụ trong tay: ở mỗi bước, nó có nghĩa là thực hiện phân cụm theo thứ bậc, nhiều nhất là hợp nhất hai loạt cho đến một (có nghĩa là đồng tích hợp).
user603

4

Chuỗi thời gian phân cụm được thực hiện khá phổ biến bởi các nhà động lực học dân số, đặc biệt là những người nghiên cứu côn trùng để hiểu xu hướng bùng phát và sụp đổ. Tìm kiếm công việc trên sâu bướm Gypsy, chồi Spruce, bọ cánh cứng trên núi và chồi cây thông.

Đối với phân cụm thực tế, bạn có thể chọn bất kỳ số liệu khoảng cách nào bạn thích, mỗi loại có thể có điểm mạnh và độ tuần riêng của nó so với loại dữ liệu được phân cụm, Kaufmann và Rousseeuw 1990. Tìm nhóm trong dữ liệu. Giới thiệu về phân tích cụm là một nơi tốt để bắt đầu. Hãy nhớ rằng, phương pháp phân cụm không 'quan tâm' rằng bạn đang sử dụng chuỗi thời gian, nó chỉ xem xét các giá trị được đo tại cùng một thời điểm. Nếu chuỗi thời gian hai lần của bạn không đủ đồng bộ với tuổi thọ của chúng, thì cụm đó sẽ không (và có lẽ không nên).

Nơi bạn sẽ gặp vấn đề là xác định số lượng cụm (gia đình) sẽ sử dụng sau khi bạn phân cụm chuỗi thời gian. Có nhiều cách khác nhau để lựa chọn cắt bỏ các cụm thông tin, nhưng ở đây tài liệu không phải là tốt.


1
Chris, phân cụm thường xuyên sẽ không cắt nó. Bạn có thể phải thừa nhận rằng một chuỗi có tương quan cao với quá khứ của chính nó bằng cách đặt mỗi làm thứ nguyên của chính nó (nghĩa là tạo ra các kích thước N * T) hoặc bạn kết hợp tất cả các kích thước với nhau, nhưng sau đó ( với sự tương quan cao trong một chuỗi) bạn sẽ luôn kết thúc với một cụm duy nhất. Ngoài ra, hầu hết các phương pháp phân cụm đều không phù hợp / được khuyên dùng cho các biến có tương quan cao (có một giả định uốn cong ít nhiều của các cụm hình cầu). y1,t
dùng603

1
@ user603 Bạn có thể giải thích "Bạn có phải thừa nhận rằng một chuỗi có tương quan cao với quá khứ của chính nó không bằng cách đặt mỗi y1, t làm một thứ nguyên của chính nó (tức là dẫn đến kích thước N * T)"?
B_Miner

2

Xem câu trả lời của tôi cho một câu hỏi tương tự ở đây . Tóm lại, thực hiện chuyển đổi dữ liệu Fourier nhanh, loại bỏ tần số dự phòng nếu dữ liệu đầu vào của bạn có giá trị thực, tách phần thực và phần ảo cho từng phần tử của biến đổi Fourier nhanh và sử dụng gói Mclust trong R để thực hiện mô hình- dựa trên cụm trên phần thực và phần ảo của từng phần tử của từng chuỗi thời gian. Gói tự động tối ưu hóa theo số lượng cụm và mật độ của chúng.


0

Bạn cũng có thể sử dụng gói clustDDist, thực hiện phương thức nhà lãnh đạo và phương pháp phân cụm theo phân cấp với các biện pháp lỗi khác nhau:

http://r-forge.r-project.org/projects/clustddist/

Khoảng cách Euclide bình phương ủng hộ các mẫu phân phối có một đỉnh cao dốc cao và do đó, đo đôi khi được ưa thích.

d4(x,y)=(xy)2y
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.