Cómo pasar una variable en la fórmula de perfilador personalizadoPodemos definir una fórmula personalizada en el perfilador personalizado y es bastante fácil, como muestra el siguiente ejemplo
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Tiretread.jmp" );
obj = Custom Profiler( Y( :Pred Formula ABRASION, :Pred Formula MODULUS ) );
obj << Objective Formula(
:Pred Formula ABRASION + .5 * :Pred Formula MODULUS
);
obj << Optimize;
Ahora, digamos que me gustaría cambiar el valor del coeficiente de 0,5 a otra configuración. Así que defino la siguiente fórmula:
coef=4;
myFormula=Parse(eval(EvalExpr(":Pred Formula ABRASION + "||Char(coef)||" * :Pred Formula MODULUS")));
el resultado en el registro está bien:
:Pred Fórmula ABRASIÓN + 4 * :Pred Fórmula MÓDULO
pero, si uso la misma oración en la declaración anterior, no logro tener el resultado esperado:
obj << Objective Formula(Parse(eval(EvalExpr(":Pred Formula ABRASION + "||Char(coef)||" * :Pred Formula MODULUS"))));

Probablemente cometí un error básico, pero tengo problemas con eso. y me gustaría adaptar este método a una situación más compleja (cambiar los coeficientes de deseabilidad en la expresión nativa)
Gracias por tus sugerencias
Re: Como pasar una variable en la formula de custom profilerflorencia,
En general, es preferible tratar la expresión como una expresión en lugar de una cadena de texto para evaluar. Esto funcionará:
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Tiretread.jmp" );
obj = Custom Profiler( Y( :Pred Formula ABRASION, :Pred Formula MODULUS ) );
cVal = 4;
Eval(Substitute(
Expr(
obj << Objective Formula(
:Pred Formula ABRASION + coefVal * :Pred Formula MODULUS
)
),
Expr(coefVal),cVal
));
obj << Optimize;
Don
Re: Como pasar una variable en la formula de custom profilerHola Don,
Muchas gracias por tu respuesta.
En este ejemplo básico, funciona bastante bien, ya que mi fórmula es simple.
En la vida real, tengo una situación más compleja. Quiero poder establecer el contenido de las deseabilidades que capturaré de una tabla de datos.
y1_target_value=175;
y1_min=150;
y1_max=200;
y2_target=500;
y2_min=450;
y2_max=550;
Eval(Substitute(
Expr(
obj << Objective Formula(
Exp((0.25 * Log(Desirability([100, y1_target, 200], [0.0183, 1, 0.0183], Pred Formula Abrasion)) + 0.25 * Log(Desirability([400, 475, 550], [0.0183, 1, 0.0183], Pred Formula Elongation))) / 0.5)
)
),
Expr(y1_target),y1_target_value
));
obj << Optimize;
si aplico el sustituto en este caso, tengo un error.

