J'ai un ensemble de données chronologiques. Chaque série couvre la même période, bien que les dates réelles dans chaque série chronologique ne soient pas toutes "alignées" exactement.
Autrement dit, si la série chronologique devait être lue dans une matrice 2D, elle ressemblerait à ceci:
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
Je veux écrire un script R qui séparera la série temporelle {T1, T2, ... TN} en "familles", une famille étant définie comme un ensemble de séries qui "ont tendance à se déplacer dans la sympathie" les unes avec les autres.
Pour la partie "clustering", je devrai sélectionner / définir un type de mesure de distance. Je ne sais pas trop comment procéder, car je traite de séries chronologiques, et une série de séries pouvant émouvoir par sympathie sur un intervalle peut ne pas l'être dans un intervalle ultérieur.
Je suis sûr qu'il y a beaucoup plus de personnes expérimentées / intelligentes que moi ici, donc je vous serais reconnaissant de toute suggestion ou idée sur l'algorithme / l'heuristique à utiliser pour la mesure de distance et sur la façon de l'utiliser pour regrouper les séries chronologiques.
À mon avis, il n’ya PAS de méthode statistique bien établie pour le faire. Je serais donc très intéressé de voir comment les gens abordent / résolvent ce problème - pensant comme un statisticien.
la source
Réponses:
Dans le flux de données et l'extraction de bases de données de séries chronologiques, une approche courante consiste à transformer la série en représentation symbolique, puis à utiliser une métrique de similarité, telle que la distance euclidienne, pour regrouper les séries. Les représentations les plus populaires sont SAX (Keogh & Lin) ou le plus récent iSAX (Shieh & Keogh):
Les pages ci-dessus contiennent également des références aux métriques de distance et au clustering. Keogh et son équipe sont engagés dans des recherches reproductibles et très réceptifs à la publication de leur code. Donc, vous pouvez leur envoyer un courriel et demander. Je pense qu’ils ont tendance à fonctionner dans MATLAB / C ++.
Il y a eu un effort récent pour produire une implémentation Java et R:
Je ne sais pas jusqu'où il se trouve - il est axé sur la recherche de motif, mais, selon leur degré d'avancement, il devrait disposer des éléments nécessaires pour mettre en place quelque chose pour vos besoins (métriques iSAX et distance: puisque cette partie est commune au regroupement et à la recherche de motif).
la source
Une autre façon de dire "ont tendance à être sympathiques" est "cointégrée".
Il existe deux méthodes standard de calcul de la cointégration : la méthode Engle-Granger et la procédure de Johansen. Celles-ci sont traitées dans «Analyse de séries chronologiques intégrées et cointégrées avec R» (Pfaff 2008) et dans le package R urca associé . Je recommande fortement le livre si vous souhaitez poursuivre ces méthodes dans R.
Je vous recommande également de regarder cette question sur les séries temporelles multivariées et, en particulier, sur le cours de Ruey Tsay à l'Université de Chicago, qui comprend tout le code R nécessaire.
la source
Les dynamacistes de la population, en particulier ceux qui étudient les insectes, effectuent assez souvent des séries de grappes pour comprendre les tendances en matière d'épidémie et d'effondrement. Cherchez des travaux sur la spongieuse, la tordeuse de l'épinette, le dendroctone du pin ponderosa et la tordeuse du mélèze.
Pour le regroupement réel, vous pouvez choisir la métrique de distance de votre choix. Chacune a probablement ses forces et son week-end par rapport au type de données regroupées, Kaufmann et Rousseeuw 1990. Recherche de groupes dans les données. Une introduction à l'analyse par grappes est un bon point de départ. Rappelez-vous que la méthode de regroupement n'a pas d'importance si vous utilisez une série chronologique, elle se contente de regarder les valeurs mesurées au même moment. Si vos deux séries chronologiques ne sont pas suffisamment synchronisées au cours de leur durée de vie, elles ne seront pas (et ne devraient peut-être pas) être regroupées.
Ce qui vous posera problème, c’est de déterminer le nombre de grappes (familles) à utiliser une fois la série chronologique établie. Il existe différentes manières de sélectionner une limite de grappes d'informations, mais ici la littérature n'est pas très bonne.
la source
Voir ma réponse à une question similaire ici . En résumé, faites une transformation de Fourier rapide des données, éliminez les fréquences redondantes si vos données d'entrée étaient réellement valables, séparez les parties réelle et imaginaire de chaque élément de la transformation de Fourier rapide et utilisez le paquetage Mclust dans R pour modéliser regroupement basé sur les parties réelles et imaginaires de chaque élément de chaque série temporelle. Le progiciel automatise l’optimisation en fonction du nombre de clusters et de leurs densités.
la source
Vous pouvez également utiliser le package clustDDist, qui applique la méthode des leaders et la méthode de classification hiérarchique avec différentes mesures d'erreur:
http://r-forge.r-project.org/projects/clustddist/
La distance euclidienne au carré favorise les configurations de distributions qui ont un pic élevé et donc mesurent
la source