Ajuste de curva no lineal para datos seleccionados.En lugar de utilizar las columnas de datos directamente de la tabla de datos, quería que utilizara las columnas seleccionadas por el usuario. Pero los valores no se pasan a la fórmula.
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 /> );
Análisis y modelado de datos básicosventanasRe: Ajuste de curva no lineal para datos seleccionados.Tendrás que tener los datos en la tabla de datos para usar diferentes plataformas. Puede crear una selección de usuarios utilizando Nueva ventana() .
Re: Ajuste de curva no lineal para datos seleccionados.Creé una nueva ventana y permití a los usuarios seleccionar los campos requeridos, usando estos cuadros de lista de columnas. Pero, ¿cómo pasar esos valores a funciones no lineales, ya que solo se toman columnas de la tabla de datos?
Button box("X Column", colListX<<APPEND></APPEND>

Re: Ajuste de curva no lineal para datos seleccionados.vinusha,
Como no tiene el script completo para su cuadro de diálogo de usuario personalizado, supongo que cuál es el problema. Creo que es cómo obtener y utilizar la entrada de ColListBox. A continuación se muestra un fragmento de un guión escrito para un libro de aplicaciones JSL. los resultados de un colListBox es una lista de nombres de columnas, texto, no referencias de columnas.
_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>
Especifique el sexo de la columna para la variable X. Ejecute este script y observe el resultado en la ventana LOG
show(_yusr, _xusr, _gusr);
/*:
_yusr = {"weight", "height"};
_xusr = {"sex"};
_gusr = {"age"};
La nueva fórmula de columna de su script y NLN necesitan referencias de columna. Creo que eso es lo que te decía Jarmo.
//:*/
show(Column(_gusr[1]))
/*:
Column(_gusr[1]) = Column("age");
_gusr[1] es el nombre de la columna "edad" y para hacer referencia a la columna utilice Columna(_gusr[1]), que es Columna("edad) y equivalente a :edad.
Re: Ajuste de curva no lineal para datos seleccionados.@Vinusha , @jthi ,
No he usado mucho JMP en las versiones 16 y 17. El guión anterior fue escrito para JMP 13. Desde entonces, JMP/JSL mantiene las variables de la ventana del usuario en formato de columna. Entonces el guión puede ser más simple. Vea el resultado 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 );
Aquí está la salida
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};
Entonces puedes hacer referencia a una columna como _yVar[1], etc.
Re: Ajuste de curva no lineal para datos seleccionados.Puedes (normalmente) usar 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: Ajuste de curva no lineal para datos seleccionados.Ejecuté lo mismo pero recibo un error y además en la tabla de datos se muestra el nombre de la columna en lugar de los valores.
Names Default To Here( 1 );
Error = expr(New Window("JMP ALERT" , <<MODAL></MODAL>Re: Ajuste de curva no lineal para datos seleccionados.Para las fórmulas, es posible que tengas que evaluar la columna seleccionada allí. Esta publicación da ideas para eso. Inserte una expresión en otra usando Eval Insert, Eval Expr, Parse y Substitute
Re: Ajuste de curva no lineal para datos seleccionados.¿Por qué es impropio usar Exp y Eval en este caso? ¿Podría utilizarlos con esta ecuación ya que estamos recibiendo aportes de los usuarios?
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 )
)
),
);