Comment utiliser JSL pour trouver la plage de variables X afin de respecter la limite de spécification en corrigeant d'autres variables dans Prediction Profiler ?Bonjour les experts JSL,
J'ai un modèle DoE OLS ou REML avec un profileur de prédiction comme ci-dessous. Comment puis-je trouver toutes les plages de variables X pour respecter automatiquement LSL et USL avec JSL en corrigeant d'autres variables ? Par exemple, X1 doit être inférieur à 34,6 pour respecter les spécifications. Merci beaucoup pour votre aide.

Exploration et visualisation des donnéesRe : Comment utiliser JSL pour trouver la plage de variables X afin de respecter la limite de spécification en corrigeant d'autres variables dans Prediction Profiler ?JMP 17 a introduit le profileur d'espace de conception pour déterminer les plages de fonctionnement dans ce genre de situation. Une bonne raison de mettre à jour vers 17 si vous ne l'avez pas déjà fait.
Si vous avez vraiment besoin de la solution JSL particulière que vous avez décrite, j'espère que quelqu'un avec de meilleures compétences JSL que moi pourra intervenir.
Re : Comment utiliser JSL pour trouver la plage de variables X afin de respecter la limite de spécification en corrigeant d'autres variables dans Prediction Profiler ?Merci @Ross_Metusalem , nous utilisons JMP 16 actuellement. Espérons que nous pourrons bientôt passer à 17.
Re : Comment utiliser JSL pour trouver la plage de variables X afin de respecter la limite de spécification en corrigeant d'autres variables dans Prediction Profiler ?En attendant, vous pouvez utiliser le Fonctionnalité de simulation dans Prediction Profiler dans ce but.
Re : Comment utiliser JSL pour trouver la plage de variables X afin de respecter la limite de spécification en corrigeant d'autres variables dans Prediction Profiler ?@Mark_Bailey pouvez-vous me donner quelques conseils pour obtenir la plage à l'aide de la simulation dans le profileur de prédiction ? Merci beaucoup.
Re : Comment utiliser JSL pour trouver la plage de variables X afin de respecter la limite de spécification en corrigeant d'autres variables dans Prediction Profiler ?Avez-vous étudié la section d'aide que j'ai citée ?
Vous devez d'abord spécifier les limites de réponse pour déterminer la fonction de désirabilité afin d'évaluer la pertinence de la plage de facteurs.
Ouvrez le simulateur dans Prediction Profiler. Tous les niveaux de facteurs sont fixés au départ. Modifiez X1 pour qu'il varie de manière aléatoire comme prévu sous le contrôle du processus. Spécifiez également la variation aléatoire de la réponse. La simulation affichera un histogramme pour vous donner une idée de la pertinence de la transmission de l'erreur de X1 à la réponse. Le tableau de simulation fournira des informations détaillées.
Re : Comment utiliser JSL pour trouver la plage de variables X afin de respecter la limite de spécification en corrigeant d'autres variables dans Prediction Profiler ?Salut @Mark_Bailey , j'ai suivi le lien que vous avez partagé, je peux trouver manuellement le taux de défaut inférieur à 5 % pour chaque variable X. Parce que j'ai tellement de modèles et de variables, je veux trouver un moyen d'automatiser ce processus sans le faire un par un. Cela prendra tellement de temps. Est-il possible de le faire en JSL ?
Re : Comment utiliser JSL pour trouver la plage de variables X afin de respecter la limite de spécification en corrigeant d'autres variables dans Prediction Profiler ?Oui, vous pouvez créer des scripts pour le profileur et le simulateur qu'il fournit. Voir Aide > Index des scripts > Objets > Profileur et simulateur.

Re : Comment utiliser JSL pour trouver la plage de variables X afin de respecter la limite de spécification en corrigeant d'autres variables dans Prediction Profiler ?@Mark_Bailey J'ai terminé la simulation des paramètres et collecté déjà tous les résultats de la simulation. Super cool!!!Je vous remercie beaucoup pour votre aide.
Le seul défi pour moi est d'obtenir la valeur du terme à partir du script de modèle. Ce que j'ai utilisé est de rechercher "{Profiler(" puis "Term Value" pour obtenir tous les termes dans une liste, puis de simuler. Le terme valeur a des chiffres et des caractères, certains avec "xxxx" n, d'autres non, il est assez difficile de créer du code pour tous les cas différents. Avez-vous un moyen simple d'obtenir la valeur du terme à partir du modèle DoE ?
Re : Comment utiliser JSL pour trouver la plage de variables X afin de respecter la limite de spécification en corrigeant d'autres variables dans Prediction Profiler ?Par " obtenir la valeur du terme à partir du script du modèle", voulez-vous dire l'estimation du paramètre dans le script de la table du modèle ? Avez-vous enregistré un script de table pour le modèle ?
Des chaînes de caractères peuvent être utilisées pour les noms. Certains caractères sont interdits dans les noms. L'utilisation de noms incorrects nécessite une solution de contournement.
Re : Comment utiliser JSL pour trouver la plage de variables X afin de respecter la limite de spécification en corrigeant d'autres variables dans Prediction Profiler ?@Mark_Bailey Ci-dessous un de mes exemples. J'ai besoin d'un code générique qui doit lire les scripts du modèle de groupe Fit, puis obtenir la valeur du terme dans une liste de facteurs. Une fois que j'ai la liste, je vais comparer avec le nom de la colonne dans la table de données pour déterminer qu'il s'agit d'un nombre ou d'un caractère afin que je puisse créer mon code de simulation.La dernière partie est mon code, mais c'est trop compliqué et cela ne fonctionnera pas s'il y a plusieurs valeurs de terme dans le profileur. Il est donc préférable de ne laisser que Profiler activé.Je me demande si vous avez un moyen plus simple de terminer la même tâche ? Je vous remercie beaucoup pour votre aide.
factors = {"ELONG", "HARDNESS(+/-0.2)", "ABRASION For example (%)", "MODULUS"}Voici le script d'un exemple de modèle :
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>
)
)}
);Ceci est mon code pour faire la liste des facteurs:
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 : Comment utiliser JSL pour trouver la plage de variables X afin de respecter la limite de spécification en corrigeant d'autres variables dans Prediction Profiler ?Je pense qu'il existe une approche plus élégante et robuste. Voir la fin de cet exemple pour l'approche à laquelle je pense.
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 : Comment utiliser JSL pour trouver la plage de variables X afin de respecter la limite de spécification en corrigeant d'autres variables dans Prediction Profiler ?Ce que vous montrez à la fin comme valeur souhaitée de la variable chaîne est pas un string.
Comment allez-vous utiliser chaîne dans votre scénario ? Sera-ce un argument à une fonction ?
Re : Comment utiliser JSL pour trouver la plage de variables X afin de respecter la limite de spécification en corrigeant d'autres variables dans Prediction Profiler ?@Mark_Bailey str est juste un nom de variable, pendant mon code ci-dessous, j'ai utilisé random_sim et answers_sim, en changeant ces deux variables dans ma boucle for, je peux simuler tous les facteurs une fois à la fois. Le code que j'ai utilisé auparavant pour extraire Y et Term Value contient "\! dans la chaîne, mais votre façon d'extraire l'argument n'a pas "\!, qui est la seule différence.
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 : Comment utiliser JSL pour trouver la plage de variables X afin de respecter la limite de spécification en corrigeant d'autres variables dans Prediction Profiler ?@Mark_Bailey Votre solution est excellente et beaucoup plus simple que la mienne. Je vous remercie beaucoup pour votre aide.
Mais j'ai un autre problème avec cette méthode. Peux-tu m'aider?
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),"