Extraire les sorties après avoir maximisé les fonctions de désirabilitéJ'exécute des modèles de régression (JMP15) sur un ensemble de données "par groupe" - c'est-à-dire que je génère plus de 100 modèles de régression à partir de la même table de données. Ensuite, je maximise la désirabilité de tous ces groupes. Je voudrais extraire les valeurs variables correspondant à la "désirabilité maximisée" pour chacun des plus de 100 modèles (les valeurs encerclées dans l'image ci-dessous). Des suggestions sur la façon de procéder (soit JSL, soit l'utilisation de l'interface graphique sont acceptables) ?

Je peux le faire de manière fastidieuse (Ctrl-Prediction Profiler -> Factor Settings -> Remember Settings enregistre les paramètres pour chaque cas en tant que "Memored Settings", que je peux ensuite extraire avec Ctrl-Make Combined Data Table. Cependant, cela m'oblige à appuyer sur "enter" plus de 100 fois correspondant à chaque par-groupe !).
Analyse et modélisation des données de baseRe : Extraire les sorties après avoir maximisé les fonctions de désirabilitéVoici un exemple de faire ce que vous voulez. L'exemple crée un exemple de table. Exécute ensuite le modèle d'ajustement. Vous devrez maximiser la désirabilité, puis exécuter le reste du code pour obtenir la nouvelle table de sortie.

Names Default To Here( 1 );
dt =
// Open Data Table: Tiretread.jmp
// → Data Table( "Tiretread" )
Open( "$SAMPLE_DATA/Tiretread.jmp" );
dtSub = dt << subset( selected columns( 0 ), selected rows( 0 ), output table( "Subset" ) );
For Each Row(
:Abrasion = :Abrasion + :Abrasion*random normal(0,1);
:MODULUS = :MODULUS + :MODULUS*random normal(0,1);
:ELONG = :ELONG + :ELONG * random normal(0,1);
:HARDNESS = :HARDNESS + :HARDNESS* random normal(0,1);
);
dt << Concatenate(
dtSub,
Output Table( "Concat of Tiretread, Subset" ),
Append to first table,
Create source column
);
Close( dtSub, nosave );
// Run the Model
fm = Fit Model(
Y( :ABRASION, :MODULUS, :ELONG, :HARDNESS ),
By( :Source Table ),
Effects( :SILICA, :SILANE, :SULFUR ),
Personality( "Standard Least Squares" ),
Emphasis( "Effect Leverage" ),
Run(
:ABRASION << {Summary of Fit( 1 ), Analysis of Variance( 1 ), Parameter Estimates( 1 ),
Scaled Estimates( 0 ), Plot Actual by Predicted( 1 ), Plot Regression( 0 ),
Plot Residual by Predicted( 1 ), Plot Studentized Residuals( 0 ),
Plot Effect Leverage( 1 ), Plot Residual by Normal Quantiles( 0 ),
Box Cox Y Transformation( 0 )},
:MODULUS << {Summary of Fit( 1 ), Analysis of Variance( 1 ), Parameter Estimates( 1 ),
Scaled Estimates( 0 ), Plot Actual by Predicted( 1 ), Plot Regression( 0 ),
Plot Residual by Predicted( 1 ), Plot Studentized Residuals( 0 ),
Plot Effect Leverage( 1 ), Plot Residual by Normal Quantiles( 0 ),
Box Cox Y Transformation( 0 )},
:ELONG << {Summary of Fit( 1 ), Analysis of Variance( 1 ), Parameter Estimates( 1 ),
Scaled Estimates( 0 ), Plot Actual by Predicted( 1 ), Plot Regression( 0 ),
Plot Residual by Predicted( 1 ), Plot Studentized Residuals( 0 ),
Plot Effect Leverage( 1 ), Plot Residual by Normal Quantiles( 0 ),
Box Cox Y Transformation( 0 )},
:HARDNESS << {Summary of Fit( 1 ), Analysis of Variance( 1 ), Parameter Estimates( 1 ),
Scaled Estimates( 0 ), Plot Actual by Predicted( 1 ), Plot Regression( 0 ),
Plot Residual by Predicted( 1 ), Plot Studentized Residuals( 0 ),
Plot Effect Leverage( 1 ), Plot Residual by Normal Quantiles( 0 ),
Box Cox Y Transformation( 0 )},
Profiler(
1,
Confidence Intervals( 1 ),
Desirability Functions( 1 )
)
)
);
// Stop the JSL
stop();
// Set the Maximize Desirability and the run the code below
// Create an output table
dtMax = New Table( "Desirability",
New Column( "By Group", character ),
New Column( "Silica" ),
New Column( "Silane" ),
New Column( "Sulfer" )
);
// Populate the table getting the Desirability values from the chart
// In this example, the 2 by groups are actually just a replicate of the same
// data, so the output values will be the same.
For Each( {profile}, fm,
dtMax << add rows( 1 );
:By Group[N Rows( dtMax )] = Report( profile )[Outline Box( 1 )] << get title;
:Silica[N Rows( dtMax )] = Report( profile )["Prediction Profiler"][Number Edit Box( 1 )]
<< get;
:Silane[N Rows( dtMax )] = Report( profile )["Prediction Profiler"][Number Edit Box( 2 )]
<< get;
:Sulfer[N Rows( dtMax )] = Report( profile )["Prediction Profiler"][Number Edit Box( 3 )]
<< get;
);
Re : Extraire les sorties après avoir maximisé les fonctions de désirabilitéBonjour Jim,
Merci beaucoup pour le code. Cependant, il donne une erreur dans la toute dernière section (une fois l'ajustement des moindres carrés effectué et après avoir créé le tableau vide "Désirabilité") comme suit :

J'utilise JMP15.
Re : Extraire les sorties après avoir maximisé les fonctions de désirabilitéDe plus, comment puis-je enregistrer les réponses optimisées (c'est-à-dire Abrasion, Module, Allongement, Dureté) correspondant aux désirabilités maximisées dans le même tableau ?
Merci.
Re : Extraire les sorties après avoir maximisé les fonctions de désirabilitéLa fonction For Each() n'a été introduite qu'avec JMP 16. Par conséquent, le code doit être modifié en une méthodologie de boucle For().
For( i=1,i<=nitems(fm), i++,
Voici le JSL modifié pour utiliser la fonction For(), et pour lire également les valeurs optimisées pour les variables de réponse. J'ai testé le code dans JMP 15
Names Default To Here( 1 );
dt =
// Open Data Table: Tiretread.jmp
// → Data Table( "Tiretread" )
Open( "$SAMPLE_DATA/Tiretread.jmp" );
dtSub = dt << subset( selected columns( 0 ), selected rows( 0 ), output table( "Subset" ) );
For Each Row(
:Abrasion = :Abrasion + :Abrasion*random normal(0,1);
:MODULUS = :MODULUS + :MODULUS*random normal(0,1);
:ELONG = :ELONG + :ELONG * random normal(0,1);
:HARDNESS = :HARDNESS + :HARDNESS* random normal(0,1);
);
dt << Concatenate(
dtSub,
Output Table( "Concat of Tiretread, Subset" ),
Append to first table,
Create source column
);
Close( dtSub, nosave );
// Run the Model
fm = Fit Model(
Y( :ABRASION, :MODULUS, :ELONG, :HARDNESS ),
By( :Source Table ),
Effects( :SILICA, :SILANE, :SULFUR ),
Personality( "Standard Least Squares" ),
Emphasis( "Effect Leverage" ),
Run(
:ABRASION << {Summary of Fit( 1 ), Analysis of Variance( 1 ), Parameter Estimates( 1 ),
Scaled Estimates( 0 ), Plot Actual by Predicted( 1 ), Plot Regression( 0 ),
Plot Residual by Predicted( 1 ), Plot Studentized Residuals( 0 ),
Plot Effect Leverage( 1 ), Plot Residual by Normal Quantiles( 0 ),
Box Cox Y Transformation( 0 )},
:MODULUS << {Summary of Fit( 1 ), Analysis of Variance( 1 ), Parameter Estimates( 1 ),
Scaled Estimates( 0 ), Plot Actual by Predicted( 1 ), Plot Regression( 0 ),
Plot Residual by Predicted( 1 ), Plot Studentized Residuals( 0 ),
Plot Effect Leverage( 1 ), Plot Residual by Normal Quantiles( 0 ),
Box Cox Y Transformation( 0 )},
:ELONG << {Summary of Fit( 1 ), Analysis of Variance( 1 ), Parameter Estimates( 1 ),
Scaled Estimates( 0 ), Plot Actual by Predicted( 1 ), Plot Regression( 0 ),
Plot Residual by Predicted( 1 ), Plot Studentized Residuals( 0 ),
Plot Effect Leverage( 1 ), Plot Residual by Normal Quantiles( 0 ),
Box Cox Y Transformation( 0 )},
:HARDNESS << {Summary of Fit( 1 ), Analysis of Variance( 1 ), Parameter Estimates( 1 ),
Scaled Estimates( 0 ), Plot Actual by Predicted( 1 ), Plot Regression( 0 ),
Plot Residual by Predicted( 1 ), Plot Studentized Residuals( 0 ),
Plot Effect Leverage( 1 ), Plot Residual by Normal Quantiles( 0 ),
Box Cox Y Transformation( 0 )},
Profiler(
1,
Confidence Intervals( 1 ),
Desirability Functions( 1 )
)
)
);
// Stop the JSL
stop();
// Set the Maximize Desirability and the run the code below
// Create an output table
dtMax = New Table( "Desirability",
New Column( "By Group", character ),
New Column( "Silica" ),
New Column( "Silane" ),
New Column( "Sulfer" ),
New Column( "Optimized Abrasion"),
New Column( "Optimized Modulus"),
New Column( "Optimized Elong"),
New Column( "Optimized Hardness")
);
// Populate the table getting the Desirability values from the chart
// In this example, the 2 by groups are actually just a replicate of the same
// data, so the output values will be the same.
For( i=1,i<=nitems(fm), i++,
dtMax << add rows( 1 );
:By Group[N Rows( dtMax )] = Report( fm[i] )[Outline Box( 1 )] << get title;
:Silica[N Rows( dtMax )] = Report( fm[i] )["Prediction Profiler"][Number Edit Box( 1 )]
<< get;
:Silane[N Rows( dtMax )] = Report( fm[i] )["Prediction Profiler"][Number Edit Box( 2 )]
<< get;
:Sulfer[N Rows( dtMax )] = Report( fm[i] )["Prediction Profiler"][Number Edit Box( 3 )]
<< get;
:Optimized Abrasion[N Rows( dtMax )] = Num(Report( fm[i] )["Prediction Profiler",TextBox(2)]
<<GET text=""></GET>
<P>Vient maintenant votre travail. Vous devez étudier le JSL fourni et savoir ce qu'il fait. Couper et coller du code sans comprendre ce qu'il fait n'est pas une bonne pratique. Veuillez prendre le temps de vous renseigner sur les fonctions utilisées, ainsi que sur la sortie de l'arborescence d'affichage et sur la manière d'interpréter et d'utiliser les valeurs des affichages de sortie. Lorsque vous rencontrez des problèmes de compréhension, veuillez revenir à la communauté de discussion pour obtenir de l'aide.</P>
<P> </P>