비선형 곡선 피팅을 위한 매개변수 경계1,000개 이상의 표본에 대한 데이터 포인트에 적합하려고 합니다. 이중 지수 5P 함수가 가장 좋은 적합 결과를 제공한다는 것을 알게 되었습니다. 하지만 동일한 표본에서 추세에서 약간 벗어난 데이터 포인트가 한두 개 있을 경우 적합이 매우 이상하게 느껴집니다. 일반적인 모집단의 경우 감소율 매개변수는 약 0.2이며, 이러한 표본에 대한 적합 결과는 10 범위에 속합니다. 비선형 적합에서 "매개변수 제한" 및 반복 횟수 제한 증가 옵션을 사용하면 문제가 해결됩니다. 하지만 GUI를 통해 수동으로 이 작업을 수행하는 것은 불가능합니다.
매개변수 경계와 반복 횟수를 "전역적으로"(모든 샘플에 대해) 설정하는 방법이 있나요?
스크립트 옵션도 시도해 보았지만 JSL 스크립팅에 익숙하지 않아 아래 스크립트로는 원하는 결과를 얻을 수 없었습니다.
Names Default To Here( 1 );
dt = Current Data Table();
obj = Nonlinear( Y( :data ), X( :data Predictor ), By( :ID ) );
obj << Go;
obj << Parameter Bounds(
asympt( 14, 22 ),
scale1( 0, 100 ),
decayrate1( -0.2, 0.1 ),
scale2( -100, 0 ),
decayrate2( -0.2, 0.1 )
);
obj << Iteration Limit( 10000 );
obj << Finish;
G = obj << Get Estimates;
Show( G );
obj << Report View( "Summary" );
obj << get estimates;
참고: 원래 JSL은 txnelson에 의해 JSL 디스플레이 상자로 이동되었습니다.
기본 데이터 분석 및 모델링Re: 비선형 곡선 피팅을 위한 매개변수 경계안녕하세요 @eugur 님 ,
JSL을 사용하지 않고 이 작업을 수행하는 방법을 보여드리겠습니다. 프로세스 작동 방식을 이해하실 수 있도록 (시작 부분은 제외하고) 먼저, 비선형 플랫폼에서 데이터에 가장 적합한 값을 찾기 위해 변경할 수 있는 빈 매개변수 값을 제공하는 수식 열을 생성해야 합니다. 먼저 수식 열을 생성해야 합니다(여기에 간단한 스크립트를 추가했지만, 직접 작성할 수도 있습니다).
dt=current data table();
dt<
<NEW column=""></NEW>
<P>준비가 되면 비선형 플랫폼을 열고 "X, 예측 변수 수식" 역할에 수식 열을, Y 섹션에 관심 있는 Y를 입력한 후 "실행"을 클릭하세요. 플랫폼이 부팅되면 빨간색 버튼을 클릭하고 "매개변수 경계"를 선택한 후 사용할 한계값을 입력하세요.</P> <P><SPAN class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Ben_BarrIngh_0-1749874842390.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="Ben_BarrIngh_0-1749874842390.png" style="width: 278px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="Ben_BarrIngh_0-1749874842390.png" style="width: 278px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="Ben_BarrIngh_0-1749874842390.png" style="width: 278px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="Ben_BarrIngh_0-1749874842390.png" style="width: 278px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="Ben_BarrIngh_0-1749874842390.png" style="width: 278px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="Ben_BarrIngh_0-1749874842390.png" style="width: 278px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="Ben_BarrIngh_0-1749874842390.png" style="width: 278px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="Ben_BarrIngh_0-1749874842390.png" style="width: 278px;"><span class="lia-inline-image-display-wrapper" image-alt="Ben_BarrIngh_0-1749874842390.png" style="width: 278px;"><img src="https://us.v-cdn.net/6038925/uploads/images/76921iB16E7281FC0917D7/Ben_BarrIngh_0-1749874842390.png" role="button" title="Ben_BarrIngh_0-1749874842390.png" alt="Ben_BarrIngh_0-1749874842390.png" /></span></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></P> <P><SPAN class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Ben_BarrIngh_1-1749874859915.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="Ben_BarrIngh_1-1749874859915.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="Ben_BarrIngh_1-1749874859915.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="Ben_BarrIngh_1-1749874859915.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="Ben_BarrIngh_1-1749874859915.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="Ben_BarrIngh_1-1749874859915.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="Ben_BarrIngh_1-1749874859915.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="Ben_BarrIngh_1-1749874859915.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="Ben_BarrIngh_1-1749874859915.png" style="width: 400px;"><span class="lia-inline-image-display-wrapper" image-alt="Ben_BarrIngh_1-1749874859915.png" style="width: 400px;"><img src="https://us.v-cdn.net/6038925/uploads/images/76922i0E0E2181BA64F9AD/Ben_BarrIngh_1-1749874859915.png" role="button" title="Ben_BarrIngh_1-1749874859915.png" alt="Ben_BarrIngh_1-1749874859915.png" /></span></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></P> <BR /> <P>그런 다음 'Go'를 사용해 비선형 플랫폼을 실행하여 해당 경계로 추정된 매개변수를 얻을 수 있습니다.</P> <BR /> <P>도움이 되길 바랍니다!</P> <P>감사해요,</P> <P>벤</P> <BR /> <BR />
Re: 비선형 곡선 피팅을 위한 매개변수 경계안녕하세요 벤,
답변 감사합니다. 하지만 이미 이 작업을 수행할 수 있고, 제가 요청하는 내용은 아닙니다. 제 게시물에서 언급했듯이, 1,000개 이상의 샘플에 대한 데이터 포인트에 적합시키려고 합니다. 즉, 1,000개 이상의 곡선이 적합됩니다. 따라서 비선형 플랫폼에서는 "기준" 섹션에 "ID" 열도 사용해야 합니다. (어떤 이유에서인지 "그룹" 옵션은 Fit Curve에서는 작동하지만 여기서는 작동하지 않습니다.)
샘플이 여러 개인 경우, 설명하신 내용(빨간색 버튼을 클릭하고 '매개변수 경계'를 선택한 후 사용할 한계값을 입력)을 각 샘플마다 수동으로 설정해야 합니다. 샘플이 여러 개라면 괜찮을 수 있지만, 1,000개 이상인 경우에는 적합하지 않습니다. 제가 요청하는 것은 1,000개 이상의 모든 샘플에 대해 매개변수 경계와 반복 횟수를 한 번에 설정할 수 있도록 하는 것입니다.
Re: 비선형 곡선 피팅을 위한 매개변수 경계안녕하세요 @eugur 님 ,
그룹 용어를 사용하지 않는 경우, 설정된 매개변수 경계는 1000개 이상의 모든 샘플에 대해 전역적으로 설정됩니다. (또한 비선형에서 그룹화가 작동하지 않는 이유는 그룹 자체가 NL에 입력하는 예측 공식에 통합되어야 하기 때문입니다.) 스크립트는 작동해야 하지만 두 번째 줄에서 'Go'를 실행할 필요는 없습니다. 플랫폼이 실행 중이기 때문에 매개변수 경계가 추가되지 않는 것입니다. 다음은 '결합된 데이터 테이블' 도구를 사용하여 각 샘플에서 값이 어떻게 변경되었는지 쉽게 확인할 수 있는 단일 보고서를 생성하는 예시입니다.
dt=current data table();
id_no=N Items(Associative Array(dt:Batch)<
<GET keys=""></GET>
<BR /> <BR />
Re: 비선형 곡선 피팅을 위한 매개변수 경계Fit Curve는 곡선 ID가 많은 경우에 가장 효과적이지만, Fit Curve의 사전 프로그래밍된 함수 라이브러리에 피팅 함수가 포함되어 있지 않으면 Fit Nonlinear가 필요합니다.
아시다시피 "그룹화"는 Fit Nonlinear에서 다르게 작동하며, 이 경우에는 사용하지 않는 것이 좋습니다. "기준"을 사용하여 곡선을 그룹화하는 것이 좋습니다.
I prefer using the following syntax for this. Could you try this and let us know if it works:</CODE></P>
<PRE><CODE class=" language-jsl">Nonlinear(
Y( :data ),
X( :data predictor),
By( :ID ),
Parameter Bounds(
asympt( 14, 22 ),
scale1( 0, 100 ),
decayrate1( -0.2, 0.1 ),
scale2( -100, 0 ),
decayrate2( -0.2, 0.1 ) ),
Iteration Limit( 10000 )
);
Re: 비선형 곡선 피팅을 위한 매개변수 경계고맙습니다 벤,
이 방법은 기능적으로는 작동합니다. 하지만 비선형 플랫폼은 다른 솔버를 사용하는 것 같습니다. 적합 결과의 거의 50%가 허용할 수 없는 수준입니다.
Re: 비선형 곡선 피팅을 위한 매개변수 경계안녕하세요 크리스찬님,
답변 감사합니다. 맞는 말씀입니다. Fit Curve가 훨씬 더 잘 작동하는 것 같습니다. 제가 사용하는 피팅 함수( 이중 지수 5P )는 Fit Curve의 사전 프로그래밍된 함수 라이브러리에 포함되어 있습니다. 하지만 앞서 말씀드렸듯이 동일한 샘플(5%)에 대해 피팅 결과가 매우 이상해서 Fit Nonlinear 옵션을 사용해 보고 싶었습니다. 하지만 경계를 설정하더라도 Fit Nonlinear는 샘플의 약 50%만 정확하게 피팅할 수 있습니다.
제 질문은 다음과 같습니다.
- Fit Curve에 매개변수 경계를 추가할 수 있나요?
- 그렇지 않다면 Fit Curve와 마찬가지로 Fit Nonlinear에도 동일한 솔버와 설정을 사용할 수 있나요?
Re: 비선형 곡선 피팅을 위한 매개변수 경계안녕하세요 @유구르 , 반복 횟수 제한을 넓혀보거나 SSE 그리드를 사용하여 샘플에 적합한 매개변수 값을 얻을 수 있는지 확인해 보세요. 또한 기본적으로 사용되는 'Netwon' 옵션에서 다른 반복 횟수를 실행하는 것도 고려해 볼 수 있습니다.
결과의 50%가 개별적으로 실패하는 이유는 모든 샘플을 사용하면 전체 SSE 모델 적합도에 미치는 영향이 줄어들어 단일 지점에서 실패가 발생할 가능성이 줄어들지만, 단일 지점만 분석하는 경우 실패 가능성이 더 높아지기 때문입니다.
Re: 비선형 곡선 피팅을 위한 매개변수 경계안녕하세요, 유구르님.
1) 제가 아는 한 Fit Curve는 매개변수 경계를 지원하지 않습니다. 2) Fit Curve는 Nonlinear와 다른 알고리즘을 사용하므로 동일한 솔버를 사용할 수 없습니다.
Fit Curve와 Fit Nonlinear는 겉보기에는 비슷해 보이지만, 실제로는 "내부적으로" 상당히 다릅니다. Nonlinear는 전통적인 비선형 최소제곱 회귀 솔버입니다. 유연성은 극대화되었지만, 수동 입력이 가장 많이 필요합니다. 선형 회귀와 달리 비선형 회귀 피팅은 비결정적이므로, "유사한" 데이터셋에 대해서도 주어진 초기 추측값이 항상 수렴한다는 보장이 없습니다. 이는 JMP에만 국한된 문제가 아닙니다. 제 경험상 대부분의 비선형 솔버는 가끔씩 수동 "튜닝"을 필요로 하기 때문에 수백 개의 데이터셋을 일괄 처리하는 것은 흥미로운 과제입니다(하지만 불가능한 것은 아닙니다!). 바로 이 부분에서 JMP의 Fit Curve 플랫폼이 도움을 줍니다.
Fit Curve는 최적화된 사전 설정 함수의 작은 라이브러리를 사용하는 특수한 사례입니다. 완전히 일반적인 비선형 회귀 솔버를 사용하지 않고, 각 함수는 해당 함수에 맞게 맞춤 작성된 특수 알고리즘을 사용합니다. 이 알고리즘은 매우 빠르며 다양한 데이터에 대해 수렴할 가능성이 높습니다. (저는 소프트웨어 개발자도 수학자도 아니므로 기술적이지 않은 설명을 양해해 주시기 바랍니다. 이는 제 기본적인 이해일 뿐입니다!) 제가 아는 한, Fit Curve는 매개변수 경계를 지원하지 않는데, 아마도 일반적으로 필요하지 않기 때문일 것입니다. 매개변수 경계가 필요한 경우 Nonlinear 플랫폼을 다시 사용하면 됩니다. Ben은 몇 가지 좋은 아이디어를 제안했고, Fit Curve가 작동하지 않을 경우 Nonlinear+스크립팅을 사용하여 시도해 볼 수 있는 다른 방법들이 있습니다. 하지만 제가 제안하는 것은 항상 Fit Curve를 먼저 시도해 보고, Fit Nonlinear는 작동하지 않을 경우에만 백업 옵션으로 사용하는 것입니다.
흥미로울 만한 몇 가지 링크를 소개합니다.
매개변수 제한 설정의 예
적합 곡선 모델에 대한 통계적 세부 정보
비선형 곡선과 적합 곡선이 다른 결과를 가져오는가? - JMP 사용자 커뮤니티
-신자