Hallo JMP-Community,
Ich versuche derzeit, ein Skript zu schreiben, das eine vorhandene Datentabelle öffnet, die eine Spalte "X1" und eine Spalte "Y1" mit 10 Zeilen enthält. Das Skript sagt dann Y1 in einer neuen Spalte voraus, erstellt eine Residualspalte (Predicted Y1 - Y1) und erstellt dann eine vorhergesagte Residualspalte. Von dort aus möchte ich, dass das Skript eine bestimmte Menge "erfundener" X1/Y1-Werte zur vorhandenen Datentabelle hinzufügt, in der Hoffnung, den Prozess zu automatisieren. Der folgende Code ist meiner Meinung nach für das Hinzufügen der Datenpunkte zur Datentabelle verantwortlich. Das Problem ist, dass das folgende Skript keine genaue Liste von X1-Werten hinzufügt (die X1-Werte sind einfach alle ganzen Zahlen zwischen 1 und 10, und wenn ich den folgenden Code ausführe, erhalte ich normalerweise nur die ganzen Zahlen 1 und 10).
d = DOE( Augment Design, X( :X1 ), Y( :Y1 )/*, {Make Design, Make Table}*/ );
d << Make Design;
dt3 = d << Make Table;
dt2 << concatenate( dt3, Append to first table( 1 ) );
Hier ist mein gesamtes Skript, falls es hilft:
// 1. Creates X1 column, and corresponding Y1
Close All( Data Tables, No Save );
sourceDT = Open( "SH2.jmp" );
dt2 = sourceDT << Subset( Columns(), Rows(), Output Table Name( "Fixed.jmp" ) );
// 2. Creates predicted Ystat column, saves formulas into same data table (first iteration)
PredictedY1 = dt2 << Neural(
Y( :Y1 ),
X( :X1 ),
Informative Missing( 0 ),
Validation Method( "Holdback", 0.3333 ),
Fit( NTanH( 3 ) )
);
PredictedY1 << Save Profile Formulas;
// 3. Adds residual column
dt2 << New Column( "Residual 1", Formula( Abs( :PredictedY1 - :Y1 ) ) );
// 4. Creates and predicts residual column
PredictedResidual1 = dt2 << Neural(
Y( :Residual 1 ),
X( :X1 ),
Informative Missing( 0 ),
Validation Method( "Holdback", 0.3333 ),
Fit( NTanH( 3 ) )
);
PredictedResidual1 << Save Profile Formulas;
// Iteration 2
d = DOE( Augment Design, X( :X1 ), Y( :Y1 )/*, {Make Design, Make Table}*/ );
d << Make Design;
dt3 = d << Make Table;
dt2 << concatenate( dt3, Append to first table( 1 ) );
PredictedY2 = dt2 << Neural(
Y( :Y1 ),
X( :X1 ),
Informative Missing( 0 ),
Validation Method( "Holdback", 0.3333 ),
Fit( NTanH( 3 ) )
);
PredictedY2 << Save Profile Formulas;
// 3. Adds residual column
dt2 << New Column( "Residual 2", Formula( Abs( :PredictedY1 2 - :Y1 ) ) );
// 4. Creates and predicts residual column
PredictedResidual2 = dt2 << Neural(
Y( :Residual 2 ),
X( :X1 ),
Informative Missing( 0 ),
Validation Method( "Holdback", 0.3333 ),
Fit( NTanH( 3 ) )
);
PredictedResidual2 << Save Profile Formulas;
Column( dt2, "X1" ) << Suppress Formula Eval();
Column( dt2, "Y1" ) << Suppress Formula Eval();
dt2 << Select where( :Residual 1 <= 3 );
dt2 << delete rows;
Vielen Dank,
Kyle
Sie können weiterhin eine der von mir vorgeschlagenen Methoden verwenden: Erstellen Sie eine zweite Datentabelle und verketten Sie sie oder fügen Sie direkt Zeilen zur ursprünglichen Datentabelle hinzu.
Ideenskizze:
dt2 = New Table( "Augmentation Runs",<BR />Add Rows( 10 ),<BR />New Column( "X1", Numeric, Continuous, Values( J( 10, 1, Random Uniform() ) )<BR />);<BR /><BR />dt << Concatenate( dt2 );
Alternative:
For( I = 1, I < 11, I++,
dt << Add Rows( { X1 = Random Uniform() } );
);
Ich entschuldige mich für etwaige Verwirrung. Du hast Recht, dass ich es möchte Erstellen Sie eine zweite Datentabelle mit den von mir ermittelten Ebenen und verketten Sie sie mit den vorhandenen Zeilen. Das Problem ist, dass die zweite Datentabelle eine Tabelle mit Werten erstellt, die explizit entweder 1 oder 10 sind. Ich möchte, dass die zweite Datentabelle Werte hat, die zufällig zwischen 1 und 10 verteilt sind (das ist der Wertebereich, den die ursprüngliche Datentabelle hat). Augment Design ist vielleicht nicht der beste Weg, dies zu tun, aber ich bin sehr neu bei JSL, daher bin ich mir nicht sicher, wie ich vorgehen soll
Vielen Dank
Ich bin mir nicht ganz sicher, was du willst. Meine Interpretation ist, dass Sie neue Zeilen an die vorherigen Zeilen anhängen möchten. Augment Design erstellt neue Behandlungen und die Nachricht Tabelle erstellen gibt die neue kombinierte Tabelle aus. Es erstellt die neuen Zeilen, die für das angegebene Modell und die angegebenen Zeilen optimal sind.
Ich denke, Sie möchten eine zweite Datentabelle mit den von Ihnen festgelegten Ebenen erstellen und diese mit den vorhandenen Zeilen verketten. Alternativ können Sie die Nachricht << Zeilen hinzufügen() iterativ an die erste Datentabelle senden, um die neuen Ebenen anzuhängen.