¿Cómo usar JSL para encontrar el rango de la variable X para cumplir con el límite de especificación arreglando otras variables en Prediction Profiler?Hola expertos en JSL:
Tengo un modelo DoE OLS o REML con un generador de perfiles de predicción como el que se muestra a continuación. ¿Cómo puedo encontrar todos los rangos de la variable X para cumplir con LSL y USL automáticamente con JSL corrigiendo otras variables? Por ejemplo, X1 debe estar por debajo de 34,6 para cumplir con la especificación. Muchas gracias por su ayuda.

Exploración y visualización de datosRe: ¿Cómo usar JSL para encontrar el rango de variables X para cumplir con el límite de especificaciones al corregir otras variables en Prediction Profiler?JMP 17 presentó la perfilador de espacio de diseño para determinar rangos de operación en este tipo de situación. Una buena razón para actualizar a 17 si aún no lo ha hecho.
Si realmente necesita la solución JSL particular que describió, con suerte alguien con mejores habilidades JSL que yo puede intervenir.
Re: ¿Cómo usar JSL para encontrar el rango de variables X para cumplir con el límite de especificaciones al corregir otras variables en Prediction Profiler?Gracias @Ross_Metusalem , estamos usando JMP 16 actualmente. Con suerte, podemos actualizar a 17 pronto.
Re: ¿Cómo usar JSL para encontrar el rango de variables X para cumplir con el límite de especificaciones al corregir otras variables en Prediction Profiler?Mientras tanto, puede utilizar el Función de simulación en Prediction Profiler para este propósito.
Re: ¿Cómo usar JSL para encontrar el rango de variables X para cumplir con el límite de especificaciones al corregir otras variables en Prediction Profiler?@Mark_Bailey ¿Pueden darme algunos consejos sobre cómo obtener el rango usando Simulación en el Prediction Profiler? Muchas gracias.
Re: ¿Cómo usar JSL para encontrar el rango de variables X para cumplir con el límite de especificaciones al corregir otras variables en Prediction Profiler?¿Ha estudiado la sección de Ayuda que mencioné?
Primero debe especificar los límites de respuesta para determinar la función de deseabilidad para evaluar la idoneidad del rango de factores.
Abra el simulador en Prediction Profiler. Todos los niveles de los factores se fijan al principio. Cambie X1 para que varíe aleatoriamente como espera bajo el control del proceso. Especifique también la variación aleatoria de la respuesta. La simulación mostrará un histograma para darle una idea de la idoneidad de la transmisión del error de X1 a la respuesta. La tabla de simulación proporcionará información detallada.
Re: ¿Cómo usar JSL para encontrar el rango de variables X para cumplir con el límite de especificaciones al corregir otras variables en Prediction Profiler?Hola @Mark_Bailey , Seguí el enlace que compartió, puedo encontrar la tasa de defectos por debajo del 5% para cada variable X manualmente. Debido a que tengo tantos modelos y variables, quiero encontrar una manera de automatizar este proceso sin hacerlo uno por uno. Tomará mucho tiempo. ¿Es posible hacerlo en JSL?
Re: ¿Cómo usar JSL para encontrar el rango de variables X para cumplir con el límite de especificaciones al corregir otras variables en Prediction Profiler?Sí, puede programar el generador de perfiles y el simulador que proporciona. Consulte Ayuda > Índice de secuencias de comandos > Objetos > Analizador y simulador.

