Estoy investigando un poco, pero me he quedado estancado en la etapa de análisis (debería haber prestado más atención a mis conferencias de estadísticas).
He recogido dos señales simultáneas: caudal integrado para el volumen y cambio en la expansión del cofre. Me gustaría comparar las señales y, en última instancia, espero obtener el volumen de la señal de expansión del cofre. Pero primero tengo que alinear / sincronizar mis datos.
Como la grabación no comienza exactamente al mismo tiempo y la expansión del cofre se captura durante períodos más largos, necesito encontrar los datos que corresponden a mis datos de volumen dentro del conjunto de datos de expansión del cofre y medir qué tan bien están alineados. No estoy muy seguro de cómo hacer esto si las dos señales no comienzan exactamente al mismo tiempo, o entre datos a diferentes escalas y con diferentes resoluciones.
Adjunto un ejemplo de las dos señales ( https://docs.google.com/spreadsheet/ccc?key=0As4oZTKp4RZ3dFRKaktYWEhZLXlFbFVKNmllbGVXNHc ), avíseme si hay algo más que pueda proporcionar.
fuente
Respuestas:
La pregunta pregunta cómo encontrar la cantidad en la cual una serie de tiempo ("expansión") se queda atrás de otra ("volumen") cuando las series se muestrean a intervalos regulares pero diferentes .
En este caso, ambas series exhiben un comportamiento razonablemente continuo, como lo mostrarán las figuras. Esto implica que (1) puede ser necesario poco o nada de suavizado inicial y (2) el remuestreo puede ser tan simple como la interpolación lineal o cuadrática. Cuadrático puede ser ligeramente mejor debido a la suavidad. Después de volver a muestrear , el retraso se encuentra maximizando la correlación cruzada , como se muestra en el hilo, Para dos series de datos muestreados con desplazamiento, ¿cuál es la mejor estimación del desplazamiento entre ellos? .
Para ilustrar , podemos usar los datos suministrados en la pregunta, empleando
R
el pseudocódigo. Comencemos con la funcionalidad básica, la correlación cruzada y el remuestreo:Este es un algoritmo crudo: un cálculo basado en FFT sería más rápido. Pero para estos datos (que involucran alrededor de 4000 valores) es lo suficientemente bueno.
Descargué los datos como un archivo CSV separado por comas y eliminé su encabezado. (El encabezado causó algunos problemas para R que no me importó diagnosticar).
Nota: Esta solución supone que cada serie de datos está en orden temporal sin espacios en ninguno de los dos. Esto le permite usar índices en los valores como indicadores del tiempo y escalar esos índices por las frecuencias de muestreo temporales para convertirlos en tiempos.
Resulta que uno o ambos instrumentos se desplazan un poco con el tiempo. Es bueno eliminar esas tendencias antes de continuar. Además, debido a que hay una disminución gradual de la señal de volumen al final, debemos recortarla.
Vuelvo a muestrear las series menos frecuentes para obtener la mayor precisión del resultado.
Ahora se puede calcular la correlación cruzada, por eficiencia buscamos solo una ventana razonable de retrasos, y se puede identificar el retraso donde se encuentra el valor máximo.
La salida nos dice que la expansión demora el volumen en 1.85 segundos. (Si no se recortaran los últimos 3,5 segundos de datos, la salida sería 1,84 segundos).
Es una buena idea verificar todo de varias maneras, preferiblemente visualmente. Primero, la función de correlación cruzada :
A continuación, registremos las dos series en el tiempo y tracémoslas juntas en los mismos ejes .
¡Se ve bastante bien! Sin embargo, podemos tener una mejor idea de la calidad del registro con un diagrama de dispersión . Varío los colores por tiempo para mostrar la progresión.
Estamos buscando los puntos para rastrear hacia adelante y hacia atrás a lo largo de una línea: las variaciones a partir de eso reflejan no linealidades en la respuesta retardada de la expansión al volumen. Aunque hay algunas variaciones, son bastante pequeñas. Sin embargo, cómo estas variaciones cambian con el tiempo puede ser de algún interés fisiológico. Lo maravilloso de las estadísticas, especialmente su aspecto exploratorio y visual, es cómo tiende a crear buenas preguntas e ideas junto con respuestas útiles .
fuente
acf
función de R.R
cuando publiqué esta respuesta y me olvidé de proporcionar una definición para esa función. Aquí está el original:normalize <- function(x) { x.max <- max(x); x.min <- min(x); dx <- x.max - x.min; if (dx==0) dx <- 1; (x-x.min) / dx }