¿Cómo calcular el promedio móvil de la columna con 10 millones de entradas?Estoy tratando de ejecutar la siguiente fórmula en una columna con 10 millones de filas para calcular el promedio móvil, pero la secuencia de comandos se sigue ejecutando para siempre y jmp deja de responder: esta Tabla << Nueva columna ("av", Numérica, Continua, Fórmula (Media ( : x [Índice (Fila () - 99999, Fila ())]))); ¿Hay alguna limitación o algo malo con la fórmula? ¿Cómo puedo calcular la media móvil en este caso?
Re: ¿Cómo calcular el promedio móvil de la columna con 10 millones de entradas?La función Col Moving Average () se puede quitar fácilmente de la fórmula. Tomando el enfoque provisto en la segunda fórmula en mi publicación anterior, el cálculo de la media móvil al sumar los datos y luego dividirlos, le dará lo que desea. Por favor, asegúrese de entender cómo funciona el código que se le proporciona. Aquí hay una nueva modificación de la fórmula:
If( Row() == 1,
theLag = 100000;
theSum = 0;
);
If(
Row() <= theLag,
theSum = theSum + :x;
theAvg = theSum/Row(),
theAvg = ((theSum - :x[Row() - theLag]) + :x) / theLag
);
theAvg;
Re: ¿Cómo calcular el promedio móvil de la columna con 10 millones de entradas?esta secuencia de comandos no funciona en JMP12 (Promedio de columnas no se admite en JMP12)Re: ¿Cómo calcular el promedio móvil de la columna con 10 millones de entradas?Prueba esto y ve si se ejecuta más rápido.
Col Moving Average( :x, 1, 999999, 0 )
Busque en el índice de secuencias de comandos para obtener documentación y ejemplos.
O bien, puede intentar esto, lo que elimina el requisito de calcular la media para una lista de 100000 filas para el cálculo de cada fila y reducirla a una única resta, una sola suma y una división.
If( Row() == 1,
theLag = 100000;
theSum = Sum( :x[Index( 1, theLag )] );
);
If(
Row() < theLag, theAvg = <FONT color="#c7254e" face="Consolas" style="background-color: #f4f2f9;">Col Moving Average( :x, 1, theLag, 0 )</FONT>,
Row() == theLag, theAvg = theSum / theLag,
theAvg = ((theSum - :x[Row() - theLag]) + :x) / theLag
);
theAvg;
Re: ¿Cómo calcular el promedio móvil de la columna con 10 millones de entradas?Probé la solución sugerida, pero no da la respuesta correcta, ¿podría ayudar?
Re: ¿Cómo calcular el promedio móvil de la columna con 10 millones de entradas?Estás en lo correcto, la fórmula estaba en error. No estaba configurando el valor de "theSum" correctamente. Lo siguiente debe obtener resultados correctos:
If( Row() == 1,
theLag = 3;
theSum = 0;
);
If( Row() <= theLag,
theSum = theSum + :yield;
theAvg = theSum / Row();
,
theAvg = ((theSum - :yield[Row() - theLag]) + :yield) / theLag;
theSum = (theSum - :yield[Row() - theLag]) + :yield;
);
theAvg;
Re: ¿Cómo calcular el promedio móvil de la columna con 10 millones de entradas?Sí, ahora no produce ningún error, pero tengo que comprobar si funcionará para 10 millones de entradas.
Re: ¿Cómo calcular el promedio móvil de la columna con 10 millones de entradas?Debería funcionar para 10,000,000 filas.
Por favor, responda con los resultados de sus pruebas.
Aquí hay una versión más rápida de la fórmula ... elimina la necesidad de un segundo cálculo de la suma
If( Row() == 1,
theLag = 3;
theSum = 0;
);
If( Row() <= theLag,
theSum = theSum + :yield;
theAvg = theSum / Row();
,
theSum = (theSum - :yield[Row() - theLag]) + :yield;
theAvg = theSum / theLag;
);
theAvg;
Re: ¿Cómo calcular el promedio móvil de la columna con 10 millones de entradas?Para el punto y haga clic en personas como yo, puede obtener un promedio móvil en una columna haciendo clic derecho en el encabezado de la columna de interés y seleccionando "Nueva columna de fórmula"> Fila> Promedio móvil. Tendrá que hacer otro clic o dos para decidir si desea o no usar la ponderación, pero fue bastante rápido una vez que hice clic en Aceptar para mi tabla de datos de fila simulada de 10M.
HTH
Cuenta