Ajustement d'une courbe non linéaire pour les données sélectionnées.Au lieu d'utiliser les colonnes de données directement à partir de la table de données, je souhaitais que vous utilisiez les colonnes sélectionnées par l'utilisateur. Mais les valeurs ne sont pas transmises dans la formule.
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 /> );
Analyse et modélisation des données de baseles fenêtresRe : Ajustement d'une courbe non linéaire pour les données sélectionnées.Vous devrez disposer des données dans un tableau de données pour utiliser différentes plateformes. Vous pouvez créer une sélection d'utilisateurs en utilisant Nouvelle fenetre() .
Re : Ajustement d'une courbe non linéaire pour les données sélectionnées.J'ai créé une nouvelle fenêtre et permis aux utilisateurs de sélectionner les champs obligatoires, en utilisant ces zones de liste de colonnes. Mais comment transmettre ces valeurs à des fonctions non linéaires car cela prend uniquement les colonnes du tableau de données.
Button box("X Column", colListX<<APPEND></APPEND>

Re : Ajustement d'une courbe non linéaire pour les données sélectionnées.Vinusha,
Puisque vous ne disposez pas du script complet pour votre boîte de dialogue utilisateur personnalisée, je devine le problème. Je pense que c'est comment obtenir et utiliser l'entrée d'une ColListBox. Vous trouverez ci-dessous un extrait d'un script écrit pour un livre d'applications JSL. les résultats d'une colListBox sont une liste de noms de colonnes, de texte et non de références de colonnes.
_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>
Spécifiez le sexe de la colonne pour la variable X. Exécutez ce script et regardez le résultat dans la fenêtre LOG
show(_yusr, _xusr, _gusr);
/*:
_yusr = {"weight", "height"};
_xusr = {"sex"};
_gusr = {"age"};
Votre script de nouvelle formule de colonne et NLN ont besoin de références de colonne. Je crois que c'est ce que Jarmo vous disait.
//:*/
show(Column(_gusr[1]))
/*:
Column(_gusr[1]) = Column("age");
_gusr[1] est le nom de la colonne "age" et pour référencer la colonne, utilisez Column(_gusr[1]) qui est Column("age) et équivalent à :âge.
Re : Ajustement d'une courbe non linéaire pour les données sélectionnées.@Vinusha , @jthi ,
Je n'ai pas beaucoup utilisé JMP dans les versions 16 et 17. Le script précédent a été écrit pour JMP 13. Depuis lors, JMP/JSL conserve les variables de la fenêtre utilisateur au format colonne. Le script peut donc être plus simple. Voir le résultat de 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 );
Voici le résultat
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};
Vous pouvez donc référencer une colonne comme _yVar[1], etc.
Re : Ajustement d'une courbe non linéaire pour les données sélectionnées.Vous pouvez (généralement) utiliser Eval()
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()
);Re : Ajustement d'une courbe non linéaire pour les données sélectionnées.J'ai exécuté la même chose mais j'obtiens une erreur et également dans la table de données, le nom de la colonne est affiché à la place des valeurs.
Names Default To Here( 1 );
Error = expr(New Window("JMP ALERT" , <<MODAL></MODAL>Re : Ajustement d'une courbe non linéaire pour les données sélectionnées.Pour les formules, vous devrez peut-être y évaluer la colonne sélectionnée. Cet article donne des idées pour cela Insérez une expression dans une autre à l'aide d'Eval Insert, Eval Expr, Parse et Substitute
Re : Ajustement d'une courbe non linéaire pour les données sélectionnées.Pourquoi est-il imp d'utiliser Exp et Eval dans ce cas et pourriez-vous me les utiliser avec cette équation car nous prenons en compte les entrées des utilisateurs.
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 )
)
),
);