¿Cómo correlacionar dos series de tiempo con brechas y diferentes bases de tiempo?

10

Hice esta pregunta en StackOverflow, y me recomendaron que la hiciera aquí.


Tengo dos series temporales de datos de acelerómetro 3D que tienen diferentes bases de tiempo (los relojes comenzaron en diferentes momentos, con un ligero desplazamiento durante el tiempo de muestreo), además de contener muchos espacios de diferente tamaño (debido a retrasos asociados con la escritura para separar dispositivos flash).

Los acelerómetros que estoy usando son los económicos GCDC X250-2 . Estoy ejecutando los acelerómetros en su mayor ganancia, por lo que los datos tienen un ruido de fondo significativo.

Cada serie de tiempo tiene aproximadamente 2 millones de puntos de datos (más de una hora a 512 muestras / seg) y contiene alrededor de 500 eventos de interés, donde un evento típico abarca entre 100 y 150 muestras (200-300 ms cada una). Muchos de estos eventos se ven afectados por interrupciones de datos durante las escrituras flash.

Entonces, los datos no son prístinos, y ni siquiera son muy bonitos. Pero mi inspección del globo ocular muestra que contiene claramente la información que me interesa. (Puedo publicar tramas, si es necesario).

Los acelerómetros se encuentran en entornos similares, pero están moderadamente acoplados, lo que significa que puedo decir a simple vista qué eventos coinciden con cada acelerómetro, pero hasta ahora no he tenido éxito en el software. Debido a limitaciones físicas, los dispositivos también están montados en diferentes orientaciones, donde los ejes no coinciden, pero están tan cerca de la ortogonal como podría hacerlos. Entonces, por ejemplo, para acelerómetros de 3 ejes A y B, + Ax se asigna a -By (arriba-abajo), + Az se asigna a -Bx (izquierda-derecha) y + Ay se asigna a -Bz (adelante-atrás) .

Mi objetivo inicial es correlacionar los eventos de choque en el eje vertical, aunque eventualmente me gustaría a) descubrir automáticamente el mapeo del eje, b) correlacionar la actividad en los ases mapeados, yc) extraer las diferencias de comportamiento entre los dos acelerómetros (como la torsión o flexionando).

La naturaleza de los datos de la serie temporal hace que numpy.correlate () de Python sea inutilizable. También he mirado el paquete de R's Zoo, pero no he avanzado con él. He buscado ayuda en diferentes campos del análisis de señales, pero no he progresado.

¿Alguien tiene alguna pista de lo que puedo hacer o enfoques que debería investigar?

Actualización 28 de febrero de 2011: se agregaron algunas parcelas aquí que muestran ejemplos de los datos.

BobC
fuente
1
@BobC, quizás uno de los moderadores pueda migrar su publicación a este sitio. Eso sería lo más razonable. En cuanto a sus preguntas técnicas, en primer lugar, ¿está utilizando la FFT para hacer la correlación? Eso debería ser factible para 2 millones de puntos de datos en una computadora medio decente. Su relación señal / ruido se ve razonablemente alta, por lo que debería estar en el negocio. Un corte rápido y sucio sería completar los datos faltantes con la última muestra disponible o con ceros. El arrastre de las diferencias de intervalo de muestreo puede ser la "característica" más desafiante de sus datos para tratar.
cardenal
@cardinal: De hecho, probé una FFT, solo como resultado de obtener basura. Las características 'interesantes' fácilmente visibles en los datos son indistinguibles del ruido en la FFT. Sin embargo, he realizado FFT solo en todo el conjunto de datos: tal vez una FFT de ventana móvil proporcionaría mejores resultados, pero aún no he podido encontrar una manera computacionalmente eficiente de implementarlo. Sospecho que una transformación Wavelet podría ayudar, pero no estoy familiarizado con ella (pero poco a poco estoy aprendiendo sobre ella).
BobC
1
@BobC, lo que quise decir es, ¿consideró una implementación basada en FFT para calcular la correlación? La convolución directa es , pero una implementación basada en FFT reduciría este , haciéndolo factible. En cuanto a mirar el FFT en sí, con 2 millones de puntos de datos, su resolución de frecuencia será muy alta. Cualquier arrastre de muestreo y otras cosas seguramente eliminarán la señal por frecuencia. Sin embargo, debe poder agregarse en muchos contenedores para sacar la señal del ruido. Algo así como un enfoque de Welch o tal vez una técnica de ventanas personalizada. O(n2)O(nlogn)
cardenal
@BobC, en la parte superior de mi cabeza, parece que alguna variante de un algoritmo de superponer y agregar o superponer y guardar podría usarse para hacer una FFT de ventana deslizante. Deslizar las muestras dentro de una ventana equivale a un cambio de fase, por lo que todo lo que tiene que hacer es compensar las muestras que "se caen" del extremo izquierdo y las que "entran" en el extremo derecho.
cardenal
Hola, tengo una pregunta similar. Tengo 2 series de tiempo, cada una representada por una matriz con su primera columna correspondiente a los valores y la segunda columna correspondiente a la diferencia de tiempo (desde el valor anterior) ¿Cómo encuentro la correlación entre estas 2 matrices? Traté de hacer xcorr2 () pero no parece correcto y hacer xcorr probablemente calcularía la correlación con solo los valores a tener en cuenta, pero también quiero tener en cuenta el tiempo. Estoy realmente confundido aquí, ¿ayudará una FFT? ¿Cómo sugerirías que lo haga?

