59 votos

Es posible hacer series de tiempo de clustering basado en la forma de la curva?

Tengo los datos de ventas de una serie de puntos de venta, y quiere categorizarlas de acuerdo con la forma de sus curvas a lo largo del tiempo. Los datos se ve aproximadamente como este (pero obviamente no es al azar, y tiene algunos datos que faltan):

n.quarters <- 100
n.stores <- 20
if (exists("test.data")){
  rm(test.data)
}
for (i in 1:n.stores){
  interval <- runif(1, 1, 200)
  new.df <- data.frame(              
    var0 = interval + c(0, cumsum(runif(49, -5, 5))),
    date = seq.Date(as.Date("1990-03-30"), by="3 month", length.out=n.quarters),
    store = rep(paste("Store", i, sep=""), n.quarters))
  if (exists("test.data")){
    test.data <- rbind(test.data, new.df)    
  } else {
    test.data <- new.df
  }
}
test.data$store <- factor(test.data$store)

Me gustaría saber cómo puedo clúster basado en la forma de las curvas en R. me había considerado el siguiente enfoque:

  1. Crear una nueva columna por la transformación lineal de cada tienda var0 a un valor entre 0.0 y 1.0 para la serie de tiempo completa.
  2. Clúster de estos transformado curvas mediante la kml paquete en R.

Tengo dos preguntas:

  1. Es esta una razonable exploratorio de enfoque?
  2. ¿Cómo puedo transformar mis datos a los datos longitudinales de formato kml va a entender? Cualquier R fragmentos sería muy apreciada!

34voto

DavLink Puntos 101

Varias direcciones para el análisis de datos longitudinales fueron discutidos en el enlace proporcionado por @Jeromy, así que le sugiero que lea detenidamente, especialmente aquellos funcional el análisis de los datos. Intente buscar en google por "Agrupación Funcional de Datos Longitudinales", o el RITMO de Matlab toolbox que se refiere específicamente con el modelo basado en la agrupación de muestras irregulares trayectorias (Peng y Müller, basados en la Distancia de la agrupación de escasamente observada procesos estocásticos, con aplicaciones a las subastas en línea, Anales de la Estadística Aplicada 2008 2: 1056). Me imagino que puede ser un buen marco estadístico para el tiempo financiero de la serie, pero yo no sé acerca de eso.

El kml paquete básicamente se basa en k-means, de trabajo (por defecto) en distancias euclídeas entre los t mediciones observadas en n los individuos. Lo que se llama una trayectoria es sólo la serie de valores observados para el individuo i$$, yi=(yi1,yi2,,yes) y d(yi,yj)=t1k=1t(yikyjk)2. Los datos faltantes se maneja a través de una ligera modificación de la anterior medida de distancia (Gower ajuste), asociada a un vecino más cercano-como la imputación de un esquema (para el cálculo de Calinski criterio). Como no me representan a mí mismo lo que los datos reales se vería, no puedo decir si funciona. Al menos, se trabajo con el crecimiento longitudinal de las curvas, "polinomio" de la forma, pero dudo que le permiten detectar muy patrones específicos (como local mínimos/máximos de tiempo específico-puntos con los puntos de tiempo diferentes entre los grupos, por ejemplo la traducción). Si usted está interesado en la agrupación posiblemente desalineados curvas, entonces usted definitivamente tiene que buscar otras soluciones; la agrupación Funcional y la alineación, de Sangalli et al., y las referencias en él puede proporcionar un buen punto de partida.

A continuación, voy a mostrar algo de código que puede ayudar a experimentar con ella (mi semilla generalmente se establece en el 101, si desea reproducir los resultados). Básicamente, para el uso de kml sólo tienes que construir un clusterizLongData objeto ( id número de la primera columna, y el t mediciones en las columnas siguientes).

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)

Las siguientes dos figuras son los crudos datos simulados y las cinco de la solución de clúster (según Calinski criterio, también se utiliza en el fpc paquete). No muestro la versión a escala.

alt text

alt text

12voto

Matt Hamilton Puntos 288

Un enfoque alternativo fue publicado por un stats.se regular en Wang, Xiaozhe, Kate Smith, y Rob Hyndman.

"Característico Basado en la Agrupación de Datos de Series de Tiempo'. La Minería De Datos el Descubrimiento del Conocimiento y 13, no. 3 (2006): 335-364.

Escribe:

En este trabajo se propone un método para la agrupación de series de tiempo basado en sus características estructurales. A diferencia de otras alternativas, este método no clúster de valores de punto mediante una distancia métrica, en lugar es conglomerados basado en las características extraídas de la serie de tiempo. La función de las medidas se obtienen a partir de cada individuo de la serie y puede se alimenta al arbitraria algoritmos de clustering, incluyendo un sin supervisión algoritmo de red neuronal, mapa de auto-organización, o jerárquica algoritmo de clustering. Medidas a nivel mundial, que describe la serie de tiempo son obtenidos mediante la aplicación de operaciones estadísticas que mejor captura de la características subyacentes: tendencia, estacionalidad, la periodicidad, la serie correlación, asimetría, curtosis, el caos, la no linealidad, y auto-similitud. Dado que el método de clusters utilizando extraído global medidas, se reduce la dimensionalidad de la serie de tiempo y es mucho menos sensible a la falta o de datos ruidosos. Nos proporcionan además una búsqueda mecanismo para encontrar la mejor selección del conjunto de características de que debe ser utilizado como el agrupamiento de las entradas.

R código está disponible en el blog de Rob.

7voto

jeremcc Puntos 3720

Usted puede mirar el trabajo de Eamonn Keogh (UC Riverside) en las series de tiempo de la agrupación. Su sitio web tiene un montón de recursos. Creo que proporciona Matlab ejemplos de código, de manera que tendría que traducir esto a R.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X