3 votos

Método recursivo Boxcar para hallar la desviación típica

Estoy intentando desarrollar un algoritmo en tiempo real para encontrar zonas de nivel de una señal eléctrica.

Para ello necesito hallar la varianza para un intervalo de tiempo rodante concreto.

En Blog de John Cook and the Art of Computer Programming el algoritmo para determinar rápidamente la varianza es:

M k \= M k-1 + (x k - M k-1 )/k

S k \= S k-1 + (x k - M k-1 ) * (x k - M k )

Donde la k-ésima estimación de la varianza es:

$ s^2 = S_k / (k-1) $

Esto funciona muy bien, pero necesito mantener una varianza "rodante" de 100 muestras. En cada paso añadiría una nueva muestra y eliminaría la muestra número 100 de la lista.

Si conozco el valor de x k-100 ¿existe algún algoritmo rápido para "borrarlo" del resultado de la varianza?

2voto

Mike Puntos 1113

Haz los cálculos de esa fórmula a la inversa. Sea $S_{m,n}$ sea el valor de Knuth $S$ (varianza veces muestras-menos-1) para los elementos $m..n$ de su corriente ondulante; entonces, al igual que $S_{m,n+1} = S_{m,n}+(x_n-M_{m,n-1})\cdot(x_n-M_{m,n})$ , tienes $S_{m, n} = S_{m+1,n} + (x_m-M_{m+1,n})\cdot(x_m-M_{m,n})$ - o en otras palabras, $S_{m+1,n} = S_{m,n} - (x_m-M_{m+1,n})\cdot(x_m-M_{m,n})$ . En cada paso, donde tienes tu valor rodante $S = S_{k-99,k}$ calcula primero $S_{k-98,k}$ con una aplicación de la fórmula para $S_{m+1,n}$ en términos de $S_{m,n}$ y luego una aplicación de la fórmula para $S_{m,n+1}$ en términos de $S_{m,n}$ . Tenga en cuenta que, para ello, necesitará los valores de la media móvil "antes y después", pero encontrar $M_{m,n}$ y los valores asociados es (obviamente) mucho más fácil.

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