Extrahieren von Ausgaben nach Maximierung der WunschfunktionenIch führe Regressionsmodelle (JMP15) auf einem Datensatz „gruppenweise“ aus, d. h. ich erstelle mehr als 100 Regressionsmodelle aus derselben Datentabelle. Dann maximiere ich die Attraktivität für alle diese Gruppen. Ich möchte die Variablenwerte extrahieren, die der „maximierten Attraktivität“ für jedes der mehr als 100 Modelle entsprechen (die eingekreisten Werte im Bild unten). Gibt es Vorschläge, wie das geht (entweder JSL oder die Verwendung der GUI sind in Ordnung)?

Ich kann dies auf eine mühsame Art und Weise tun (Strg-Prediction Profiler -> Faktoreinstellungen -> Einstellungen merken speichert die Einstellungen für jeden Fall als „Gemerkte Einstellungen“, die ich dann mit Strg-Kombinierte Datentabelle erstellen extrahieren kann. Dazu muss ich jedoch für jede Nebengruppe mehr als 100 Mal die Eingabetaste drücken!).
Grundlegende Datenanalyse und ModellierungBetreff: Extrahieren von Ausgaben nach Maximierung der WunschfunktionenHier ist ein Beispiel, wie Sie das erreichen können, was Sie möchten. Das Beispiel erstellt eine Beispieltabelle. Anschließend wird das Fit-Modell ausgeführt. Sie müssen die Erwünschtheit maximieren und dann den Rest des Codes ausführen, um die neue Ausgabetabelle zu erhalten.

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;
);
Betreff: Extrahieren von Ausgaben nach Maximierung der WunschfunktionenHallo Jim,
Vielen Dank für den Code. Allerdings tritt im allerletzten Abschnitt (nachdem die Funktion „Fit Least Squares“ abgeschlossen ist und die leere Tabelle „Desirability“ erstellt wurde) ein Fehler auf:

Ich verwende JMP15.
Betreff: Extrahieren von Ausgaben nach Maximierung der WunschfunktionenUnd wie kann ich die optimierten Antworten (z. B. Abrieb, Modul, Dehnung, Härte), die den maximierten Wünschen entsprechen, in derselben Tabelle speichern?
Danke.
Betreff: Extrahieren von Ausgaben nach Maximierung der WunschfunktionenDie Funktion For Each() wurde erst mit JMP 16 eingeführt. Daher muss der Code in eine For()-Schleifenmethode geändert werden.
For( i=1,i<=nitems(fm), i++,
Hier ist das JSL, das so geändert wurde, dass die For()-Funktion verwendet wird und auch die optimierten Werte für die Antwortvariablen eingelesen werden. Ich habe den Code in JMP 15 getestet.
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>Jetzt kommt Ihre Arbeit. Sie müssen das bereitgestellte JSL studieren und lernen, was es tut. Code auszuschneiden und einzufügen, ohne zu verstehen, was er tut, ist keine gute Praxis. Bitte nehmen Sie sich die Zeit, sich mit den verwendeten Funktionen sowie mit der Ausgabe des Anzeigebaums und der Interpretation und Verwendung der Werte aus den Ausgabeanzeigen vertraut zu machen. Wenn Sie Verständnisprobleme haben, wenden Sie sich bitte an die Diskussions-Community, um Hilfe zu erhalten.</P>
<P> </P>