y si.... ¡Quiero cambiar el contenido de las 6 variables (objetivo y especificación para las dos Y)!
Gracias por tus sugerencias,
florencia
Re: Como pasar una variable en la formula de custom profilerflorencia,
El problema tiene que ver con la forma en que funciona el operador de matriz (los corchetes de apertura y cierre). El enfoque más simple que se me ocurre es crear las matrices de antemano y tratarlas como un todo, en lugar de tratar de construirlas en Sustituto . Esto debería funcionar
y1_target_value=175;
y1_min=150;
y1_max=200;
y2_target=500;
y2_min=450;
y2_max=550;
y1Mat = Matrix({y1_min,y1_target_value,y1_max});
y2Mat = Matrix({y2_min,y2_target,y1_max});
Eval(Substitute(
Expr(
obj << Objective Formula(
Exp((0.25 * Log(Desirability(y1Mat, [0.0183, 1, 0.0183], Pred Formula Abrasion)) + 0.25 * Log(Desirability(y2Mat, [0.0183, 1, 0.0183], Pred Formula Elongation))) / 0.5)
)
),
Expr(y1Mat),y1Mat,
Expr(y2Mat),y2Mat,
));
obj << Optimize;
Re: Como pasar una variable en la formula de custom profilerSiento que me estoy perdiendo algo aquí. ¿Por qué usar Expr/Eval, etc. en lugar de solo poner la fórmula?
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Tiretread.jmp" );
y1_target_value = 175;
y1_min = 150;
y1_max = 200;
y2_target = 500;
y2_min = 450;
y2_max = 550;
y1Mat = Matrix( {y1_min, y1_target_value, y1_max} );
y2Mat = Matrix( {y2_min, y2_target, y1_max} );
obj = Custom Profiler( Y( :Pred Formula ABRASION, :Pred Formula MODULUS ) );
obj << Objective Formula(
Exp(
(0.25 * Log( Desirability( y1Mat, [0.0183, 1, 0.0183], :Pred Formula Abrasion ) ) + 0.25 * Log(
Desirability( y2Mat, [0.0183, 1, 0.0183], :Pred Formula Elongation )
)) / 0.5
)
);
obj << Optimize;
Re: Como pasar una variable en la formula de custom profilerSi miras la expresión en el Fórmula esquema, los valores para y1Mat y y2Mat aparecen sin evaluar, es decir, como variables:
Exp((0.25 * Log(Desirability(<FONT color="#FF0000">y1Mat</FONT>, [0.0183, 1, 0.0183], :Pred Formula Abrasion)) + 0.25 * Log(Desirability(<FONT color="#FF0000">y2Mat</FONT>, [0.0183, 1, 0.0183], :Pred Formula Elongation))) / 0.5)
Por cierto, parece que tuve algunos errores en el código anterior. Aquí está la versión corregida
y1_target_value=175;
y1_min=150;
y1_max=200;
y2_target=500;
y2_min=450;
y2_max=550;
y1Mat = Matrix({y1_min,y1_target_value,y1_max});
y2Mat = Matrix({y2_min,y2_target,y2_max});
Eval(Substitute(
Expr(
obj << Objective Formula(
Exp((0.25 * Log(Desirability(y1Mat, [0.0183, 1, 0.0183], :Pred Formula Abrasion)) + 0.25 * Log(Desirability(y2Mat, [0.0183, 1, 0.0183], :Pred Formula Elongation))) / 0.5)
)
),
Expr(y1Mat),y1Mat,
Expr(y2Mat),y2Mat,
));
obj << Optimize;
Dicho todo esto, no estoy seguro de que esta sea la forma de implementar diferentes límites para las funciones de deseabilidad. La fórmula parece correcta, pero falta el valor objetivo.
Re: Como pasar una variable en la formula de custom profiler¡Gracias por los consejos! funciona
En cuanto a la fórmula, es la que define JMP cuando lanzo el perfilador personalizado con la fórmula de predicción generada por la plataforma Fit Model.
El valor predeterminado es el siguiente:

con este tipo de fórmula de predicción:

Verificaré si tengo los mismos resultados que en la plataforma nativa Model Fitting.
¡Gracias de nuevo!
Re: Como pasar una variable en la formula de custom profilerGracias Florencia,
Encontré el problema. solía ABRASIÓN y MÓDULO en Perfilador personalizado pero usado ABRASIÓN y ALARGAMIENTO en el Fórmula objetiva .
Aquí está el (con suerte) código libre de errores:
obj = Custom Profiler( Y( :Pred Formula ABRASION, :Pred Formula MODULUS ) );
y1_target_value=175;
y1_min=150;
y1_max=200;
y2_target=500;
y2_min=450;
y2_max=550;
y1Mat = Matrix({y1_min,y1_target_value,y1_max});
y2Mat = Matrix({y2_min,y2_target,y2_max});
Eval(Substitute(
Expr(
obj << Objective Formula(
Exp((0.25 * Log(Desirability(y1Mat, [0.0183, 1, 0.0183], :Pred Formula Abrasion)) + 0.25 * Log(Desirability(y2Mat, [0.0183, 1, 0.0183], :Pred Formula Modulus))) / 0.5)
)
),
Expr(y1Mat),y1Mat,
Expr(y2Mat),y2Mat,
));
obj << Optimize;