20 votos

En línea estimación de los cuartiles sin almacenar las observaciones

Necesito calcular los cuartiles (Q1,mediana y Q3) en tiempo real en un gran conjunto de datos sin guardar las observaciones. Probé por primera vez el P cuadrado algoritmo (Jain/Chlamtac), pero no estaba satisfecho con ella (un poco demasiado uso de la cpu y no convencido por la precisión, al menos en mi conjunto de datos).

Yo uso ahora el algoritmo FAME (Feldman/Shavitt) para la estimación de la mediana sobre la marcha y tratar de derivar el algoritmo para calcular también la Q1 y Q3 :

M = Q1 = Q3 = first data value 
step =step_Q1 = step_Q3 = a small value
for each new data :
        # update median M 
        if M > data:
            M = M - step
        elif M < data:
            M = M + step
        if abs(data-M) < step:
            step = step /2

        # estimate Q1 using M
        if data < M:
            if Q1 > data:
                Q1 = Q1 - step_Q1
            elif Q1 < data:
                Q1 = Q1 + step_Q1
            if abs(data - Q1) < step_Q1:
                step_Q1 = step_Q1/2
        # estimate Q3 using M
        elif data > M:
            if Q3 > data:
                Q3 = Q3 - step_Q3
            elif Q3 < data:
                Q3 = Q3 + step_Q3
            if abs(data-Q3) < step_Q3:
                step_Q3 = step_Q3 /2

Para reanudar, simplemente utiliza la mediana de M obtenidos sobre la marcha para dividir el conjunto de datos en dos y, a continuación, volver a usar el mismo algoritmo tanto para Q1 y Q3.

Esto parece funcionar de alguna manera, pero no soy capaz de demostrar (no soy un matemático) . Es flawned ? Agradecería cualquier sugerencia o eventual otra técnica de montaje el problema.

Muchas gracias por su Ayuda !

==== EDITAR =====

Para aquellos que se interesan por este tipo de preguntas, después de un par de semanas, que finalmente terminó por el simple uso del Embalse de Muestreo con un revervoir de 100 los valores, y dio muy satistfying resultados (para mí).

6voto

Avraham Puntos 1845

La mediana es el punto en el que la 1/2 de las observaciones se sitúan por debajo y 1/2 de arriba. Del mismo modo, el 25 de perecentile es la mediana para datos entre el mínimo y la mediana y el percentil 75 es el punto medio entre la mediana y el max, así que sí, creo que estás en tierra firme aplicación de lo mediana del algoritmo que se utilice primero en el conjunto completo de datos a la partición y, a continuación, en las dos piezas resultantes.

Actualización:

Esta pregunta en stackoverflow conduce a este papel: Raj Jain, Imrich Chlamtac: El P2 Algoritmo para el Cálculo Dinámico de Quantiiles y los Histogramas Sin Almacenar las Observaciones. Commun. ACM 28(10): 1076-1085 (1985) , cuyo resumen se indica que probablemente es de gran interés para usted:

Un algoritmo heurístico que se propone para el cálculo dinámico qf la la mediana y otros cuantiles. Las estimaciones se producen de forma dinámica a medida las observaciones que se generan. Las observaciones no son almacenados; por lo tanto, el algoritmo tiene una muy pequeña y almacenamiento fijo requisito, independientemente del número de observaciones. Esto hace que sea ideal para la aplicación en un cuantil chip que puede ser utilizado en controladores industriales y de los registradores. El algoritmo es más ampliado hasta el histograma de trazado. La precisión del algoritmo es analizado.

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