비선형 모델 피팅의 결과를 캡처하고 이를 그래프로 출력하는 스크립트를 만들려고 합니다. 데이터 세트는 비선형 모델을 적용한 시간에 따라 지속적으로 캡처되었습니다(첨부된 그림 참조). 아래로 스크롤하면 동일한 그래프가 표시되는 12개의 서로 다른 샘플이 있습니다.
하지만 곡선을 방해하지 않고 21일까지 0, 1, 2, 3, 4, 5 등의 날짜에 해당하는 행에 대해서만 캡처된 데이터를 볼 수 있는 방식으로 그래프를 보고하고 싶습니다. 샘플 별 모델. 이 경우에는 실험 데이터를 산점도 데이터로, 모델을 연속 곡선 데이터 또는 부드러운 곡선으로 갖고 싶습니다.
어떻게 해야 하나요?
그래프 빌더는 첫 번째 과제와 동시에 실험 데이터와 모델을 모두 플롯하지 않는 것 같습니다.
내 추론은 모델 열을 방해하지 않고 스크립트를 호출할 때마다 적용할 수 있는 일종의 데이터 필터를 잠재적으로 사용할 수 있다는 것이었습니다. 12개 샘플 각각에 대한 새로운 모수 추정치를 사용하여 모델에 특정한 새 데이터 테이블을 생성한 다음 그래프 빌더를 호출해야 합니까?
또한 JMP 메뉴 탭에서 그래프/레거시/오버레이 플롯을 사용해 보았습니다. 이는 데이터 곡선과 모델 곡선을 모두 표시하는 것처럼 보이지만 이 경우에는 각 표본에 대한 매개변수 추정치를 수락하고 저장한 후 JMP가 모델 열의 각 표본에 개별적으로 매개변수 추정치를 적용하지 않았다는 것을 깨달았습니다. 이 경우 모델 공식은 데이터 테이블에 처음 나타나는 샘플에 대해 추정된 매개변수만 사용하고 이를 다음 샘플에 사용합니다.
그런 다음 각 샘플에 대해 모델과 실험 데이터를 함께 플롯할 수 있도록 각 샘플에 대해 결정된 매개변수 추정치를 사용하여 모델 공식으로 12개의 열을 생성하는 새 데이터 테이블을 생성해야 합니까?
이것이 분명하기를 바랍니다. 데이터 테이블 등의 스크린샷을 업로드할 수 있습니다.
새 매개변수 추정값에 대한 새 열을 여는 스크립트를 작성하려고 합니다.
비선형 피팅을 실행한 후 추정치와 오류가 발생합니다. 그런 다음 관심 있는 데이터 테이블만 유지하고 동일한 모델 수식을 사용하여 새 열에 사용할 관심 값을 어떻게든 얻으려고 노력합니다. 아이디어는 추정치를 기반으로 모델 매개변수를 지정하는 것입니다.
이것이 올바른 방법인지, 아니면 다른 기능을 사용해야 하는지 모르기 때문에 도움이 필요합니다. 아래 스크립트는 따라하기가 약간 복잡할 수 있지만 아마도 프로그래밍 경험이 거의 없기 때문일 것입니다. 스크립트가 분명히 작동합니다.
@마크_베일리 썼다:
저는 지금 가르치고 있기 때문에 자유롭게 확인할 수는 없지만 Nonlinear에서는 다양한 매개변수 세트가 포함된 공식을 저장할 수 있습니다. 여기서는 Match() 함수가 유용합니다. 그룹별로 일치시키고 각 결과에 대해 모델을 복제하지만 각 그룹에 대해 고유한 모수 추정치를 적용합니다. 일종의 가지가 됩니다. 일부 언어의 CASE 문과 같습니다.
굵게 표시된 부분까지:
col9 = 새 열("모델");
col9<< 수식 설정 (Parameter({Y1_Y1_0 = 0.2, K1_K1_0 = 0.01, P1_P1_0 = 0.004, Y2_Y2_0 = 0.15, K2_K2_0 = 0.06, P2_P2_0 = 0.3}, If(:Days>0, (Y1_Y1_0 * Exp(-Exp(( (K1_K1_0 * Exp()) / Y1_Y1_0) * (P1_P1_0 - :일))) + Y2_Y2_0 * Exp(-Exp(((K2_K2_0 * Exp()) / Y2_Y2_0) * (P2_P2_0 - :일)))),0 )));
col10=newcolumn("Err");
col10<< set Formula((:Average - :Model) ^ 2);
col10<<평가수식;
col10<<수식 가져오기;
obj = Nonlinear(Y( :Average ), X( :Model ), Loss( :Err ), Iteration Limit( 5000 ), By( :Sample ));
obj << 이동;
//각 벡터에 매개변수 추정값이 포함된 벡터 목록을 반환합니다.
obj << 견적 받기;
//SSE 가져오기, 매개변수 이름 가져오기, CI 가져오기도 참조하세요.
//또는 테이블을 만듭니다.
_xx = obj << Xpath("//OutlineBox[@helpKey='비선형 솔루션']");
//2개의 그룹만 있으므로 2개만 발견됩니다. 각각은 두 개의 하위 테이블을 포함합니다
fit_dt = (_xx[1]< est_dt = (_xx[1]< fit_dt << set Name("NonLin 맞춤 오류");
est_dt << set Name("NonLin Fit Estimates");
이름의 기본값은 여기에 있습니다( 1 );
DontClose = {"dt4", "NonLin Fit Errors", "NonLin Fit Estimates"}; // 남기려는 테이블 이름의 예
// 목록을 뒤로 반복하여 테이블 번호가 변경되지 않도록 합니다.
For( i = N Table(), i >= 0, i--,
If( 포함( DontClose, 데이터 테이블( i ) << 이름 가져오기 ),
계속하다(),
닫기( 데이터 테이블( i ), "저장 안함" )
)
);
dt = Data Table("NonLin Fit Estimates");
dt2<
myList=:추정<<값 가져오기
dt0 = 데이터 테이블("dt4");
dt0<< New Column("샘플을 기준으로 피팅된 모델");
col11="샘플로 피팅된 모델";
col11 << 수식 설정 (Parameter({Y1_Y1_0, K1_K1_0, P1_P1_0, Y2_Y2_0, K2_K2_0, P2_P2_0}, If(:Days>0, (Y1_Y1_0 * Exp(-Exp(((K1_K1_0 * Exp()) / Y1_Y1_0) * ( P1_P1_0 - :일))) + Y2_Y2_0 * Exp(-Exp(((K2_K2_0 * Exp()) / Y2_Y2_0) * (P2_P2_0 - :일)))),0), Set Property("예측", {:평균 , Creator("비선형")}), By (:Sample)));
각 행에 대해(col11= set Formula (Match("Parameter", "Estimates")));
col11<<평가수식;
col11<<수식 가져오기;
어떤 제안이 있으십니까?
저는 지금 가르치고 있기 때문에 자유롭게 확인할 수는 없지만 Nonlinear에서는 다양한 매개변수 세트가 포함된 공식을 저장할 수도 있습니다. 여기서는 Match() 함수가 유용합니다. 그룹별로 일치시키고 각 결과에 대해 모델을 복제하지만 각 그룹에 대해 고유한 모수 추정치를 적용합니다. 일종의 가지가 됩니다. 일부 언어의 CASE 문과 같습니다.
아니요, 넓은 형식(12개의 데이터 열에 저장된 응답) 대신 긴 형식(한 열에 응답이 저장되고 두 번째 열을 사용하여 샘플 식별)을 사용합니다. 이제 대부분의 플랫폼의 By 역할이나 비선형 또는 플롯 곡선 플랫폼의 그룹 역할에서 샘플 ID를 사용합니다.