여러 매개변수를 사용하여 맞춤형 비선형 모델을 맞추는 방법아래 수식을 사용하여 새 열을 만든 비선형 모델이 있습니다. 이 모델은 각 단계를 특징짓는 3개의 매개변수가 있는 2개의 정의된 단계가 있는 S자형 곡선과 유사하다고 설명됩니다. K1, Y1 및 P1 매개변수로 설명되는 초기 단계와 K2, Y2 및 P2 매개변수로 설명되는 두 번째 단계. 또한 각 매개변수에 대해 피팅을 용이하게 하기 위해 초기 값이 0.1인 새 열을 만들었습니다(아래 스크립트에는 없음). 그러나 값은 0에서 1까지 샘플 간에 크게 다를 수 있습니다.
동일한 모델에 적합하고 최적에 따라 이러한 매개변수 값을 검색해야 하는 샘플 목록이 있습니다. 최소 RMSE 또는 최대 R2를 기준으로 측정하고 싶은 최적의 적합도입니다. 그러나 어떻게 해야할지 모르겠습니다. 실험 데이터(:생산)와 모델(:모델) 사이의 SSQ로 계산하는 손실 함수에 대한 열을 생성했습니다. 이것이 모델을 피팅할 때 도움이 되기를 바랍니다.
col7 = New Column("Model");
col7<< set formula (Parameter({Y1_Y1_0 = 0.001, K1_K1_0 = 0.001, P1_P1_0 = 0.001, Y2_Y2_0 = 0.001, K2_K2_0 = 0.001, P2_P2_0 = 0.001},
Y1_Y1_0 * Exp(-Exp(((K1_K1_0 * Exp()) / Y1_Y1_0) * (P1_P1_0 - :Days))) + Y2_Y2_0 * Exp(-Exp(((K2_K2_0 * Exp()) / Y2_Y2_0) * (P2_P2_0 - :Days)))));
col8=newcolumn("Error");
col8<< set Formula(SSQ(:Production - :Model));
col8<<EVALFORMULA></EVALFORMULA>
모델을 하나의 샘플에 맞출 때 결과 스크립트의 예
Nonlinear(
Y( :Methane Yield ),
X( :Model ),
Loss( :Err ),
Iteration Limit( 1000 ),
Numeric Derivatives Only( 1 ),
Unthreaded( 1 ),
Loss is Neg LogLikelihood( 1 ),
Newton,
Finish,
Where( :Sample == "M301" )
);
지금은 Excel Solver를 사용하고 있으므로 이러한 분석을 자동화하려고 합니다.
누군가가 데이터 테이블의 모든 샘플을 통해 모델 피팅을 자동으로 실행하고 RSME가 최소일 때(손실 함수가 최소일 때 내가 맞다면) 또는 R2가 최대일 때 매개변수를 검색하는 방법에 대한 피드백을 제공할 수 있습니까?
각 열의 매개변수 값이 자동으로 업데이트됩니까?
감사해요
이보
Re: 여러 매개변수를 사용하여 맞춤형 비선형 모델을 맞추는 방법감사해요.Re: 여러 매개변수를 사용하여 맞춤형 비선형 모델을 맞추는 방법기본 손실 함수는 최소 제곱이므로 JMP는 관찰된 반응과 예측 반응 간의 차이를 자동으로 제곱합니다.
귀하의 매개 변수 추정치가 높을 것이라고 생각하므로 수렴하기 어려울 것입니다. 다시 말하지만 스크립트로 자동화를 시도하기 전에 비선형을 대화식으로 사용하여 문제를 해결할 것입니다.
이 문제에 대해 JMP 기술 지원에 문의할 수 있습니다. (support@jmp.com)
Re: 여러 매개변수를 사용하여 맞춤형 비선형 모델을 맞추는 방법네 제가 사용하고 있는 모델입니다. 손실 함수를 지정하려면 어떤 함수를 사용해야 합니까?Re: 여러 매개변수를 사용하여 맞춤형 비선형 모델을 맞추는 방법맞추려는 모델입니까?

