Mam zestaw danych szeregów czasowych. Każda seria obejmuje ten sam okres, chociaż rzeczywiste daty w każdej serii czasowej mogą nie być dokładnie w jednej linii.
To znaczy, jeśli szeregi czasowe miałyby zostać odczytane w matrycy 2D, wyglądałoby to tak:
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
Chcę napisać skrypt R, który podzieli szeregi czasowe {T1, T2, ... TN} na „rodziny”, w których rodzina jest zdefiniowana jako zbiór szeregów, które „mają tendencję do poruszania się ze sobą w sympatii”.
W części „grupowanie” będę musiał wybrać / zdefiniować rodzaj miary odległości. Nie jestem do końca pewien, jak sobie z tym poradzić, ponieważ mam do czynienia z szeregami czasowymi, a para szeregów, które mogą poruszać się ze współczuciem w jednym przedziale, może nie robić tego w kolejnym przedziale.
Jestem pewien, że jest tu znacznie więcej doświadczonych / sprytnych ludzi, więc byłbym wdzięczny za wszelkie sugestie, pomysły na temat tego, jakiego algorytmu / heurystyki użyć do pomiaru odległości i jak wykorzystać to w grupowaniu szeregów czasowych.
Domyślam się, że NIE ma ustalonej solidnej metody statystycznej, aby to zrobić, więc byłbym bardzo zainteresowany, aby zobaczyć, jak ludzie podchodzą / rozwiązują ten problem - myśląc jak statystyki.
źródło
Odpowiedzi:
W strumieniowaniu danych i eksploracji baz danych szeregów czasowych powszechnym podejściem jest przekształcenie szeregu w symboliczną reprezentację, a następnie użycie metryki podobieństwa, takiej jak odległość euklidesowa, w celu zgrupowania szeregu. Najpopularniejsze reprezentacje to SAX (Keogh & Lin) lub nowszy iSAX (Shieh & Keogh):
Powyższe strony zawierają również odniesienia do wskaźników odległości i grupowania. Keogh i załoga prowadzą powtarzalne badania i są bardzo otwarci na opublikowanie swojego kodu. Możesz wysłać do nich e-maila i zapytać. Sądzę jednak, że mają tendencję do pracy w MATLAB / C ++.
Niedawno podjęto wysiłek, aby stworzyć implementację Java i R.
Nie wiem, jak daleko to jest - jest ukierunkowane na wyszukiwanie motywów, ale w zależności od tego, jak daleko się posunęły, powinno mieć niezbędne bity, które potrzebujesz, aby połączyć coś dla swoich potrzeb (iSAX i wskaźniki odległości: ponieważ ta część jest wspólna dla grupowania i znajdowania motywów).
źródło
Innym sposobem powiedzenia „zmierzać do współczucia” jest „zintegrowany”.
Istnieją dwa standardowe sposoby obliczania kointegracji : metoda Engle-Granger i procedura Johansena. Są one omówione w „Analizie zintegrowanych i zintegrowanych szeregów czasowych z R” (Pfaff 2008) i powiązanym pakiecie R urca . Gorąco polecam książkę, jeśli chcesz zastosować te metody w R.
Polecam również przyjrzeć się temu pytaniu na wielowymiarowych szeregach czasowych , aw szczególności na kursie Ruey Tsay w U. Chicago, który zawiera wszystkie niezbędne kody R.
źródło
Szeregi czasowe grupowania są dość często wykonywane przez dynamacistów populacji, szczególnie tych, którzy badają owady, aby zrozumieć trendy dotyczące wybuchu i zapaści. Poszukaj pracy na ćmy cygańskiej, budowormie świerkowym, chrząszczu sosnowym i modrzewiu modrzewiowym.
W przypadku faktycznego grupowania możesz wybrać dowolną metrykę odległości, którą chcesz, każda z nich ma prawdopodobnie swoje mocne strony i tygodniowość w stosunku do rodzaju grupowanych danych, Kaufmann i Rousseeuw 1990. Znajdowanie grup w danych. Wprowadzenie do analizy skupień jest dobrym miejscem do rozpoczęcia. Pamiętaj, że metoda grupowania nie „obchodzi”, że używasz szeregów czasowych, a jedynie przygląda się wartościom zmierzonym w tym samym momencie. Jeśli twoje dwa szeregi czasowe nie są wystarczająco zsynchronizowane w ciągu ich życia, nie będą (a być może nie powinny) klastra.
Problemem będzie określenie liczby klastrów (rodzin), które będą używane po zgrupowaniu szeregów czasowych. Istnieją różne sposoby wyboru odcięcia klastrów informacyjnych, ale tutaj literatura nie jest tak dobra.
źródło
Zobacz moją odpowiedź na podobne pytanie tutaj . Krótko mówiąc, zrób szybką transformację Fouriera danych, odrzuć zbędne częstotliwości, jeśli twoje dane wejściowe były wartościowe, oddziel rzeczywistą i urojoną część dla każdego elementu szybkiej transformacji Fouriera i użyj pakietu Mclust w R, aby wykonać model- oparte na grupowaniu na rzeczywistych i urojonych częściach każdego elementu każdej serii czasowej. Pakiet automatyzuje optymalizację pod kątem liczby klastrów i ich gęstości.
źródło
Możesz także użyć pakietu clustDDist, który wykonuje metodę liderów i hierarchiczną metodę klastrowania z różnymi miarami błędów:
http://r-forge.r-project.org/projects/clustddist/
źródło