Agrupación de series de tiempo

8

Tengo muchas series de tiempo en este formato 1 columna en la que tengo formato de fecha (d / m / año) y muchas columnas que representan diferentes series de tiempo como aquí:

DATE         TS1     TS2     TS3 ...
24/03/2003   0.00    0.00    ...
17/04/2003  -0.05    1.46
11/05/2003   0.46   -3.86
04/06/2003  -2.21   -1.08
28/06/2003  -1.18   -2.16
22/07/2003   0.00    0.23

Con R, ¿cómo puedo agrupar las series de tiempo que muestran tendencias similares?

daveal81
fuente
3
En su aplicación, ¿qué es una tendencia ?
cardenal
44
Hay al menos otras tres preguntas que cubren este tema o temas muy similares, stats.stackexchange.com/q/3331/1036 , stats.stackexchange.com/q/2777/1036 , stats.stackexchange.com/q/3238/1036 .
Andy W
Una tendencia en mi aplicación es un grupo de curvas en un gráfico de TS con una forma similar, es decir, un grupo de curvas que muestran tendencias estacionales, y otro que muestra una tendencia a largo plazo, ......
daveal81
sí, este tema [link] stats.stackexchange.com/questions/3331/… bold code es muy similar a lo que quiero hacer
daveal81

Respuestas:

6

Paso 1

Realice una transformación rápida de Fourier en los datos de series temporales. Esto descompone sus datos de series temporales en componentes de frecuencia y medios y le permite utilizar variables para la agrupación que no muestran una autocorrelación pesada como muchas series temporales sin procesar.

Paso 2

Si las series temporales tienen un valor real, descarte la segunda mitad de los elementos rápidos de la transformación de Fourier porque son redundantes.

Paso 3

Separe las partes real e imaginaria de cada elemento de transformación rápida de Fourier.

Paso 4

Realice clustering basado en modelos en las partes reales e imaginarias de cada elemento de frecuencia.

Paso 5

Trace los percentiles de las series de tiempo por grupo para examinar su forma.

Alternativamente, puede omitir los componentes de CC de la transformación rápida de Fourier para evitar que sus clústeres se basen en la media y, en su lugar, en la serie definida por la transformación de Fourier, que representa la forma de la serie temporal.

También querrá calcular las amplitudes y los ángulos de fase a partir de la transformada rápida de Fourier para poder explorar la distribución de los espectros de series de tiempo dentro de los grupos. Vea esta respuesta de StackOverflow sobre cómo hacer eso para datos con valor real.

También puede trazar los percentiles de la forma de las series de tiempo por conglomerado calculando la serie de Fourier a partir de las amplitudes y los ángulos de fase (la estimación de la serie de tiempo resultante no coincidirá perfectamente con la serie de tiempo original). También puede trazar los percentiles de los datos de series temporales sin procesar por clúster. Aquí hay un ejemplo de tal trama, que surgió de un análisis armónico de datos NDVI que acabo de hacer hoy:

1º, 25º, 50º, 75º y 99º percentiles de medidas NDVI a nivel de período por agrupaciones derivadas de la agrupación basada en modelos utilizando el paquete Mclust en R

Finalmente, si su serie temporal no es estacionaria (es decir, cambio de media y varianza con el tiempo), puede ser más apropiado usar una transformada wavelet en lugar de una transformada de Fourier. Lo haría a costa de la información sobre frecuencias mientras obtiene información sobre la ubicación.

Equilibrio impetuoso
fuente
Por cierto, ¡acabo de hacer esto hoy!
Brash Equilibrium
1
¿podría proporcionar un código de ejemplo para llevar a cabo sus pasos?
pocketfullofcheese
Hola, @pocketfullofcheese. Necesitaré encontrarlo en el escritorio remoto del centro de investigación donde era compañero cuando hice esto. Puede tomar un poco, pero lo puse en mi cartera de pedidos.
Brash Equilibrium
En caso de que alguien vea mi comentario anterior, no pude obtener acceso a ese código antes de perder el acceso al escritorio remoto. Mis disculpas.
Brash Equilibrium