Rápidamente miré esto, tenga en cuenta que estoy usando JMP16 y For Each() en lugar de For().
Pregunta 1:
Creo que necesita obtener referencias separadas a los cuadros de esquema, una opción es usar XPath y luego recorrer la lista de listas. también
//creates a report and maximizes desirability
//doesn't work if there is anything in the by() field
pf_obs = fit << XPath("//OutlineBox[text()='Prediction Profiler']"); // list of lists so easiest to loop over them
For Each({pf_ob}, pf_obs,
pf = pf_ob << Get Scriptable Object;
pf << Maximize and Remember;
);
//create a data table with the parameters from the prediction profile
//in my other version (with the for loop a Where( :x = y[i]) in the model, I than had some code to concatenate tables together and change some formatting
dtout[1] = Report(fit[1])["Prediction Profiler"]["Remembered Settings"][Table Box(1)] << Make Combined Data Table

Pregunta 2:
Haría un refactor un poco más grande a esta parte del código para que sea más limpio, pero también puede hacer una "solución rápida" para esto. Use Insertar en para agregar límites de respuesta a la expresión de Profiler
jslExprProfiler = expr(
Profiler( 1,
Confidence Intervals( 1 ),
Desirability Functions( 1 ),
//sets desirability target of the crit response
_Y2_ << Response Limits(
{Lower( ytarg-1, 0.0183 ), Middle( ytarg, 1 ), Upper( ytarg+1, 0.0183 ),
Goal( "Match Target" ), Importance( 1 )}
)
);
);
For Each({mod}, ModList,
Insert Into(
jslExprProfiler, EvalExpr(
Expr(mod) << Response Limits({Lower(1, 1), Middle(2, 1), Upper(3, 1), Goal("None"), Importance(1)})
)
)
);
jslExprProfiler = Substitute(
Expr(fit << _prof_),
Expr(_prof_), Name Expr(jslExprProfiler)
);
jslExprProfiler = Substitute(
Name Expr(jslExprProfiler),
expr(_Y2_), nameexpr(yList[1])
);
Código completo:
Ver más... Hola,
Estoy trabajando en un script que permitirá a los usuarios
- Seleccionar columnas para encajar en un modelo
- Identifique la variable principal y especifique el valor del objetivo
- Identifique en qué columna dividir el modelo
- Permita que JMP cree el modelo, optimice la conveniencia de alcanzar el objetivo deseado y luego genere los resultados del modelo.
- Copie los resultados de una tabla de salida conveniente
Tengo secuencias de comandos funcionales que hacen lo que quiero sin permitir que el usuario ingrese o seleccione, pero hacer que la secuencia de comandos sea interactiva ha sido un desafío. Creo que estoy mayormente ahí, pero tengo algunas cosas específicas con las que estoy luchando
- Pregunta 1: en una versión anterior de este script, usé una ventana diferente para cada modelo usando un bucle for con una línea While( x == "y[i]"). Prefiero usar By( :x ) porque es más flexible y ofrece una ventana de salida. Sin embargo, el uso de By( :x ) rompe el script posterior para obtener un objeto programable del informe. ¿Es posible crear un informe diferente para cada subcuadro en la ventana del modelo? ¿O una mejor manera de codificar las líneas 173-181? Construyo esas líneas basándome en estos otros dos hilos: hilo 1 , hilo 2 .
- Pregunta 2: Necesito la opción para poder tener efectos de número variable que se modelen sin tener funciones deseables (más tarde, el script completo también tendrá efectos que se minimizan, pero este script de demostración simplificado se estaba volviendo demasiado complicado). En las líneas 122-126, puedo crear la expresión deseada en ModExpr, pero debido a que es una lista, no funcionó cuando intenté sustituirla directamente en el perfil. Mi solución es tener una cantidad de marcadores de posición mayor que la cantidad de variables que espero modelar y el código parece simplemente ignorar las partes sin sentido si tengo menos de 6 efectos modelados... pero esto parece muy tonto. ¿Hay alguna manera de corregir el código comentado en las líneas 130-134 de modo que la lista se combine en una sola expresión que funcione? Tampoco pude hacer que Concatenation funcionara bien, pero apuesto a que hay algo simple que me perdí.
Aquí hay un script de muestra que usa datos de muestra. El modelo encaja terriblemente, pero eso no es realmente importante para la demostración. Cuando se ejecuta, si borra la selección de "por", las cosas funcionarán bien y generarán resultados. Si queda algo en la sección "por", entonces la línea 174 se romperá.
¡Gracias por cualquier ayuda!
Names Default To Here( 1 );
//sample data for demo
dt = Open( "$SAMPLE_DATA/Football.jmp" );
xvar = {};
yvar = {};
byvar = {};
ytarg = 60;
dtout = {};
//let users select the columns to model
win = New Window( "Model Variable Selection",
<<MODAL></MODAL>