Comment puis-je faire en sorte que la variable de la liste fonctionne pour l'estimation de quantile/probabilité dans "Fit Life by X" ?Salut tout le monde,
Je voudrais faire un script pour l'estimation de la fiabilité. Une de mes tâches est d'évaluer le quantile/probabilité estimé.
Dans ces expressions (voir le code ci-dessous), si je liste toutes les catégories en utilisant explicitement la liste, comme {0, 1, 2, 3}, l'expression fonctionne bien. Cependant, si j'utilise la variable pour la liste, puis que j'utilise la variable au lieu d'écrire explicitement la liste dans le code, l'expression ne fonctionne pas.
Voici un exemple.
Le code suivant fonctionne bien :
Lognormal Estimate Probability( Profile, {1000}, {0 ,1, 2, 3} )
Le code suivant ne fonctionne pas :
list_Category_num = {0 ,1, 2, 3}
Lognormal Estimate Probability( Profile, {1000}, list_Category_num )
J'ai essayé de chercher sur ce forum et jusqu'à présent, j'ai essayé d'utiliser des commandes telles que "eval()", "eval list()", "eval expr()", mais le problème persiste.
Ci-dessous le corps complet du code :
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>
Merci beaucoup pour votre aide.
Modélisation statistique avancéeAutomatisation et scriptExploration et visualisation des donnéesConception d'expériencesAnalyse de fiabilitéles fenêtresRe : Comment puis-je faire en sorte que la variable de la liste fonctionne pour l'estimation de quantile/probabilité dans "Fit Life by X" ?Merci d'avoir signalé le problème au support technique, @Bhume_Chant
Et j'ai raté "profil". Votre observation est correcte. Dans JMP 16, "profil" est nécessaire. Et c'est de choisir le type "Probabilité CI". Veuillez ajouter "profil" dans votre script.

À partir de JMP 17, le "profil" n'est plus requis. Les IC de Wald et de Lifelihood sont rapportés.
Re : Comment puis-je faire en sorte que la variable de la liste fonctionne pour l'estimation de quantile/probabilité dans "Fit Life by X" ?Merci beaucoup Peng !
Tout d'abord, je viens d'envoyer un e-mail à l'équipe d'assistance JMP comme vous l'avez suggéré. Ce cas a reçu le numéro de dossier suivant : TS-00030985.
Deuxièmement, je suis très reconnaissant que vous expliquiez également en détail comment envelopper l'objet de la plate-forme et envelopper le message. Je me souviendrai de cette pratique importante lorsque j'aurai besoin d'écrire JSL à l'avenir.
Au fait, concernant le code que vous avez montré, les deux fonctionnent mais je dois ajouter le mot "profil", devant {1000} comme celui-ci :
Ce code fonctionne avec la version JMP que j'utilise :
Lognormal Estimate Probability(profile, {1000}, vvv )
Ce code ne génère pas d'erreurs, mais rien ne se passe avec la version JMP que j'utilise :
Lognormal Estimate Probability({1000}, vvv )
Je ne sais pas si la raison pour laquelle j'ai besoin d'ajouter un "profil" est liée à la version JMP que j'utilise ou non. J'utilise actuellement une ancienne version de JMP (version 16.2).
Re : Comment puis-je faire en sorte que la variable de la liste fonctionne pour l'estimation de quantile/probabilité dans "Fit Life by X" ?Merci d'avoir attiré mon attention là-dessus, @Mark_Bailey !
@Bhume_Chant veuillez d'abord contacter support@jmp.com pour signaler ce problème. Le programme actuel attend une liste de nombres, soit une liste de nombres littéraux, soit une liste de variables, mais n'attend pas de variable, qui est une liste. Cela devrait être corrigé. Veuillez contacter le support technique. On apprécie ça.
Pour résoudre votre problème actuel, voici une solution de contournement, conforme à ce que Mark a suggéré. Mais j'offre un peu plus de perspicacité afin que la technique similaire puisse être utile dans d'autres endroits où le comportement "eval" n'est pas souhaitable. Voici les deux extraits de code qui fonctionnent.
Voici le premier
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
)
);
Voici le deuxième,
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
)
);
Comparez-les à votre script, la différence est quelle expression est enveloppée. Les deux cisailles ci-dessus s'enroulent à l'extérieur de l'objet de la plate-forme. Votre script enveloppe une expression qui est un message.
Maintenant, j'explique pourquoi l'enroulement autour d'un message ne fonctionne pas. Lorsqu'un message est enveloppé dans le côté de l'astuce eval-substitute, c'est toujours à la merci de l'implémentation de la plate-forme de reconnaître ce que signifie ce eval-substitute. Dans ce cas, la plateforme ne s'attend pas à ce qu'il s'agisse d'une expression. Et je soupçonne que c'est vrai pour la plupart des plates-formes.
Donc, sur la base de ce que j'ai appris de ce cas, ma suggestion est d'utiliser l'astuce eval-substitute au-dessus du niveau de l'objet de la plate-forme.
Re : Comment puis-je faire en sorte que la variable de la liste fonctionne pour l'estimation de quantile/probabilité dans "Fit Life by X" ?Ça fonctionne maintenant!
Merci beaucoup!
Re : Comment puis-je faire en sorte que la variable de la liste fonctionne pour l'estimation de quantile/probabilité dans "Fit Life by X" ?Voici un autre moyen à partir de l'exemple de l'index de script :
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 : Comment puis-je faire en sorte que la variable de la liste fonctionne pour l'estimation de quantile/probabilité dans "Fit Life by X" ?Vous devez déplacer l'envoi du message après le lancement de la plateforme. Quelque chose comme ça:
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 : Comment puis-je faire en sorte que la variable de la liste fonctionne pour l'estimation de quantile/probabilité dans "Fit Life by X" ?Salut Mark, merci beaucoup pour ton aide, mais pourrais-tu m'aider un peu plus avec ce problème ?
J'ai essayé d'intégrer le script ci-dessus, il n'y a pas d'erreurs mais aussi aucun résultat affiché. Je ne sais pas où j'ai mal fait.
Voici le script qui fonctionne comme prévu :
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} )
}
)
);Voici les résultats attendus :

Maintenant, j'ai essayé de remplacer la partie "Lognormal Estimate Probability" par le script comme indiqué ci-dessous :
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
)
)
}
)
);Il n'y a pas d'erreurs, mais rien ne se passe également :

Au fait, j'ai également joint les données factices utilisées pour générer les résultats.
Merci beaucoup.
Re : Comment puis-je faire en sorte que la variable de la liste fonctionne pour l'estimation de quantile/probabilité dans "Fit Life by X" ?Toutes les fonctions n'évaluent pas les arguments variables lorsqu'elles sont appelées, vous devez donc utiliser une valeur littérale pour l'argument. Vous pouvez utiliser des expressions pour résoudre ce problème en attendant. Les gens ont des styles différents. Voici un exemple pour illustrer l'idée.
list_Category_num = {0 ,1, 2, 3};
Eval(
Substitute(
Expr( Lognormal Estimate Probability( Profile, {1000}, vvv ) ),
Expr( vvv ), list_Category_num
)
);