Kilka kierunków analizy danych podłużnych omówiono w linku dostarczonym przez @Jeromy, więc sugeruję, abyś je uważnie przeczytał, szczególnie te dotyczące analizy danych funkcjonalnych. Spróbuj googling dla „Funkcjonalnego grupowania danych podłużnych” lub zestawu narzędzi PACE Matlab, który dotyczy w szczególności klastrowania modelowego nieregularnie trajektorii (Peng i Müller, klastrowanie na podstawie odległości rzadko obserwowanych procesów stochastycznych, z zastosowaniem do aukcji internetowych , Annals of Applied Statistics 2008 2: 1056). Mogę sobie wyobrazić, że mogą istnieć dobre ramy statystyczne dla finansowych szeregów czasowych, ale nie wiem o tym.
kml
Pakiet w zasadzie opiera się na k-średnich, praca (domyślnie) na euklidesowej odległości między pomiarów obserwowanych na osobników. To, co nazywa się trajektorią, jest po prostu serią obserwowanych wartości dla poszczególnych , in i y i = ( y i 1 , y i 2 , … , y i t ) d ( y i , y j ) = √tniyi=(yi1,yi2,…,yit)d(yi,yj)=t−1∑tk=1(yik−yjk)2−−−−−−−−−−−−−−−−√. Brakujące dane są przetwarzane przez niewielką modyfikację poprzedniej miary odległości (korekta Gowera) związanej z najbliższym sąsiedzkim schematem imputacji (do obliczenia kryterium Kalinskiego). Ponieważ nie reprezentuję siebie, jak wyglądałyby Twoje rzeczywiste dane, nie mogę powiedzieć, czy to zadziała. Przynajmniej działa z krzywymi wzrostu podłużnego, kształtem „wielomianowym”, ale wątpię, że pozwoli ci to wykryć bardzo specyficzne wzorce (takie jak lokalne minima / maksima w określonych punktach czasowych z punktami czasowymi różniącymi się między klastrami, przez tłumaczenie dla przykład). Jeśli interesuje Cię grupowanie potencjalnie niedopasowanych krzywych, to zdecydowanie musisz spojrzeć na inne rozwiązania; Funkcjonalne grupowanie i wyrównywanie , od Sangalli i wsp., Oraz odnośniki tam zawarte mogą stanowić dobry punkt wyjścia.
Poniżej pokazuję kod, który może pomóc w eksperymentowaniu z nim (moje ziarno jest zwykle ustawione na 101, jeśli chcesz odtworzyć wyniki). Zasadniczo do użycia kml
wystarczy zbudować clusterizLongData
obiekt ( id
liczba dla pierwszej kolumny, a pomiary w kolejnych kolumnach).t
library(lattice)
xyplot(var0 ~ date, data=test.data, groups=store, type=c("l","g"))
tw <- reshape(test.data, timevar="date", idvar="store", direction="wide")
parallel(tw[,-1], horizontal.axis=F,
scales=list(x=list(rot=45,
at=seq(1,ncol(tw)-1,by=2),
labels=substr(names(tw[,-1])[seq(1,ncol(tw)-1,by=2)],6,100),
cex=.5)))
library(kml)
names(tw) <- c("id", paste("t", 1:(ncol(tw)-1)))
tw.cld <- as.cld(tw)
cld.res <- kml(tw.cld,nbRedrawing=5)
plot(tw.cld)
Kolejne dwie liczby to surowe dane symulowane i rozwiązanie pięcioklastrowe (zgodnie z kryterium Kalińskiego, również stosowanym w pakiecie fpc ). Nie pokazuję skalowanej wersji .