선택한 데이터에 대해 비선형 곡선을 피팅합니다.데이터 테이블에서 직접 데이터 컬럼을 사용하는 대신, 사용자가 선택한 컬럼을 사용하고 싶었습니다. 그러나 값은 수식에 전달되지 않습니다.
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 /> );
기본 데이터 분석 및 모델링윈도우Re: 선택한 데이터에 대한 비선형 곡선을 피팅합니다.다른 플랫폼을 사용하려면 데이터 테이블에 데이터가 있어야 합니다. 다음을 사용하여 사용자 선택을 구성할 수 있습니다. 새창() .
Re: 선택한 데이터에 대한 비선형 곡선을 피팅합니다.새 창을 만들고 사용자가 이러한 열 목록 상자를 사용하여 필수 필드를 선택할 수 있도록 했습니다. 그러나 데이터 테이블에서만 열을 가져오므로 해당 값을 비선형 함수에 전달하는 방법은 무엇입니까?
Button box("X Column", colListX<<APPEND></APPEND>

Re: 선택한 데이터에 대한 비선형 곡선을 피팅합니다.비누샤,
사용자 정의 사용자 대화 상자에 대한 완전한 스크립트가 없기 때문에 문제가 있는 것으로 추측됩니다. ColListBox에서 입력을 얻어서 사용하는 방법이라고 생각합니다. 다음은 JSL 애플리케이션 책을 위해 작성된 스크립트의 일부입니다. colListBox의 결과는 열 참조가 아닌 열 이름, 텍스트 목록입니다.
_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>
X 변수에 대한 열 성별을 지정합니다. 이 스크립트를 실행하고 LOG 창에서 출력을 확인하세요.
show(_yusr, _xusr, _gusr);
/*:
_yusr = {"weight", "height"};
_xusr = {"sex"};
_gusr = {"age"};
스크립트의 새 열 수식과 NLN에는 열 참조가 필요합니다. 나는 그것이 Jarmo가 당신에게 말한 것이라고 믿습니다.
//:*/
show(Column(_gusr[1]))
/*:
Column(_gusr[1]) = Column("age");
_gusr[1]은 열 이름 "age"이고 열을 참조하려면 Column("age)이고 다음과 동등한 Column(_gusr[1])을 사용합니다. :나이.
Re: 선택한 데이터에 대한 비선형 곡선을 피팅합니다.@비누샤 , @jthi ,
버전 16과 17에서는 JMP를 많이 사용하지 않았습니다. 이전 스크립트는 JMP 13용으로 작성되었습니다. 그 이후로 JMP/JSL은 사용자 창 변수를 열 형식으로 유지합니다. 따라서 스크립트가 더 간단해질 수 있습니다. 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 );
출력은 다음과 같습니다.
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};
따라서 열을 _yVar[1] 등으로 참조할 수 있습니다.
Re: 선택한 데이터에 대한 비선형 곡선을 피팅합니다.(보통) 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: 선택한 데이터에 대한 비선형 곡선을 피팅합니다.동일한 작업을 실행했지만 오류가 발생하고 데이터 테이블에도 값 대신 열 이름이 표시됩니다.
Names Default To Here( 1 );
Error = expr(New Window("JMP ALERT" , <<MODAL></MODAL>Re: 선택한 데이터에 대한 비선형 곡선을 피팅합니다.수식의 경우 선택한 열을 평가해야 할 수도 있습니다. 이 게시물은 이에 대한 아이디어를 제공합니다 Eval Insert, Eval Expr, Parse 및 Substitute를 사용하여 하나의 표현식을 다른 표현식에 삽입합니다.
Re: 선택한 데이터에 대한 비선형 곡선을 피팅합니다.이 경우 Exp와 Eval을 사용하는 것이 왜 임프이며 사용자로부터 입력을 받을 때 이 방정식과 함께 사용할 수 있습니까?
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 )
)
),
);