Mínimo móvil (ventana móvil)¿Alguien sabe cómo calcular un mínimo móvil (o, de hecho, cómo seleccionar de forma iterativa X número de filas de retraso y hacerles cualquier cosa, como calcular un mínimo, un máximo, un rango, etc. En este ejemplo específico quiero volver a revisarlo? diga las últimas 100 filas y obtenga el valor mínimo, luego pase a la siguiente fila hacia abajo y haga lo mismo nuevamente (una y otra vez).
Diseño de experimentosRe: mínimo móvil (ventana móvil)La macro a continuación no es particularmente elegante, pero hará el trabajo.
For ( i= 100, i <= N Rows ( dt ), i++,
dt << Select Rows (Index (i-99, i));
dt << Subset(
Selected Rows( 1 ),
Selected Columns ( 0 ),
Output Table ("out")
);
Current Data Table ( Data Table ("out"));
x = Col Minimum ( :YourDataColumn );
Close ( Data Table ( "out"), no save);
Column ( "YourMovingWindow" )[i] = x;
)Subconfigurar los datos seleccionados, como lo hice, es lento. Quizás otro usuario tenga una mejor idea de cómo acceder a los datos seleccionados y extraer el producto deseado.
También me pregunto cómo podría ser una fórmula de columna para lograr los resultados sin una macro.
Salud,
Kofi
Re: mínimo móvil (ventana móvil)Algo como esto funcionaría?
Names default to here( 1 );
dt = open("$SAMPLE_DATA\Big Class.jmp");
dt << New Column("Min height 5 back",
Formula(
Min( // since we want a minumum
:height[// the column we want the minimum of
// a slice of the current row minus 5 (minimum 1 so it's still on the datatable)
// and current row
Min( Row() - 5 )::Row()
]
)
)
);