For() 대신 JMP16 및 For Each()를 사용하고 있다는 점에 유의하십시오.
질문 1:
개요 상자에 대한 별도의 참조가 필요하다고 생각합니다. 한 가지 옵션은 너무 XPath를 사용한 다음 목록 목록을 반복하는 것입니다. 또한
//creates a report and maximizes desirability
//doesn't work if there is anything in the by() field
pf_obs = fit << XPath("//OutlineBox[text()='Prediction Profiler']"); // list of lists so easiest to loop over them
For Each({pf_ob}, pf_obs,
pf = pf_ob << Get Scriptable Object;
pf << Maximize and Remember;
);
//create a data table with the parameters from the prediction profile
//in my other version (with the for loop a Where( :x = y[i]) in the model, I than had some code to concatenate tables together and change some formatting
dtout[1] = Report(fit[1])["Prediction Profiler"]["Remembered Settings"][Table Box(1)] << Make Combined Data Table

질문2:
더 깔끔하게 만들기 위해 코드의 이 부분에 약간 더 큰 리팩터링을 수행할 것이지만 이를 위해 "빠른 수정"을 수행할 수도 있습니다. Insert Into를 사용하여 프로파일러 표현식에 응답 제한 추가
jslExprProfiler = expr(
Profiler( 1,
Confidence Intervals( 1 ),
Desirability Functions( 1 ),
//sets desirability target of the crit response
_Y2_ << Response Limits(
{Lower( ytarg-1, 0.0183 ), Middle( ytarg, 1 ), Upper( ytarg+1, 0.0183 ),
Goal( "Match Target" ), Importance( 1 )}
)
);
);
For Each({mod}, ModList,
Insert Into(
jslExprProfiler, EvalExpr(
Expr(mod) << Response Limits({Lower(1, 1), Middle(2, 1), Upper(3, 1), Goal("None"), Importance(1)})
)
)
);
jslExprProfiler = Substitute(
Expr(fit << _prof_),
Expr(_prof_), Name Expr(jslExprProfiler)
);
jslExprProfiler = Substitute(
Name Expr(jslExprProfiler),
expr(_Y2_), nameexpr(yList[1])
);
전체 코드:
더보기... 안녕하세요,
사용자가
- 모델에 맞출 열 선택
- 1차 변수 식별 및 목표 값 지정
- 모델을 분할할 열을 식별합니다.
- JMP가 모델을 생성하고 의도한 목표를 달성하도록 바람직함을 최적화한 다음 모델 결과를 출력하도록 허용합니다.
- 편리한 출력 테이블에서 결과 복사
사용자 입력이나 선택을 허용하지 않고 원하는 작업을 수행하는 기능적 스크립트가 있지만 스크립트를 대화식으로 만드는 것은 어려웠습니다. 나는 대부분 거기에 있다고 생각하지만, 내가 어려움을 겪고 있는 몇 가지 특정 사항이 있습니다.
- 질문 1: 이 스크립트의 이전 버전에서는 While( x == "y[i]") 줄이 있는 for 루프를 사용하여 각 모델에 대해 다른 창을 사용했습니다. By( :x )가 더 유연하고 하나의 출력 창을 제공하기 때문에 차라리 사용하겠습니다. 그러나 By( :x )를 사용하면 이후 스크립트가 중단되어 보고서에서 스크립팅 가능한 개체를 가져옵니다. 모델 창의 각 하위 상자에 대해 다른 보고서를 만들 수 있습니까? 아니면 173-181행을 코딩하는 더 좋은 방법입니까? 다른 두 스레드를 기반으로 해당 줄을 작성합니다. 스레드 1 , 스레드 2 .
- 질문 2: 선호도 함수 없이 모델링된 가변 숫자 효과를 가질 수 있는 옵션이 필요합니다(나중에 전체 스크립트에도 최소화된 효과가 있지만 이 단순화된 데모 스크립트는 너무 복잡해졌습니다. 122-126행에서 ModExpr에서 원하는 표현식을 생성할 수 있지만 목록이기 때문에 프로필에 직접 대체하려고 할 때 작동하지 않았습니다. 내 해결 방법은 내가 모델링할 것으로 예상되는 변수의 수보다 많은 자리 표시자를 가지고 있으며 6개 미만의 모델링된 효과가 있는 경우 코드가 말도 안되는 부분을 무시하는 것 같습니다... 하지만 이것은 매우 불안정한 것 같습니다. 목록이 작동하는 단일 표현식으로 결합되도록 130-134행의 주석 처리된 코드를 수정하는 방법이 있습니까? Concatenation도 멋지게 플레이할 수 없었지만, 내가 놓친 간단한 것이 있을 것입니다.
다음은 샘플 데이터를 사용하는 샘플 스크립트입니다. 모델은 적합하지 않지만 데모에서는 그다지 중요하지 않습니다. 실행할 때 "by"에 대한 선택을 취소하면 모든 것이 정상적으로 실행되고 결과가 출력됩니다. "by" 섹션에 아무 것도 남아 있지 않으면 174행이 끊어집니다.
도움을 주셔서 감사합니다!
Names Default To Here( 1 );
//sample data for demo
dt = Open( "$SAMPLE_DATA/Football.jmp" );
xvar = {};
yvar = {};
byvar = {};
ytarg = 60;
dtout = {};
//let users select the columns to model
win = New Window( "Model Variable Selection",
<<MODAL></MODAL>