Anpassen der nichtlinearen Kurve für ausgewählte Daten.Anstatt die Datenspalten direkt aus der Datentabelle zu verwenden, wollte ich, dass Sie die vom Benutzer ausgewählten Spalten verwenden. Die Werte werden jedoch nicht in die Formel übernommen.
Y_axis = colListY << Get Items;
X_axis = colListX << Get Items;
Group_by = colListBy << Get Items;
New Column( "Model",
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula(
Parameter(
{p = 0.29, x0 = 15, m0 = 1.2, x1 = 30, m1 = 5},
p * (1 - Exp( -(:X_axis / x0) ^ m0 )) + (1 - p) * (1
-Exp( -(:X_axis / x1) ^ m1 ))
)
),
);
nlin = dt << Nonlinear(
SendToByGroup( Bygroup Default ),
Y( :Y_axis ),
X( :Model ),
Iteration Limit( 1000 ),
Unthreaded( 1 ),
QuasiNewton BFGS,
Finish,
By(:Group_By )<BR /> );
Grundlegende Datenanalyse und ModellierungWindowsBetreff: Anpassen der nichtlinearen Kurve für ausgewählte Daten.Sie müssen die Daten in der Datentabelle haben, um verschiedene Plattformen verwenden zu können. Sie können die Benutzerauswahl mithilfe von erstellen Neues Fenster() .
Betreff: Anpassen der nichtlinearen Kurve für ausgewählte Daten.Ich habe ein neues Fenster erstellt, in dem Benutzer mithilfe dieser Spaltenlistenfelder die erforderlichen Felder auswählen können. Aber wie übergibt man diese Werte an nichtlineare Funktionen, da nur Spalten aus der Datentabelle übernommen werden?
Button box("X Column", colListX<<APPEND></APPEND>

Betreff: Anpassen der nichtlinearen Kurve für ausgewählte Daten.Vinusha,
Da Sie nicht über das vollständige Skript für Ihren benutzerdefinierten Benutzerdialog verfügen, vermute ich, dass das Problem vorliegt. Ich denke, es geht darum, wie man die Eingabe von einer ColListBox erhält und verwendet. Unten finden Sie einen Ausschnitt aus einem Skript, das für ein JSL-Anwendungsbuch geschrieben wurde. Das Ergebnis einer colListBox ist eine Liste von Spaltennamen, Text, nicht von Spaltenverweisen.
_init = {_yusr={}, _xusr={}, _gusr={}};
EvalList(_init);
//define expressions, actions
_src_get = Expr( _src << Get Selected );
//dialog
ccol_dlg = New Window("Custom Column Dialog", <<MODAL></MODAL>
Geben Sie das Spaltengeschlecht für die X-Variable an. Führen Sie dieses Skript aus und sehen Sie sich die Ausgabe im LOG-Fenster an
show(_yusr, _xusr, _gusr);
/*:
_yusr = {"weight", "height"};
_xusr = {"sex"};
_gusr = {"age"};
Die neue Spaltenformel Ihres Skripts und NLN benötigt Spaltenverweise. Ich glaube, das hat Jarmo Ihnen gesagt.
//:*/
show(Column(_gusr[1]))
/*:
Column(_gusr[1]) = Column("age");
_gusr[1] ist der Spaltenname „age“ und um auf die Spalte zu verweisen, verwenden Sie Column(_gusr[1]), was Column("age) ist und äquivalent zu ist :Alter.
Betreff: Anpassen der nichtlinearen Kurve für ausgewählte Daten.@Vinusha , @jthi ,
Ich habe JMP in den Versionen 16 und 17 nicht oft verwendet. Das vorherige Skript wurde für JMP 13 geschrieben. Seitdem behält JMP/JSL die Variablen im Benutzerfenster im Spaltenformat bei. Das Skript kann also einfacher sein. Siehe die Ausgabe für col_dlg.
bc_dt = Open( "$SAMPLE_DATA/Big Class.JMP" );
//Below is JSL to build the basic dialog using the Column Dialog function.
col_dlg = Column Dialog(
_yVar = ColList( "Y, Response",, Data Type(Numeric), MinCol (1) ),
_xVar = ColList( "X, Treatment", Data Type(Character), MinCol(1), MaxCol(1) ),
_grpVar = ColList( "Group Factors", Data Type(Any) ),
);
Show( col_dlg, col_dlg["_yVar"], col_dlg["_xVar"],
col_dlg["_grpVar"], col_dlg["Button"] );
If (col_dlg["Button"] == -1, Throw( "User Cancel") );
Remove From( col_dlg , N Items(col_dlg) ); //Remove the last item
Eval List ( col_dlg );
Show( col_dlg, _yVar, _xVar, _grpVar );
Hier ist die Ausgabe
Show( col_dlg, _yVar, _xVar, _grpVar );
/*:
col_dlg = {_yVar = {:height, :weight}, _xVar = {:sex}, _grpVar = {:age}, Button(1)};
col_dlg["_yVar"] = {:height, :weight};
col_dlg["_xVar"] = {:sex};
col_dlg["_grpVar"] = {:age};
col_dlg["Button"] = 1;
col_dlg = {_yVar = {:height, :weight}, _xVar = {:sex}, _grpVar = {:age}};
_yVar = {:height, :weight};
_xVar = {:sex};
_grpVar = {:age};
Sie können also eine Spalte als _yVar[1] usw. referenzieren.
Betreff: Anpassen der nichtlinearen Kurve für ausgewählte Daten.Sie können (normalerweise) Eval() verwenden
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Nonlinear Examples/US Population.jmp");
nw = New Window("User Selections", << Modal, << Return Result,
H List Box(
Panel Box("Column Selections",
window:fcs = Filter Col Selector(dt)
),
Panel Box("User Selections",
Lineup Box(N Col(2),
Button Box("X", << Set Function(Function({this},
(this << sib) << Set Items((window:fcs << Get Selected));
))),
clb_x = Col List Box(dt, Min Items(1), Max Items(1), N Lines(2)),
Button Box("Y", << Set Function(Function({this},
(this << sib) << Set Items((window:fcs << Get Selected));
))),
clb_y = Col List Box(dt, Min Items(1), Max Items(1), N Lines(2)),
Button Box("By", << Set Function(Function({this},
(this << sib) << Set Items((window:fcs << Get Selected));
))),
clb_by = Col List Box(dt, Max Items(1), N Lines(2)),
)
),
Panel Box("Actions",
Lineup Box(N Col(1),
Button Box("OK",
x_selection = clb_x << get items;
y_selection = clb_x << get items;
by_selection = clb_x << get items;
),
Button Box("Cancel"),
)
)
)
);
obj = Nonlinear(
Y(Eval(y_selection)),
X(Eval(x_selection)),
Finish()
);Betreff: Anpassen der nichtlinearen Kurve für ausgewählte Daten.Ich habe das Gleiche ausgeführt, erhalte jedoch eine Fehlermeldung und auch in der Datentabelle wird der Spaltenname anstelle der Werte angezeigt.
Names Default To Here( 1 );
Error = expr(New Window("JMP ALERT" , <<MODAL></MODAL>Betreff: Anpassen der nichtlinearen Kurve für ausgewählte Daten.Bei Formeln müssen Sie ggf. dort die ausgewählte Spalte auswerten. Ideen dazu gibt dieser Beitrag Fügen Sie einen Ausdruck in einen anderen ein, indem Sie Eval Insert, Eval Expr, Parse und Substitute verwenden
Betreff: Anpassen der nichtlinearen Kurve für ausgewählte Daten.Warum ist es in diesem Fall wichtig, Exp und Eval zu verwenden, und könnten Sie mich bitten, sie mit dieser Gleichung zu verwenden, da wir Eingaben von Benutzern entgegennehmen?
x_selection = colListX << get items;
y_selection = colListY << get items;
by_selection = colListBy << get items;
New Column( "Model",
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula(
Parameter(
{p = 0.29, x0 = 15, m0 = 1.2, x1 = 30, m1 = 5},
p * (1 - Exp( -(Eval(x_selection)/ x0) ^ m0 )) + (1 - p) * (1
-Exp( -Eval(x_selection)/ x1) ^ m1 )
)
),
);