Rerun Formulas에 대한 스크립트 질문이전 게시물에서이 질문을했지만 몇 주 전이므로 눈에 띄지 않을 수 있습니다.나는 이것이 이 그룹에 대한 쉬운 스크립팅 질문이라고 생각합니다.아래는 단계적 회귀에 대한 몬테카를로 시뮬레이션을 성공적으로 실행하는 스크립트(프랭크가 기증)입니다.하지 않은 유일한 작업은 단계적 회귀를 수행하기 전에 수식에 난수가 있는 여러 열을 다시 계산하는 것이었습니다.<
실패한 시도는 스크립트의 19번째 줄입니다.감사해요.
Clear Globals();
Clear Log();
Names Default To Here( 1 );
//Define path in and out
Path_in = Pick File( "Select file" );
If( Directory Exists( "$Desktop\Fit_Stepwise" ),
,
Create Directory( "$Desktop\Fit_Stepwise" )
);
Path_out = "$Desktop\Fit_Stepwise\";
//Run Fit model and stepwise after open datatable
dt = Open( Path_in );
For( i = 1, i <= 1000, i++,
dt << Rerun Formulas;
ow = dt << Fit Model(
Y( :Y ),
Effects(
:Column 2 001,
:Column 2 002,
:Column 2 003,
:Column 2 004,
:Column 2 005,
:Column 2 006,
:Column 2 007,
:Column 2 008,
:Column 2 009,
:Column 2 010
),
Personality( "Stepwise" ),
Run,
SendToReport( Dispatch( {}, "Step History", OutlineBox, {Close( 1 )} ) )
);
dt_result = Report( ow )[Outline Box( "Stepwise Fit for Y" )][Outline Box( "Current Estimates" )][Table Box( 1 )] << Make Into Data Table;
dt_result << save( Path_out || Char( i ) || ".csv", "csv" );
ow << close window;
dt_result << Close Window;
);
dt << Close Window;
dt_result = Multiple File Import(
<<SET folder="">F\!"" ) > 0.05 ) ) << Delete Rows;
dt_result << Distribution( Stack( 1 ), Nominal Distribution( Column( :Parameter ), Horizontal Layout( 1 ), Vertical( 0 ) ) );</SET>고급 통계 모델링Re: Rerun Formulas에 대한 스크립트 질문감사합니다. 완벽합니다.그리고 저를 기다려 주셔서 감사합니다.또한 Wait()에 대한 도움말은 도움말에 있지만 스크립팅 색인에는 없습니다.
Re: Rerun Formulas에 대한 스크립트 질문원래 스크립트가 수식 열의 값을 업데이트하지 않는 이유를 잘 모르겠습니다. 루프 수를 낮추고(예를 들어 최대 값으로 사용) Wait(1)을 추가하여 이를 추가로 테스트할 수 있습니다. 예를 들어 <
다음은 이전에 제공한 하위 집합 테이블을 사용하여 약간 수정된 스크립트입니다. 스크립팅에 더 능숙해지기를 원하지 않으므로 여기에서 기능이 어떻게 작동하는지 자세히 설명하지는 않겠지만 아래 설명과 스크립트의 주석을 참조하십시오. 필요한 경우 더 설명할 수도 있습니다. 여기에 제공된 스크립트는 다음과 같아야 합니다.
- dt에서 찾은 모든 열을 반복하고 수식 열에서 다시 계산할 수 있도록 평가를 활성화합니다.
- Fit Model을 100회 실행하고 <
- 또한 Show()를 사용하여 기록할 열 하나에 대해 Col Median()을 인쇄합니다. 이렇게 하면 스크립트 실행 속도가 느려지지만 열의 값이 변경된다는 것을 보여야 합니다.
- 결과로 하나의 결과 테이블을 만들고 불필요한 테이블과 창을 모두 닫습니다.
- 실행 중인 루프가 완료된 후: ProbF > 0.05인 행을 숨기고 제외한 다음 배포를 만듭니다.
Names Default To Here(1);
dt = Current Data Table();
//dt = Open("Subset of Test data.jmp");
dt << Show Window(0); // should provide slight speed improvement
For Each({col_name}, dt << get column names(String), Column(dt, col_name) << suppress eval(False));
get_stepwise = Expr(
dt << Rerun Formulas;
Show(Col Mean(As Column(dt, :Column 2 001))); //will slow down script execution, but shows that values in Column 2 001 should change
Show(Col Mean(As Column(dt, :Column 2 010)));
fm = dt << Fit Model(
Y(:Y),
Effects(
:Column 2 001, :Column 2 002, :Column 2 003, :Column 2 004, :Column 2 005, :Column 2 006, :Column 2 007, :Column 2 008, :Column 2 009,
:Column 2 010
),
Personality("Stepwise"),
Run,
SendToReport(Dispatch({}, "Step History", OutlineBox, {Close(1)})),
Invisible // should provide slight speed improvement
);
dt_result = Report(fm)[Outline Box("Stepwise Fit for Y")][Outline Box("Current Estimates")][Table Box(1)] << Make Into Data Table(invisible);
dt_result << New Column("Loop", Numeric, Continuous, <<SET each="" value="">F\!""n > 0.05) << Hide And Exclude(1) << Clear Select;
// plot distribution
dt_collector << Distribution(Stack(1), Nominal Distribution(Column(:Parameter), Horizontal Layout(1), Vertical(0)));</SET>
이 스크립트는 적어도 내 설정(빠른 PC, Windows 10 및 JMP16.2)에서는 Wait(0)이 필요하지 않은 것 같습니다. 나를 위해 수식 값이 재평가 된 것 같습니다
결과:

Wait()에 대한 스크립팅 인덱스, 항목 도움말을 클릭하면 때때로 더 많은 정보가 제공됩니다(Wait()의 경우 제공됨).

JMP 도움말 - 대기(n) "지정 대기(0) 한 주기의 메시지 처리를 활성화합니다."
Re: Rerun Formulas에 대한 스크립트 질문내 테이블의 수식은 억제되지 않습니다.내가 추가할 것을 제안하는 명령에 대해 조금 더 설명해 주시겠습니까?나는 스크립팅에 대해 거의 완전히 무지합니다(그리고 더 능숙해지기 위해 내 시간을 정말로 보내고 싶지 않습니다. 왜 해야 하는지에 대해 말하는 데 에너지를 소비하지 마십시오. 저는 여러 면에서 특별한 경우입니다).{ } 안에 하나의 열 이름을 입력합니까, 아니면 6개 열을 모두 입력합니까( 또는 ;?로 구분)?문자열을 다른 것으로 교체해야 합니까?그리고 suppress eval(false) 명령에 대해 열을 별도로 나열합니까?
wait()에 관해서는 시도했지만 실패했지만 wait() 명령의 스크립팅 인덱스에서 문서를 찾을 수 없습니다.
Re: Rerun Formulas에 대한 스크립트 질문열이 평가되는지 확인하려면 For 루프 앞에 다음을 추가하십시오(JMP16보다 이전 버전을 사용하는 경우 For Each에서 For로 변경).
For Each({col_name}, dt << get column names(String),
Column(dt, col_name) << suppress eval(False)
);
테이블에서 수식 열을 열었는데 평가가 억제되었지만 다운로드된 파일의 안전 기능일 수 있습니다.
wait(0)을 추가해야 하는 경우 약간 과도하게 시작할 수 있으며 for 루프 내부의 모든 행 뒤에 거의 추가할 수 있습니다. 일반적으로 JMP에서는 필요하지 않지만 필요한 경우도 있습니다.
Re: Rerun Formulas에 대한 스크립트 질문파일을 첨부했습니다.Rerun Formulas를 올바른 위치에 삽입한 것 같지만 작동하지 않습니다.Wait는 어떻게 그리고 어디로 갑니까?
Re: Rerun Formulas에 대한 스크립트 질문재실행 공식이 작동해야 합니다. 어딘가에 wait(0)을 추가해야 할까요? 데이터 테이블을 보지 않고 문제가 있는 위치(행 수, 열 수, 복잡한 수식, 어떤 이유로 변경되지 않는 임의 시드)를 테스트하기가 약간 어렵습니다.
이 간단한 예를 사용하면 값이 잘 업데이트되는 것 같습니다.
Names Default To Here(1);
dt = New Table("Untitled",
Add Rows(5),
New Column("Column1", Numeric, "Continuous", Format("Best", 12), Formula(Random Normal(1, 1))),
New Column("Column2", Numeric, "Continuous", Format("Best", 12), Formula(Random Normal(2, 1)))
);
For(i = 1, i <= 3, i++,
dt << Rerun Formulas;
Show(dt:Column1 << get as matrix);
Show(dt:Column2 << get as matrix);
fm = dt << Fit Model(
Y(:Column1),
Effects(:Column2),
Personality("Stepwise"),
Run,
SendToReport(Dispatch({}, "Step History", OutlineBox, {Close(1)}))
);
dt_result = Report(fm)[Outline Box("Stepwise Fit for Column1")][Outline Box("Current Estimates")][Table Box(1)] << Make Into Data Table;
fm << close window;
//dt_result << Close Window;
);