Tengo un conjunto de datos de series de tiempo. Cada serie cubre el mismo período, aunque las fechas reales en cada serie de tiempo pueden no "alinearse" exactamente.
Es decir, si las series temporales se leyeran en una matriz 2D, se vería así:
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
Quiero escribir un script R que separe las series temporales {T1, T2, ... TN} en 'familias' donde una familia se define como un conjunto de series que "tienden a moverse en simpatía" entre sí.
Para la parte de "agrupamiento", tendré que seleccionar / definir un tipo de medida de distancia. No estoy muy seguro de cómo hacerlo, ya que estoy tratando con series de tiempo, y un par de series que pueden moverse en simpatía durante un intervalo, pueden no hacerlo en un intervalo posterior.
Estoy seguro de que hay personas mucho más experimentadas / inteligentes que yo aquí, por lo que agradecería cualquier sugerencia, idea sobre qué algoritmo / heurístico usar para la medida de distancia y cómo usarlo para agrupar las series de tiempo.
Supongo que NO existe un método estadístico robusto establecido para hacer esto, por lo que estaría muy interesado en ver cómo las personas abordan / resuelven este problema, pensando como un estadístico.
fuente
Respuestas:
En la transmisión de datos y la minería de bases de datos de series de tiempo, un enfoque común es transformar la serie en una representación simbólica, luego usar una métrica de similitud, como la distancia euclidiana, para agrupar la serie. Las representaciones más populares son SAX (Keogh & Lin) o el nuevo iSAX (Shieh & Keogh):
Las páginas anteriores también contienen referencias a métricas de distancia y agrupamiento. Keogh y su equipo están interesados en la investigación reproducible y bastante receptivos a la publicación de su código. Para que pueda enviarles un correo electrónico y preguntar. Sin embargo, creo que tienden a funcionar en MATLAB / C ++.
Hubo un esfuerzo reciente para producir una implementación Java y R:
No sé qué tan avanzado está: está orientado a la búsqueda de motivos, pero, dependiendo de cuán lejos hayan llegado, debería tener los bits necesarios que necesita para armar algo para sus necesidades (iSAX y métricas de distancia: ya que esta parte es común a la agrupación y la búsqueda de motivos).
fuente
Otra forma de decir "tienden a moverse en simpatía" es "cointegrado".
Hay dos formas estándar de calcular la cointegración : el método de Engle-Granger y el procedimiento de Johansen. Estos están cubiertos en "Análisis de series de tiempo integradas y cointegradas con R" (Pfaff 2008) y el paquete de R urca relacionado . Recomiendo el libro si desea seguir estos métodos en R.
También le recomiendo que vea esta pregunta en series de tiempo multivariadas y, en particular, en el curso de Ruey Tsay en U. Chicago, que incluye todo el código R necesario.
fuente
La agrupación de series de tiempo se realiza con bastante frecuencia por parte de los dinamacistas de la población, especialmente aquellos que estudian los insectos para comprender las tendencias en brotes y colapso. Busque trabajo en la polilla gitana, el abejorro Spruce, el escarabajo del pino de montaña y el alerce budmoth.
Para el agrupamiento real, puede elegir la métrica de distancia que desee, cada uno probablemente tiene sus propias fortalezas y semanalidades en relación con el tipo de datos que se agrupan, Kaufmann y Rousseeuw 1990. Encontrar grupos en los datos. Una introducción al análisis de conglomerados es un buen lugar para comenzar. Recuerde, el método de agrupación no 'importa' que esté utilizando una serie de tiempo, solo analiza los valores medidos en el mismo punto de tiempo. Si sus dos series de tiempo no están sincronizadas lo suficiente durante su vida útil, no se agruparán (y quizás no deberían).
Donde tendrá problemas es determinar la cantidad de clústeres (familias) a usar después de haber agrupado las series de tiempo. Hay varias formas de seleccionar un límite de grupos informativos, pero aquí la literatura no es tan buena.
fuente
Vea mi respuesta a una pregunta similar aquí . En pocas palabras, haga una transformación rápida de Fourier de los datos, descarte las frecuencias redundantes si sus datos de entrada fueron valorados de forma real, separe las partes real e imaginaria para cada elemento de la transformación rápida de Fourier y use el paquete Mclust en R para hacer el modelo. agrupamiento basado en las partes reales e imaginarias de cada elemento de cada serie de tiempo. El paquete automatiza la optimización sobre el número de clústeres y sus densidades.
fuente
También puede usar el paquete clustDDist, que realiza el método de líderes y el método de agrupamiento jerárquico con diferentes medidas de error:
http://r-forge.r-project.org/projects/clustddist/
fuente