Re: ¿Cómo usar JSL para encontrar el rango de variables X para cumplir con el límite de especificaciones al corregir otras variables en Prediction Profiler?@Mark_Bailey Terminé la simulación de parámetros y ya recopilé todos los resultados de la simulación. ¡¡¡Super guay!!!Muchas gracias por tu ayuda.
El único desafío para mí es obtener el valor del término del script modelo. Lo que utilicé fue buscar "{Perfilador(" y luego "Valor del término" para obtener todos los términos en una lista y luego simular. El término valor tiene caracteres numéricos, algunos con "xxxx"n, otros no, es bastante difícil crear código para todos los casos diferentes. ¿Tiene una manera fácil de obtener el valor del término del modelo DoE?
Re: ¿Cómo usar JSL para encontrar el rango de variables X para cumplir con el límite de especificaciones al corregir otras variables en Prediction Profiler?Por " obtenga el valor del término de la secuencia de comandos del modelo", ¿se refiere a la estimación del parámetro en la secuencia de comandos de la tabla del modelo? ¿Guardó un script de tabla para el modelo?
Las cadenas de caracteres se pueden utilizar para los nombres. Algunos caracteres no están permitidos en los nombres. El uso de nombres inadecuados requiere una solución alternativa.
Re: ¿Cómo usar JSL para encontrar el rango de variables X para cumplir con el límite de especificaciones al corregir otras variables en Prediction Profiler?@Mark_Bailey A continuación se muestra uno de mis ejemplos. Necesito un código genérico que necesita leer los scripts del modelo de grupo Fit y luego obtener el valor del término en una lista de factores. Una vez que tenga la lista, compararé con el nombre de la columna en la tabla de datos para determinar si son números o caracteres para poder hacer mi código de simulación.La última parte es mi código, pero es demasiado complicado y no funcionará si hay varios valores de término en el generador de perfiles. Por lo tanto, es mejor dejar solo Profiler activado.Me pregunto si tienes una forma más fácil de terminar la misma tarea. Muchas gracias por tu ayuda.
factors = {"ELONG", "HARDNESS(+/-0.2)", "ABRASION For example (%)", "MODULUS"}Este es el script de un modelo de ejemplo:
Fit Group(
Fit Model(
Y( :"SILICA (%)"n ),
Effects( :ELONG, :"HARDNESS(+/-0.2)"n ),
Personality( "Standard Least Squares" ),
Emphasis( "Minimal Report" ),
Run(
Profiler(
1,
Confidence Intervals( 1 ),
Term Value(
ELONG( 417.5, Lock( 0 ), Show( 1 ) ),
"HARDNESS(+/-0.2)"n( 69.775, Lock( 0 ), Show( 1 ) )
)
),
:"SILICA (%)"n << {Summary of Fit( 1 ), Analysis of Variance( 1 ),
Parameter Estimates( 1 ), Effect Tests( 0 ), Effect Details( 0 ),
Lack of Fit( 0 ), Scaled Estimates( 0 ), Plot Actual by Predicted( 1 ),
Plot Regression( 0 ), Plot Residual by Predicted( 0 ),
Plot Studentized Residuals( 1 ), Plot Effect Leverage( 0 ),
Plot Residual by Normal Quantiles( 1 ), Box Cox Y Transformation( 0 ),
Press( 1 )}
)
),
Fit Model(
Y( :SILANE Value ),
Effects(
:"ABRASION For example (%)"n, :MODULUS, :ELONG, :"HARDNESS(+/-0.2)"n,
:MODULUS * :ELONG
),
Personality( "Standard Least Squares" ),
Emphasis( "Minimal Report" ),
Run(
Profiler(
1,
Confidence Intervals( 1 ),
Term Value(
"ABRASION For example (%)"n( 133.1, Lock( 0 ), Show( 1 ) ),
MODULUS( 1255, Lock( 0 ), Show( 1 ) ),
ELONG( 417.5, Lock( 0 ), Show( 1 ) ),
"HARDNESS(+/-0.2)"n( 69.775, Lock( 0 ), Show( 1 ) )
)
),
:SILANE Value << {Summary of Fit( 1 ), Analysis of Variance( 1 ),
Parameter Estimates( 1 ), Effect Tests( 0 ), Effect Details( 0 ),
Lack of Fit( 0 ), Scaled Estimates( 0 ), Plot Actual by Predicted( 1 ),
Plot Regression( 0 ), Plot Residual by Predicted( 0 ),
Plot Studentized Residuals( 1 ), Plot Effect Leverage( 0 ),
Plot Residual by Normal Quantiles( 1 ), Box Cox Y Transformation( 0 ),
Press( 1 )}
)
),
Fit Model(
Y( :SULFUR ),
Effects( :ELONG ),
Personality( "Standard Least Squares" ),
Emphasis( "Minimal Report" ),
Run(
Profiler(
1,
Confidence Intervals( 1 ),
Term Value( ELONG( 417.5, Lock( 0 ), Show( 1 ) ) )
),
:SULFUR << {Summary of Fit( 1 ), Analysis of Variance( 1 ),
Parameter Estimates( 1 ), Effect Tests( 0 ), Effect Details( 0 ),
Lack of Fit( 0 ), Scaled Estimates( 0 ), Plot Actual by Predicted( 1 ),
Plot Regression( 0 ), Plot Residual by Predicted( 0 ),
Plot Studentized Residuals( 1 ), Plot Effect Leverage( 0 ),
Plot Residual by Normal Quantiles( 1 ), Box Cox Y Transformation( 0 ),
Press( 1 )}
)
),
<<{Profiler(
1,
Confidence Intervals( 1 ),
Term Value(
<FONT color="#0000FF"> ELONG( 417.5, Lock( 0 ), Show( 1 ) ),
"HARDNESS(+/-0.2)"n( 69.775, Lock( 0 ), Show( 1 ) ),
"ABRASION For example (%)"n( 133.1, Lock( 0 ), Show( 1 ) ),
MODULUS( 1255, Lock( 0 ), Show( 1 ) )</FONT>
)
)}
);Este es mi código para hacer una lista de factores:
Names Default To Here( 1 );
dt = Current Data Table();
curep = Current Report();
dtname = dt << Get Name;
//Check how many prediction profiles, if >1 it's fit group, =1 it's fit model
pred_objs = curep << XPath( "//OutlineBox[ contains( text(), 'Prediction Profile' ) ]" );
num_objs = N Items( pred_objs );
If( num_objs < 1,
Throw( "No prediction profile is found!" )
);
If( num_objs == 1,
textind = "Profiler(",
textind = "{Profiler("
);
//Read the Model Term list
modelobj = curep[Outline Box( 1 )] << get scriptable object;
modeltext = Char( modelobj << get script );
//Show( modeltext );
posA = Contains( modeltext, textind );
termstext = Right( modeltext, Length( modeltext ) - posA + 1 );
/*Show( termstext );*/
posB = Contains( termstext, "Term Value" );
posC = Contains( termstext, "Show(1))", -1 );
termvalue = Left( termstext, posC + 7 ) || ","; //Make sure all terms end with )),
termvalue = Right( termvalue, Length( termvalue ) - posB - 10 );
/*Show( termvalue );
Show( posB );
Show( posC );
Show( posD );*/
//Check how many factors or main effects in the final model
words = Words( termvalue, "," );
termnum = 0;
For( i = 1, i <= N Items( words ), i++,
If( Contains( words[i], "Show" ),
termnum = termnum + 1
)
);
//Get the term with default value
term list = {};
For( k = 1, k <= termnum, k++,
//show(firstpos);
pos1 = Contains( termvalue, "))," ) + 3;
term1 = Left( termvalue, pos1 );
//show(term1);
termvalue = Right( termvalue, Length( termvalue ) - pos1 );
//show(termvalue);
Insert Into( term list, term1 );
);
Show( term list );
//get term name without default value
factors = {};
For( k = 1, k <= N Items( term list ), k++,
termK = term list[k];
firstchar = Left( termK, 1 );
If( firstchar == "\!"",
pos2 = Contains( termK, "\!"", -1 );
term2 = Left( termK, pos2 + 1 );
,
pos2 = Contains( termK, "(" ); //Categorical terms cannot have "()" in the column name
term2 = Left( termK, pos2 - 1 );
);
Insert Into( factors, char(parse(term2)) );
);
Show( factors );
Re: ¿Cómo usar JSL para encontrar el rango de variables X para cumplir con el límite de especificaciones al corregir otras variables en Prediction Profiler?Creo que hay un enfoque más elegante y robusto. Vea el final de este ejemplo para el enfoque en el que estoy pensando.
Names Default to Here( 1 );
// JMP Pro 16.2
// start with example of a model script
model = Expr(
Fit Group(
Fit Model(
Y( :"SILICA (%)"n ),
Effects( :ELONG, :"HARDNESS(+/-0.2)"n ),
Personality( "Standard Least Squares" ),
Emphasis( "Minimal Report" ),
Run(
Profiler(
1,
Confidence Intervals( 1 ),
Term Value(
ELONG( 417.5, Lock( 0 ), Show( 1 ) ),
"HARDNESS(+/-0.2)"n( 69.775, Lock( 0 ), Show( 1 ) )
)
),
:"SILICA (%)"n << {Summary of Fit( 1 ), Analysis of Variance( 1 ),
Parameter Estimates( 1 ), Effect Tests( 0 ), Effect Details( 0 ),
Lack of Fit( 0 ), Scaled Estimates( 0 ), Plot Actual by Predicted( 1 ),
Plot Regression( 0 ), Plot Residual by Predicted( 0 ),
Plot Studentized Residuals( 1 ), Plot Effect Leverage( 0 ),
Plot Residual by Normal Quantiles( 1 ), Box Cox Y Transformation( 0 ),
Press( 1 )}
)
),
Fit Model(
Y( :SILANE Value ),
Effects(
:"ABRASION For example (%)"n, :MODULUS, :ELONG, :"HARDNESS(+/-0.2)"n,
:MODULUS * :ELONG
),
Personality( "Standard Least Squares" ),
Emphasis( "Minimal Report" ),
Run(
Profiler(
1,
Confidence Intervals( 1 ),
Term Value(
"ABRASION For example (%)"n( 133.1, Lock( 0 ), Show( 1 ) ),
MODULUS( 1255, Lock( 0 ), Show( 1 ) ),
ELONG( 417.5, Lock( 0 ), Show( 1 ) ),
"HARDNESS(+/-0.2)"n( 69.775, Lock( 0 ), Show( 1 ) )
)
),
:SILANE Value << {Summary of Fit( 1 ), Analysis of Variance( 1 ),
Parameter Estimates( 1 ), Effect Tests( 0 ), Effect Details( 0 ),
Lack of Fit( 0 ), Scaled Estimates( 0 ), Plot Actual by Predicted( 1 ),
Plot Regression( 0 ), Plot Residual by Predicted( 0 ),
Plot Studentized Residuals( 1 ), Plot Effect Leverage( 0 ),
Plot Residual by Normal Quantiles( 1 ), Box Cox Y Transformation( 0 ),
Press( 1 )}
)
),
Fit Model(
Y( :SULFUR ),
Effects( :ELONG ),
Personality( "Standard Least Squares" ),
Emphasis( "Minimal Report" ),
Run(
Profiler(
1,
Confidence Intervals( 1 ),
Term Value( ELONG( 417.5, Lock( 0 ), Show( 1 ) ) )
),
:SULFUR << {Summary of Fit( 1 ), Analysis of Variance( 1 ),
Parameter Estimates( 1 ), Effect Tests( 0 ), Effect Details( 0 ),
Lack of Fit( 0 ), Scaled Estimates( 0 ), Plot Actual by Predicted( 1 ),
Plot Regression( 0 ), Plot Residual by Predicted( 0 ),
Plot Studentized Residuals( 1 ), Plot Effect Leverage( 0 ),
Plot Residual by Normal Quantiles( 1 ), Box Cox Y Transformation( 0 ),
Press( 1 )}
)
),
<<{Profiler(
1,
Confidence Intervals( 1 ),
Term Value(
ELONG( 417.5, Lock( 0 ), Show( 1 ) ),
"HARDNESS(+/-0.2)"n( 69.775, Lock( 0 ), Show( 1 ) ),
"ABRASION For example (%)"n( 133.1, Lock( 0 ), Show( 1 ) ),
MODULUS( 1255, Lock( 0 ), Show( 1 ) )
)
)}
);
);
// last argument is in-line message send for Profiler
last = N Arg( model );
profilerExpr = Arg( model, last );
// unwrap Send() and its list argument
profilerExpr = Arg( profilerExpr, 1 )[1];
// find term values
termVals = Associative Array();
termExpr = Arg( profilerExpr, 3 );
nArgs = N Arg( termExpr );
For( i = 1, i <= nArgs, i++,
Insert Into( termVals,
Char( Head( Arg( termExpr, i ) ) ),
Arg( Arg( termExpr, i ), 1 )
)
);
// use resulting dictionary for term values
Show( termVals );Re: ¿Cómo usar JSL para encontrar el rango de variables X para cumplir con el límite de especificaciones al corregir otras variables en Prediction Profiler?Lo que muestra al final como su valor deseado de la variable calle es no una cuerda.
¿Cómo usarás calle en tu guion? ¿Será un argumento para una función?
Re: ¿Cómo usar JSL para encontrar el rango de variables X para cumplir con el límite de especificaciones al corregir otras variables en Prediction Profiler?@Mark_Bailey str es solo un nombre de variable, durante mi código a continuación, en realidad usé random_sim y answers_sim, al cambiar estas dos variables en mi ciclo for, puedo simular todos los factores una vez. El código que usé antes para extraer Y y Term Value tiene "\! en la cadena, pero su forma de extraer el argumento no tiene "\!, que es la única diferencia.
simu model script = Parse(
Eval Insert(
"\[
simobj << Simulator(
1,
Factors( ^random_sim^),
Responses( ^responses_sim^ ),
Resimulate
);
]\"
)
);
Show( simu model script );
Eval( simu model script );Re: ¿Cómo usar JSL para encontrar el rango de variables X para cumplir con el límite de especificaciones al corregir otras variables en Prediction Profiler?@Mark_Bailey Tu solución es genial y mucho más fácil que la mía. Muchas gracias por tu ayuda.
Pero tengo otro problema con este método. ¿Me puede ayudar?
factors = {"Kilometer (kg)"n, "Temperature (ºC)"n};
responses_sim = "";
values = {1.23,2.34};
for (i=1, i<=N Items(factors), i++,
responses_sim = responses_sim || factors[i] || "<< Add Random Noise(" || char(values[i]) || "),"
);
show(responses_sim);
responses_sim = "Kilometer (kg)<< Add Random Noise(1.23),Temperature (ºC)<< Add Random Noise(2.34),";
<BR /><FONT face="arial black,avant garde" size="5"><STRONG>I want to get this result below, how to do it?</STRONG></FONT>
responses_sim = "Kilometer (kg)"n << Add Random Noise(1.23), "Temperature (ºC)"n << Add Random Noise(2.34),"