Plusieurs liens d’analyse des données longitudinales ont été discutés dans le lien fourni par @Jeromy. Je vous suggère donc de les lire attentivement, en particulier ceux sur l’analyse fonctionnelle des données. Essayez googler pour "Clustering fonctionnel de données longitudinales" ou la boîte à outils PACE Matlab qui concerne spécifiquement le clustering de trajectoires échantillonnées de manière irrégulière (Peng et Müller, Clustering basé sur la distance de processus stochastiques peu observés, avec applications aux enchères en ligne , Annals of Applied Statistics 2008 2: 1056). J'imagine qu'il peut exister un bon cadre statistique pour les séries chronologiques financières, mais je ne le sais pas.
Le kml
paquet repose essentiellement sur k-moyennes, travaillant (par défaut) sur des distances euclidiennes entre les mesures observées sur individus. Ce que l’on appelle une trajectoire n’est que la série de valeurs observées pour chaque individu , ettniyi=(yi1,yi2,…,yit)d(yi,yj)=t−1∑tk=1(yik−yjk)2−−−−−−−−−−−−−−−−√. Les données manquantes sont traitées par une légère modification de la mesure de distance précédente (ajustement de Gower) associée à un schéma d'imputation de type voisin le plus proche (pour le calcul du critère de Calinski). Comme je ne me représente pas à quoi ressembleraient vos vraies données, je ne peux pas dire si cela fonctionnera. Au moins, cela fonctionne avec les courbes de croissance longitudinales, la forme "polynomiale", mais je doute que cela vous permette de détecter des motifs très spécifiques (comme les minima / maxima locaux à des instants spécifiques avec des instants différant entre les grappes, par une translation de exemple). Si vous souhaitez regrouper des courbes éventuellement mal alignées, vous devez alors impérativement rechercher d'autres solutions. Le regroupement fonctionnel et l'alignement , de Sangalli et al., Et les références qui y figurent peuvent constituer un bon point de départ.
Ci-dessous, je vous montre un code pouvant vous aider à l'expérimenter (ma valeur de départ est généralement fixée à 101, si vous souhaitez reproduire les résultats). Fondamentalement, pour utiliser, il kml
vous suffit de construire un clusterizLongData
objet (un id
nombre pour la première colonne et les mesures dans les colonnes suivantes).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)
Les deux figures suivantes représentent les données brutes simulées et la solution à cinq grappes (selon le critère de Calinski, également utilisé dans le package fpc ). Je ne montre pas la version mise à l' échelle .