Respuestas:

12

La pregunta se refiere al cálculo de la correlación entre dos series de tiempo muestreadas irregularmente (procesos estocásticos unidimensionales) y su uso para encontrar el desplazamiento de tiempo donde están correlacionadas al máximo (su "diferencia de fase").

Este problema generalmente no se aborda en el análisis de series temporales, porque se supone que los datos de las series temporales se recopilan sistemáticamente (a intervalos regulares de tiempo). Es más bien la provincia de la geoestadística , que se refiere a las generalizaciones multidimensionales de las series de tiempo. El conjunto de datos geoestadísticos arquetípicos consiste en mediciones de muestras geológicas en ubicaciones espaciadas irregularmente.

Con un espaciado irregular, las distancias entre pares de ubicaciones varían: no hay dos distancias iguales. La geoestadística supera esto con el variograma empírico . Esto calcula un valor "típico" (a menudo la media o mediana) de 2/2 --la "semivariancia" - donde denota un valor medido en el punto y la distancia entre y está restringida a estar dentro de un intervalo llamado "retraso". Si suponemos que el proceso es estacionario y tiene una covarianza, entonces la expectativa de la semivariancia es igual a la covarianza máxima (igual a para cualquier ) menos la covarianza entre(z(p)z(q))2/2z(p)ppqZVar(Z(p))pZ(p) y . Esta agrupación en rezagos hace frente al problema del espacio irregular.Z(q)

Cuando se realiza un par ordenado de mediciones en cada punto, se puede calcular de manera similar el variograma cruzado empírico entre las 's y las ' s y, por lo tanto, estimar la covarianza en cualquier retraso . Desea la versión unidimensional del variograma cruzado. Los paquetes R gstat y sgeostat , entre otros, estimarán variogramas cruzados. No se preocupe si sus datos son unidimensionales; Si el software no funciona con ellos directamente, simplemente introduzca una segunda coordenada constante: eso hará que parezcan bidimensionales.(z(p),w(p))zw

Con dos millones de puntos, debería ser capaz de detectar pequeñas desviaciones de la estacionariedad. Es posible que la diferencia de fase entre las dos series temporales también varíe con el tiempo. Haga frente a esto calculando el variograma cruzado por separado para diferentes ventanas espaciadas a lo largo del período de tiempo.

@cardinal ya ha mencionado la mayoría de estos puntos en los comentarios. La principal contribución de esta respuesta es apuntar hacia el uso de paquetes de estadísticas espaciales para hacer su trabajo por usted y utilizar técnicas de geoestadística para analizar estos datos. En cuanto a la eficiencia computacional, tenga en cuenta que la convolución completa (variograma cruzado) no es necesaria: solo necesita sus valores cerca de la diferencia de fase. Esto hace que el esfuerzo sea , no , donde es el número de rezagos para calcular, por lo que podría ser factible incluso con un software listo para usar. Si no, el algoritmo de convolución directa es fácil de implementar.O ( n 2 ) kO(nk)O(n2)k

whuber
fuente
@whuber, buenos comentarios y sugerencias. Si estoy leyendo la pregunta correctamente, creo que una preocupación principal es la incertidumbre sobre el punto de tiempo del muestreo. Esto puede ser un poco diferente del marco típico de geoestadística donde, creo, el espacio es irregular, pero aún se supone conocido (al menos con alta precisión). Creo que un modelo aproximado es, si el º punto de una serie es en el momento , para fijo entonces el º punto de serie 2 está en donde es probablemente del orden de unos pocos milisegundos y es muy pequeño. t n = n t t n τ n = t n + α + β n α βntn=nttnτn=tn+α+βnαβ
cardenal
@ Cardenal No entendí eso de la pregunta. No puedo pensar en una forma de estimar que no sea computacionalmente intensiva. ¿Quizás al dividir las series de tiempo en grupos donde el efecto neto de es insignificante? βββ
whuber
@whuber, @BobC, estoy haciendo una suposición semi-educada basada en la experiencia pasada que trata con problemas y problemas similares. La mayoría de los enfoques que he visto son computacionalmente intensivos y no impresionan. Un intento podría ser a través de algo como la deformación dinámica del tiempo o lo que Ramsay y Silverman llaman registro de curva . No estoy claro si cualquiera de estos sería factible en este conjunto de datos de tamaño.
cardenal
Me tomará un poco entender mi cerebro sobre esto. Comenzaré con los ejemplos en los paquetes R que mencionaste.
BobC
@BobC, ¿es el modelo aproximado que le di para la asincronía del tiempo cerca de lo que tienes? Estoy pensando que es un "desplazamiento inicial aleatorio" + "error lineal" donde este último se debe a una pequeña diferencia constante en el intervalo de muestreo entre sus dos dispositivos. Luego hay un pequeño error aleatorio adicional, digamos debido a la interrupción del procesamiento de dos uC diferentes además de eso.
cardenal