Pregunta de guión para volver a ejecutar fórmulasHice esta pregunta en una publicación anterior, pero eso fue hace unas semanas, por lo que es posible que no se note.Sospecho que esta es una pregunta fácil de secuencias de comandos para este grupo.A continuación se muestra un script (donado por frank) que ejecuta con éxito una simulación de Monte Carlo para una regresión paso a paso.Lo único que no hizo fue volver a calcular una cantidad de columnas donde tengo números aleatorios en fórmulas antes de realizar la regresión por pasos.El comando <
Mi intento fallido es la línea 19 del guión.Gracias.
Clear Globals();
Clear Log();
Names Default To Here( 1 );
//Define path in and out
Path_in = Pick File( "Select file" );
If( Directory Exists( "$Desktop\Fit_Stepwise" ),
,
Create Directory( "$Desktop\Fit_Stepwise" )
);
Path_out = "$Desktop\Fit_Stepwise\";
//Run Fit model and stepwise after open datatable
dt = Open( Path_in );
For( i = 1, i <= 1000, i++,
dt << Rerun Formulas;
ow = dt << Fit Model(
Y( :Y ),
Effects(
:Column 2 001,
:Column 2 002,
:Column 2 003,
:Column 2 004,
:Column 2 005,
:Column 2 006,
:Column 2 007,
:Column 2 008,
:Column 2 009,
:Column 2 010
),
Personality( "Stepwise" ),
Run,
SendToReport( Dispatch( {}, "Step History", OutlineBox, {Close( 1 )} ) )
);
dt_result = Report( ow )[Outline Box( "Stepwise Fit for Y" )][Outline Box( "Current Estimates" )][Table Box( 1 )] << Make Into Data Table;
dt_result << save( Path_out || Char( i ) || ".csv", "csv" );
ow << close window;
dt_result << Close Window;
);
dt << Close Window;
dt_result = Multiple File Import(
<<SET folder="">F\!"" ) > 0.05 ) ) << Delete Rows;
dt_result << Distribution( Stack( 1 ), Nominal Distribution( Column( :Parameter ), Horizontal Layout( 1 ), Vertical( 0 ) ) );</SET>Modelado Estadístico AvanzadoRe: Pregunta de script para volver a ejecutar fórmulasGracias, esto es perfecto.Y gracias por ser paciente conmigo.Además, la ayuda en Wait() está en la ayuda, pero no en el índice de secuencias de comandos, como usted dice.
Re: Pregunta de script para volver a ejecutar fórmulasNo estoy seguro de por qué el script original que tenía no actualizaría los valores en las columnas de fórmula. Tal vez podría probar esto aún más al reducir el conteo de bucles (usar, por ejemplo, como valor máximo) y agregar Wait (1); por ejemplo, después de <
Aquí hay una secuencia de comandos ligeramente modificada que usa la tabla de subconjuntos que proporcionó anteriormente. Como no desea ser más competente con las secuencias de comandos, no profundizaré mucho en la explicación de cómo funcionan las funciones aquí, pero vea la explicación a continuación y los comentarios en la secuencia de comandos, también puedo explicar más si es necesario. El script proporcionado aquí debería:
- Recorra todas las columnas que se encuentran en dt y habilite la evaluación en ellas para permitir el recálculo en las columnas de fórmula
- Ejecute Fit Model 100 veces y vuelva a calcular los valores en las columnas de fórmula cada vez con <
- También usará Show() para imprimir Col Median() para una columna para registrar. Esto ralentizará la ejecución del script, pero debería mostrar que los valores en la columna cambian
- Cree una tabla de resultados con los resultados y cierre todas las tablas y ventanas innecesarias
- Después de que finalice la ejecución del ciclo: oculte y excluya filas con ProbF> 0.05 y luego cree una distribución
Names Default To Here(1);
dt = Current Data Table();
//dt = Open("Subset of Test data.jmp");
dt << Show Window(0); // should provide slight speed improvement
For Each({col_name}, dt << get column names(String), Column(dt, col_name) << suppress eval(False));
get_stepwise = Expr(
dt << Rerun Formulas;
Show(Col Mean(As Column(dt, :Column 2 001))); //will slow down script execution, but shows that values in Column 2 001 should change
Show(Col Mean(As Column(dt, :Column 2 010)));
fm = dt << Fit Model(
Y(:Y),
Effects(
:Column 2 001, :Column 2 002, :Column 2 003, :Column 2 004, :Column 2 005, :Column 2 006, :Column 2 007, :Column 2 008, :Column 2 009,
:Column 2 010
),
Personality("Stepwise"),
Run,
SendToReport(Dispatch({}, "Step History", OutlineBox, {Close(1)})),
Invisible // should provide slight speed improvement
);
dt_result = Report(fm)[Outline Box("Stepwise Fit for Y")][Outline Box("Current Estimates")][Table Box(1)] << Make Into Data Table(invisible);
dt_result << New Column("Loop", Numeric, Continuous, <<SET each="" value="">F\!""n > 0.05) << Hide And Exclude(1) << Clear Select;
// plot distribution
dt_collector << Distribution(Stack(1), Nominal Distribution(Column(:Parameter), Horizontal Layout(1), Vertical(0)));</SET>
Este script no parecía tener necesidad de Esperar (0) al menos en mi configuración (PC rápida, Windows 10 y JMP16.2). Para mí, parece que los valores de la fórmula se volvieron a evaluar
Resultados:

Índice de secuencias de comandos para Wait(), hacer clic en Ayuda del tema a veces proporciona más información (en el caso de Wait() lo hace)

Ayuda JMP - Espera(n) "Especificando Espera(0) permite un ciclo de procesamiento de mensajes".
Re: Pregunta de script para volver a ejecutar fórmulasLas fórmulas en mi tabla no se suprimen.¿Puede explicar un poco más sobre los comandos que sugiere que agregue?Soy casi completamente ignorante acerca de las secuencias de comandos (y realmente no quiero gastar mi tiempo en volverme más competente, no gastes tu energía diciéndome por qué debería hacerlo, soy un caso especial en muchos sentidos).¿Pongo un nombre de columna dentro de { } o pongo las 6 columnas (separadas por , o ;?)?¿Necesito reemplazar String con algo?Y, ¿enumero Columna por separado para el comando suprimir eval (falso)?
Con respecto a wait(), lo intenté sin éxito, pero no puedo encontrar ninguna documentación en el índice de secuencias de comandos en el comando wait().
Re: Pregunta de script para volver a ejecutar fórmulasSolo para asegurarse de que la columna se evaluará, agregue esto antes del bucle For (si está utilizando una versión anterior a JMP16, cambie For Each a For):
For Each({col_name}, dt << get column names(String),
Column(dt, col_name) << suppress eval(False)
);
En la tabla que abrí, las columnas de fórmula tenían la evaluación suprimida, pero podría ser solo una característica de seguridad con los archivos descargados.
Si tiene que agregar wait(0), puede ir un poco en exceso al principio y casi agregarlo después de cada fila dentro del bucle for. Por lo general, no es necesario en JMP, pero hay algunos casos en los que es necesario.
Re: Pregunta de script para volver a ejecutar fórmulasHe adjuntado el archivo.Parece que inserté Rerun Formulas en el lugar correcto, pero no funciona.¿Cómo y adónde va Wait?
Re: Pregunta de script para volver a ejecutar fórmulasLas fórmulas de repetición deberían funcionar, ¿quizás necesite agregar esperar (0) en alguna parte? Sin ver la tabla de datos, es un poco difícil probar dónde podría estar el problema (recuento de filas, recuento de columnas, fórmulas complicadas, semillas aleatorias que no cambian por algún motivo).
Con este simple ejemplo, los valores parecen actualizarse bien:
Names Default To Here(1);
dt = New Table("Untitled",
Add Rows(5),
New Column("Column1", Numeric, "Continuous", Format("Best", 12), Formula(Random Normal(1, 1))),
New Column("Column2", Numeric, "Continuous", Format("Best", 12), Formula(Random Normal(2, 1)))
);
For(i = 1, i <= 3, i++,
dt << Rerun Formulas;
Show(dt:Column1 << get as matrix);
Show(dt:Column2 << get as matrix);
fm = dt << Fit Model(
Y(:Column1),
Effects(:Column2),
Personality("Stepwise"),
Run,
SendToReport(Dispatch({}, "Step History", OutlineBox, {Close(1)}))
);
dt_result = Report(fm)[Outline Box("Stepwise Fit for Column1")][Outline Box("Current Estimates")][Table Box(1)] << Make Into Data Table;
fm << close window;
//dt_result << Close Window;
);