여러 매개변수를 사용하여 맞춤형 비선형 모델을 맞추는 방법아래 수식을 사용하여 새 열을 만든 비선형 모델이 있습니다. 이 모델은 각 단계를 특징짓는 세 개의 매개변수가 있는 두 개의 정의된 단계가 있는 S자형 곡선과 유사한 것으로 설명됩니다. 초기 단계는 K1, Y1 및 P1 매개변수로 설명되고 두 번째 단계는 K2, Y2 및 P2 매개변수로 설명됩니다. 또한 각 매개변수에 대해 피팅을 용이하게 하기 위해 초기 값 0.1을 할당하는 새 열을 만들었습니다(아래 스크립트에는 없음). 그러나 값은 0에서 1까지 샘플 간에 크게 달라질 수 있습니다.
동일한 모델을 적합하고 가장 적합한 것에 따라 이러한 매개변수 값을 검색해야 하는 샘플 목록이 있습니다. 최소 RMSE 또는 최대 R2를 기준으로 측정하고 싶은 최적의 핏입니다. 그러나 나는 이 작업을 수행하는 방법을 모릅니다. 실험 데이터(:Production)와 모델(:Model) 사이의 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는 손실 함수를 사용하여 반복을 실행하는 데 어려움을 겪고 결국 충돌이 발생합니다. 손실 기능 없이 실행하면 수렴이 이루어지지 않습니다.
Re: 여러 매개변수를 사용하여 맞춤형 비선형 모델을 맞추는 방법추가 의견: 최상의 설정을 결정할 때까지 Nonlinear를 대화식으로 사용하는 것이 좋습니다. 스크립팅을 동시에 작동시키려는 것보다 이 방법이 더 빠르고 쉬울 것입니다. 그런 다음 스크립트를 저장하여 개발을 계속할 수 있습니다.
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 스크립팅 색인>객체>비선형>CopyByGroupScript의 스크립트 수정 사항입니다.
그것 :
- "기준" 열을 생성합니다. 예를 들어 이것이 :Sample 열이 됩니다.
- 보고서 obj에 대한 핸들/참조를 할당합니다. 여기서는 스크립트 변경을 사용합니다. 여기서( :샘플 == "M301" ) 에게 기준(:샘플)
- "get" 문을 사용하여 결과 목록을 만드는 방법을 보여줍니다. 보다 사용 가능한 메시지는 JMP 스크립팅 인덱스>객체>비선형입니다.
- 또는 결과 테이블을 만들 수도 있습니다.JMP 보고서(obj)는 표시 상자의 중첩 목록입니다. 예를 들어 GUI에서 그룹별로 특정 테이블 상자가 있고 마우스 오른쪽 버튼을 클릭하고 결합된 데이터 테이블 만들기를 선택하면 이 JSL도 동일한 작업을 수행합니다.Xpath는 표시 상자를 찾는 일반적인 방법입니다. Find는 유연성이 떨어지지만 구문상으로는 읽기가 더 쉽습니다. 아래 Xpath 문은 솔루션인 obj 보고서의 각 개요 상자에 대한 핸들/참조를 반환합니다. 각 솔루션 개요 상자에는 2개의 테이블 상자가 있습니다. 구조를 보면 전혀 알 수 없습니다.나에게 필요한 것은 결합된 데이터 테이블을 만들기 위해 메시지를 보내기 위해 이러한 테이블 상자가 처음으로 나타나는 것뿐입니다.
이것은 시작할 수 있는 장소를 제공할 것입니다.먼저 아래 스크립트를 실행하여 사용 중인 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>