J'ai rapidement regardé cela, notez que j'utilise JMP16 et For Each() au lieu de For().
Question 1:
Je pense que vous devez obtenir des références séparées pour les zones de contour, une option consiste également à utiliser XPath, puis à parcourir la liste des listes. Aussi
//creates a report and maximizes desirability
//doesn't work if there is anything in the by() field
pf_obs = fit << XPath("//OutlineBox[text()='Prediction Profiler']"); // list of lists so easiest to loop over them
For Each({pf_ob}, pf_obs,
pf = pf_ob << Get Scriptable Object;
pf << Maximize and Remember;
);
//create a data table with the parameters from the prediction profile
//in my other version (with the for loop a Where( :x = y[i]) in the model, I than had some code to concatenate tables together and change some formatting
dtout[1] = Report(fit[1])["Prediction Profiler"]["Remembered Settings"][Table Box(1)] << Make Combined Data Table

Question 2:
Je ferais une refactorisation un peu plus grande de cette partie du code pour la rendre plus propre, mais vous pouvez également en faire une "correction rapide". Utilisez Insérer dans pour ajouter des limites de réponse à l'expression du profileur
jslExprProfiler = expr(
Profiler( 1,
Confidence Intervals( 1 ),
Desirability Functions( 1 ),
//sets desirability target of the crit response
_Y2_ << Response Limits(
{Lower( ytarg-1, 0.0183 ), Middle( ytarg, 1 ), Upper( ytarg+1, 0.0183 ),
Goal( "Match Target" ), Importance( 1 )}
)
);
);
For Each({mod}, ModList,
Insert Into(
jslExprProfiler, EvalExpr(
Expr(mod) << Response Limits({Lower(1, 1), Middle(2, 1), Upper(3, 1), Goal("None"), Importance(1)})
)
)
);
jslExprProfiler = Substitute(
Expr(fit << _prof_),
Expr(_prof_), Name Expr(jslExprProfiler)
);
jslExprProfiler = Substitute(
Name Expr(jslExprProfiler),
expr(_Y2_), nameexpr(yList[1])
);
Code complet :
Voir plus... Bonjour,
Je travaille sur un script qui permettra aux utilisateurs de
- Sélectionner les colonnes à intégrer dans un modèle
- Identifiez la variable principale et spécifiez la valeur de l'objectif
- Identifiez la colonne par laquelle diviser le modèle
- Autoriser JMP à créer le modèle, optimiser l'opportunité d'atteindre la cible prévue, puis générer les résultats du modèle
- Copiez les résultats à partir d'un tableau de sortie pratique
J'ai des scripts fonctionnels qui font ce que je veux sans permettre la saisie ou la sélection de l'utilisateur, mais rendre le script interactif a été un défi. Je pense que je suis surtout là, mais j'ai quelques problèmes spécifiques avec lesquels je me bats
- Question 1 : dans une version précédente de ce script, j'utilisais une fenêtre différente pour chaque modèle en utilisant une boucle for avec une ligne While( x == "y[i]"). Je préfère utiliser By( :x ) car il est plus flexible et donne une fenêtre de sortie. Cependant, l'utilisation de By( :x ) interrompt le dernier script pour obtenir un objet scriptable à partir du rapport. Est-il possible de créer un rapport différent pour chaque sous-boîte dans la fenêtre modèle ? Ou une meilleure façon de coder les lignes 173-181 ? Je construis ces lignes sur la base de ces deux autres threads : fil 1 , fil 2 .
- Question2: J'ai besoin de l'option pour pouvoir avoir un nombre variable d'effets modélisés sans avoir de fonctions de désirabilité (plus tard, le script complet aura également des effets minimisés, mais ce script de démonstration simplifié devenait trop compliqué. Aux lignes 122-126, je peux créer l'expression souhaitée dans ModExpr, mais comme il s'agit d'une liste, cela n'a pas fonctionné lorsque j'ai essayé de la remplacer directement dans le profil. Ma solution de contournement consiste à avoir un nombre d'espaces réservés supérieur au nombre de variables que je m'attends à modéliser et le code semble simplement ignorer les parties absurdes si j'ai moins de 6 effets modélisés... mais cela semble super janky. Existe-t-il un moyen de corriger le code commenté dans les lignes 130 à 134 de sorte que la liste soit combinée en une seule expression qui fonctionnera ? Je n'ai pas pu faire en sorte que la concaténation soit agréable non plus, mais je parie qu'il y a quelque chose de simple que j'ai raté.
Voici un exemple de script utilisant des exemples de données. Le modèle est un ajustement terrible, mais ce n'est pas vraiment important pour la démo. Lors de l'exécution, si vous effacez la sélection de "par", tout fonctionnera correctement et produira des résultats. S'il reste quelque chose dans la section "par", la ligne 174 sera interrompue.
Merci pour toute aide!
Names Default To Here( 1 );
//sample data for demo
dt = Open( "$SAMPLE_DATA/Football.jmp" );
xvar = {};
yvar = {};
byvar = {};
ytarg = 60;
dtout = {};
//let users select the columns to model
win = New Window( "Model Variable Selection",
<<MODAL></MODAL>