¿Cómo puedo hacer que la variable de la lista funcione para la estimación de cuantiles/probabilidades en "Fit Life by X"?Hola a todos,
Me gustaría hacer un script para la estimación de confiabilidad. Una de mis tareas es evaluar el cuantil/probabilidad estimado.
En estas expresiones (consulte el código a continuación), si enumero todas las categorías explícitamente usando la lista, como {0, 1, 2, 3}, la expresión funciona bien. Sin embargo, si uso la variable para la lista, luego uso la variable en lugar de escribir explícitamente la lista en el código, la expresión no funciona.
Aquí hay un ejemplo.
El siguiente código funciona bien:
Lognormal Estimate Probability( Profile, {1000}, {0 ,1, 2, 3} )
El siguiente código no funciona:
list_Category_num = {0 ,1, 2, 3}
Lognormal Estimate Probability( Profile, {1000}, list_Category_num )
Intenté buscar en este foro y hasta ahora, intenté usar comandos como "eval()", "eval list()", "eval expr()", pero el problema persiste.
A continuación se muestra el cuerpo completo del código:
Fit Life by X(
// Set distribution and parameters
Distribution( Lognormal ),
Nested Model Tests( Location and Scale ),
Y( :ResponseVariable ),
X( :Category ),
Censor( :Censor ),
Censor Code( 1 ),
// Fit Lognormal and set confidence interval
<<FIT lognormal=""></FIT>
Muchas gracias por su ayuda.
Modelado Estadístico AvanzadoAutomatización y secuencias de comandosExploración y visualización de datosDiseño de experimentosAnálisis de fiabilidadventanasRe: ¿Cómo puedo hacer que la variable de la lista funcione para la estimación de cuantiles/probabilidades en "Fit Life by X"?Gracias por informar el problema al soporte técnico, @Bhume_Chant
Y me perdí "perfil". Tu observación es correcta. En JMP 16, se necesita "perfil". Y eso es elegir el tipo de "probabilidad CI". Agregue "perfil" en su script.

A partir de JMP 17, ya no se requiere "perfil". Se informan los IC de Wald y Lifelihood.
Re: ¿Cómo puedo hacer que la variable de la lista funcione para la estimación de cuantiles/probabilidades en "Fit Life by X"?¡Muchas gracias Peng!
Primero, acabo de enviar un correo electrónico al equipo de soporte de JMP como sugirió. A este caso se le asignó el número de caso como: TS-00030985.
En segundo lugar, estoy muy agradecido de que también explique en detalle cómo envolver el objeto de la plataforma y envolver el mensaje. Recordaré esta práctica importante cuando necesite escribir JSL en el futuro.
Por cierto, con respecto al código que mostraste, ambos funcionan, pero tengo que agregar la palabra "perfil", delante de {1000} como este:
Este código funciona con la versión de JMP que estoy usando:
Lognormal Estimate Probability(profile, {1000}, vvv )
Este código no genera errores, pero no pasa nada con la versión de JMP que estoy usando:
Lognormal Estimate Probability({1000}, vvv )
No estoy seguro de si la razón por la que necesito agregar "perfil" está relacionada con la versión de JMP que estoy usando o no. Actualmente estoy usando una versión anterior de JMP (versión 16.2).
Re: ¿Cómo puedo hacer que la variable de la lista funcione para la estimación de cuantiles/probabilidades en "Fit Life by X"?Gracias por traer esto a mi atención, @Mark_Bailey !
@Bhume_Chant primero por favor contacte support@jmp.com para reportar este problema. El programa actual espera una lista de números, ya sea una lista de números literales o una lista de variables, pero no espera una variable, que es una lista. Esto debería arreglarse. Póngase en contacto con el soporte técnico. Lo apreciamos.
Para abordar su problema actual, aquí hay una solución alternativa, en línea con lo que Mark ha sugerido. Pero ofrezco un poco más de información para que la técnica similar pueda ser útil en otros lugares donde el comportamiento "eval" no es deseable. Aquí están los dos fragmentos de código que funcionan.
Aquí está el primero
vvv = {0,1,2,3};
obj = Fit Life by X(
Distribution( Lognormal ),
Nested Model Tests( Location and Scale ),
Y( :ResponseVariable ),
X( :Category ),
Censor( :Censor ),
Censor Code( 1 ),
);
eval(
substitute(
expr(
obj << set scriptables(
{
Lognormal Estimate Probability( {1000}, vvv )
}
)
),
expr(vvv), vvv
)
);
Aquí está el segundo,
vvv = {0,1,2,3};
eval(
substitute(
expr(
Fit Life by X(
Distribution( Lognormal ),
Nested Model Tests( Location and Scale ),
Y( :ResponseVariable ),
X( :Category ),
Censor( :Censor ),
Censor Code( 1 ),
<< set scriptables(
{
Lognormal Estimate Probability( {1000}, vvv )
}
)
)
),
expr(vvv),vvv
)
);
Compárelos con su secuencia de comandos, la diferencia es qué expresión está envuelta. Los dos recortes anteriores se envuelven fuera del objeto de la plataforma. Su secuencia de comandos envuelve una expresión que es un mensaje.
Ahora explico por qué envolver un mensaje no funciona. Cuando un mensaje se envuelve en el lado del truco de eval-substitute, eso todavía está a merced de la implementación de la plataforma para reconocer lo que significa este eval-substitute. En este caso, la plataforma no espera que sea una expresión. Y sospecho que eso es cierto para la mayoría de las plataformas.
Entonces, según lo que aprendí de este caso, mi sugerencia es que use el truco eval-substitute por encima del nivel del objeto de la plataforma.
Re: ¿Cómo puedo hacer que la variable de la lista funcione para la estimación de cuantiles/probabilidades en "Fit Life by X"?¡Ahora funciona!
¡Muchas gracias!
Re: ¿Cómo puedo hacer que la variable de la lista funcione para la estimación de cuantiles/probabilidades en "Fit Life by X"?Aquí hay otra forma del ejemplo en el índice de secuencias de comandos:
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Reliability/Devalt.jmp" );
obj = dt << Fit Life by X(
Y( :Hours ),
X( :Temp ),
Distribution( Lognormal ),
Censor( :Censor ),
Relationship( Arrhenius Celsius ),
Freq( :Weight )
);
p = obj << Probability( Lognormal, 30000, 10 );
Show( p );
Re: ¿Cómo puedo hacer que la variable de la lista funcione para la estimación de cuantiles/probabilidades en "Fit Life by X"?Debes moverte enviando el mensaje después de lanzar la plataforma. Algo como esto:
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Reliability/Devalt.jmp" );
obj = dt << Fit Life by X(
Y( :Hours ),
X( :Temp ),
Distribution( Lognormal ),
Censor( :Censor ),
Relationship( Arrhenius Celsius ),
Freq( :Weight )
);
val = {0,1,2,3};
Eval(
Substitute(
Expr(
obj << Set Scriptables( {Lognormal Estimate Probability( Profile, {1000}, vvv ) } );
),
Expr( vvv ), val
)
);Re: ¿Cómo puedo hacer que la variable de la lista funcione para la estimación de cuantiles/probabilidades en "Fit Life by X"?Hola Mark, muchas gracias por tu ayuda, pero ¿podrías ayudarme un poco más con este tema?
Intenté incrustar el script anterior, no hay errores pero tampoco se muestran resultados. No estoy seguro de dónde lo hice mal.
Aquí está el script que funciona según lo previsto:
Fit Life by X(
Distribution( Lognormal ),
Nested Model Tests( Location and Scale ),
Y( :ResponseVariable ),
X( :Category ),
Censor( :Censor ),
Censor Code( 1 ),
<< set scriptables(
{
Lognormal Estimate Probability( Profile, {1000}, {0,1,2,3} )
}
)
);Estos son los resultados previstos:

Ahora, traté de reemplazar la parte "Probabilidad estimada lognormal" por el script como se muestra a continuación:
vvv = {0,1,2,3};
Fit Life by X(
Distribution( Lognormal ),
Nested Model Tests( Location and Scale ),
Y( :ResponseVariable ),
X( :Category ),
Censor( :Censor ),
Censor Code( 1 ),
<< set scriptables(
{
eval(
substitute(
expr(Lognormal Estimate Probability( Profile, {1000}, vvv )),
expr(vvv), vvv
)
)
}
)
);No hay errores, pero tampoco pasa nada:

Por cierto, también adjunté los datos ficticios que se utilizaron para generar los resultados.
Muchas gracias.
Re: ¿Cómo puedo hacer que la variable de la lista funcione para la estimación de cuantiles/probabilidades en "Fit Life by X"?No todas las funciones evalúan argumentos variables cuando se les llama, por lo que debe usar un valor literal para el argumento. Puedes usar expresiones para resolver este problema mientras tanto. Las personas tienen diferentes estilos. Aquí hay un ejemplo para ilustrar la idea.
list_Category_num = {0 ,1, 2, 3};
Eval(
Substitute(
Expr( Lognormal Estimate Probability( Profile, {1000}, vvv ) ),
Expr( vvv ), list_Category_num
)
);