손실 함수는 SSQ() 함수를 사용하면 안 됩니다. 비선형 플랫폼은 각 행의 손실을 자동으로 결합합니다.
Re: 여러 매개변수를 사용하여 맞춤형 비선형 모델을 맞추는 방법시작 값은 동일한 데이터에 대해 Excel Solver에서 얻은 결과를 기반으로 사용되었습니다.
JMP가 비슷한 결과를 얻지 못하거나 좋은 수렴을 달성하지 못한다는 것은 다소 놀라운 일입니다. 또한 JMP는 Loss 함수를 사용하여 반복을 실행하는 데 어려움을 겪고 결국 충돌합니다. 손실 함수 없이 실행하면 수렴이 이루어지지 않습니다.
Re: 여러 매개변수를 사용하여 맞춤형 비선형 모델을 맞추는 방법추가 의견: 최적의 설정을 결정할 때까지 비선형으로 대화식으로 작업하는 것이 좋습니다. 스크립팅을 동시에 작동시키는 것보다 이 방법이 더 빠르고 쉬울 것입니다. 그런 다음 스크립트를 저장하여 개발을 계속할 수 있습니다.
Re: 여러 매개변수를 사용하여 맞춤형 비선형 모델을 맞추는 방법첫째, 마침 옵션은 영원히 가는 것을 의미하지 않습니다. 사용자 인터페이스에서 단계 버튼 대신 이동 버튼을 클릭하는 것과 같습니다. 중지 규칙(기준) 중 하나가 달성될 때까지 진행됩니다. 반복 횟수의 기본 제한은 60입니다. 좋은 솔루션을 얻기 위해 비선형이 더 열심히 작동하도록 다시 실행할 수 있습니다. 필요한 경우 다른 기준을 변경(완화 또는 강화)할 수도 있습니다.
둘째, 느린 수렴은 시작 값에 대한 잘못된 선택을 나타내는 것일 수 있습니다. 데이터에 대한 값을 어떻게 결정했습니까?
Re: 여러 매개변수를 사용하여 맞춤형 비선형 모델을 맞추는 방법JSL에 대한 나의 경험은 미미합니다. 아쉽게도 이제 막 시작했습니다. JMP14를 사용하고 있습니다. 의견을 보내 주셔서 감사합니다.
나는 당신이 제안한대로 (아래) 당신의 스크립트를 수정하고 실행했습니다. 그것은 나에게 추정치를 제공하지만 :Finish 명령이 요청할 것이라고 생각하기 때문에 "무한"까지 반복을 실행하지 않습니다. 그 맞습니까? 60까지만 진행합니다. 따라서 출력 피팅이 좋지 않고 매개변수 추정치가 높거나 음수이므로 매개변수 제약 조건을 설정해야 할 수도 있습니다.
obj = Nonlinear(Y( :Methane Yield ), X( :Model ), Loss( :Err ), Finish(), By( :Sample ));
obj << go;
obj << get estimates;
_xx = obj << Xpath("//OutlineBox[@helpKey='Nonlinear Solution']");
fit_dt = (_xx[1]<<FIND></FIND>Re: 여러 매개변수를 사용하여 맞춤형 비선형 모델을 맞추는 방법비선형 모델링에 관해서는 목표인 수렴 기준을 설정하는 데만 익숙합니다.수년 전 컴퓨팅 파워가 오늘날에 비해 약했을 때 저는 일반적으로 SAS를 사용하여 여러 시작 추정치의 루프를 만든 다음 잔여 결과를 비교했습니다. 그래서 "최고의 모델" 요청을 도와드릴 수 없습니다.
사용 중인 JMP 버전이나 스크립팅 지식에 대해서는 언급하지 않았습니다. 이 스크립트를 이해하려면 몇 가지 기본 구문을 알아야 합니다. 다음은 JMP Scripting Index>Objects>Nonlinear>CopyByGroupScript에서 스크립트를 수정한 것입니다.
그것 :
- "by" 열을 생성합니다. 예를 들어 이것은 :Sample 열이 됩니다.
- 보고서 obj에 대한 핸들/참조를 할당합니다. 여기에서 스크립트 변경을 사용합니다. 여기서( :샘플 == "M301" ) 에게 기준(:샘플)
- "get" 문을 사용하여 결과 목록을 만드는 방법을 보여줍니다. 보다 JMP 스크립팅 인덱스>개체>사용 가능한 메시지의 경우 비선형입니다.
- 또는 결과 표를 만들 수 있습니다.JMP 보고서(obj)는 표시 상자의 중첩 목록입니다. 예를 들어 GUI에서 그룹별 특정 테이블 상자가 있고 마우스 오른쪽 버튼을 클릭하고 결합된 데이터 테이블 만들기를 선택하면 이 JSL이 동일한 작업을 수행합니다.Xpath는 디스플레이 상자를 찾는 일반적인 방법입니다. 찾기는 덜 유연하지만 구문적으로 읽기 쉽습니다. 아래의 Xpath 문은 솔루션인 obj 보고서의 각 개요 상자에 대한 핸들/참조를 반환합니다. 각 솔루션 개요 상자에는 2개의 테이블 상자가 있습니다. 이 구조를 보면 알 수 있습니다.필요한 것은 결합된 데이터 테이블을 만들기 위해 메시지를 보내는 이러한 테이블 상자의 첫 번째 발생 ecah입니다.
이것은 당신에게 시작할 곳을 제공해야합니다.먼저 아래 스크립트를 실행하여 JMP 버전에서 실행되는지 확인한 다음 수정합니다. 다음은 이 예제 스크립트에 대한 추정 테이블의 그림입니다.
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Nonlinear Examples/US Population.jmp" );
dt << New Column( "_bycol",
Character,
Nominal,
set values( Repeat( {"A", "B"}, N Rows( dt ) )[1 :: N Rows( dt )] )
);
obj = Nonlinear( Y( :pop ), X( :Name( "X-formula" ) ), Finish(), By( _bycol )) ;
obj << go;
//returns a list of vectors where each vector, contains the parameters estimates
obj << get estimates;
//also see Get SSE, Get Parameter Names, Get CI
//Alternately, make a table
_xx = obj << Xpath("//OutlineBox[@helpKey='Nonlinear Solution']");
//only 2 groups so only 2 are found; each contains two sub tables
fit_dt = (_xx[1]<<FIND></FIND>