JSL 및 열 번호/이름을 통한 단계적 회귀에서 효과 추가/제거안녕하세요 여러분!
논문에 JMP와 JSL을 사용하고 있기 때문에 이에 대한 도움이 정말 필요합니다. 저는 현재 일부 데이터를 분석하기 위해 JSL을 통해 JMP를 사용하고 있으며, 제 초점은 단계적 회귀입니다. 도움을 쉽게 받을 수 있도록 몇 가지 코드 스니펫을 첨부하겠습니다.
원래
1.) 열 번호를 통해 초기 모델에 여러 효과를 추가하는 방법은 무엇입니까?
현재는 내가 원하는 열 번호만 사용하여 Y를 설정할 수 있지만 열 번호를 사용하여 X를 추가할 수는 없습니다.
이것부터 하고싶다
obj = dt << Fit Model(Y(:Column Name(i)),
Effects(
:Effect1Name, :Effect2Name, /*and so on and so forth*/
),
Personality(Stepwise), Run Model(Stopping Rule(MinimumBIC))
);
이에
obj = dt << Fit Model(Y(:Column Name(i)),
Effects(
:Column(/*indices of columns to place as effects*/)
),
Personality(Stepwise), Run Model(Stopping Rule(MinimumBIC))
);
2.) 가장 중요하지 않은 효과를 제거하는 방법은 무엇입니까?
원본 스크립트를 실행한 후 일부 효과가 그다지 중요하지 않다는 것을 알았습니다. 기본 스크립팅은 다음을 사용하는 것입니다.
obj << Remove(:/*hardcoded column name*/);
하지만 유연하게 만들고 싶기 때문에 이렇게 보이도록 자동화할 수 있습니다.
obj << Remove(:Column Name(indextoremove));
하지만 위의 스니펫은 이 오류 메시지를 생성합니다.
Term not found in access or evaluation of 'Column Name' , Column Name/*###*/(indextoremove)
감사!
Re: JSL 및 열 번호/이름을 통한 단계적 회귀에서 효과 추가/제거<SPAN class="token string">^effect_cols^ doesnt appear to work within eval(parse(eval insert(Step_Str))); as the brackets "{" of the list still exist.</SPAN>Re: JSL 및 열 번호/이름을 통한 단계적 회귀에서 효과 추가/제거안녕 또 @cwillden !
이전에 수행한 작업에서 영감을 받아 코드 스니펫과 함께 내 코드에서 무언가를 변경했습니다. 이제 작동합니다!
대단히 감사합니다!
Re: JSL 및 열 번호/이름을 통한 단계적 회귀에서 효과 추가/제거안녕 @cwillden ,
답장을 보내 주셔서 감사합니다! 첫 번째 고민(여러 효과 추가)을 크게 해결해 주셨습니다!
두 번째 문제에서는 p-값이 가장 큰 항을 이미 제거할 수 있습니다. 그러나 용어를 제거하는 데 사용하는 기준이 아니라고 생각합니다.
내가 하고 있는 일(스크립팅이 아닌 포인트 앤 클릭 방식으로 이 작업을 수행하는 경우)은 다음과 같습니다.
- 테이블을 로드합니다.
- 모델 적합 모듈 실행
- Y와 X를 더합니다.
- 단계적 회귀 선택
- 모델을 구축합니다. (이동을 클릭)
- 실행을 클릭하여 보고서를 표시하십시오.
- 모수 추정치 표로 이동합니다.
- Prob>|t|를 기준으로 용어를 검사하고 제거합니다.
귀하가 보낸 코드가 단계적 적합 창의 현재 추정치 테이블의 Prob>F를 기반으로 항을 제거하고 있다고 생각합니다. 내가 하고 싶은 것은 Prob>|t| 보고서: 모델 적합 창의 매개변수 추정치 테이블의
다시 한 번 감사드립니다!
Re: JSL 및 열 번호/이름을 통한 단계적 회귀에서 효과 추가/제거안녕 @pedbundoc ,
커뮤니티에 오신 것을 환영하고 논문에 행운을 빕니다.
다른 대화 상자 입력과 달리 Effects 입력은 단순한 열 목록이 아닙니다.또한 해당 인수에 고차 효과를 지정합니다."column(1), column(2), column(3), column(1)*column(2), column(2)*column(2)" 등을 사용하여 효과 목록을 작성할 수 있습니다. 또한, 어떤 시나리오에서도 Column() 함수 내에 여러 인덱스를 지정할 수 없습니다.더 나은 솔루션은 열 참조 목록을 가져오고 다음과 같이 열 인덱스를 사용하여 목록을 하위 집합으로 만드는 것입니다.
dt = Current Data Table();
all_cols = dt << Get Column Reference();
//let's say factors are columns 2-4
effect_cols = all_cols[2::4];
이제 JMP는 Fit Model 스크립트의 Effects 인수로 직접 변수 effect_cols를 삽입하는 것을 좋아하지 않는 것 같습니다.목록을 평가하는 대신 "effect_cols"라는 열을 찾습니다.따라서 다음과 같이 effect_cols의 평가를 대체하는 문자열에서 Fit Model 스크립트를 구문 분석합니다.
Step_Str = "\[step = dt << Fit Model(
Y( Column(5) ),
Effects(
^effect_cols^
),
Personality( "Stepwise" ),
Run
);]\";
eval(parse(eval insert(Step_Str)));
이것은 주 효과만 있는 경우에 효과가 있습니다.그렇지 않으면 좀 더 창의적이어야 합니다.여전히 완전히 할 수 있습니다.
이제 효과 제거 문제입니다.제거는 효과 중 하나의 이름과 일치하는 문자열 인수를 제공하는 경우에만 작동합니다.이전에 했던 것처럼 eval(parse(eval insert())) 시퀀스를 사용하여 제거하려는 효과 이름을 포함하는 변수를 포함하는 문자열을 구문 분석할 수 있습니다.다음은 가장 큰 p-값으로 효과를 가져와 제거하는 예입니다.
//Get a reference to the report window containing the stepwise object
step_rprt = step << Report;
//get the term names and current p-values from Current Estimates
terms = step_rprt["Current Estimates"][StringColBox(1)] << Get;
pvals = step_rprt["Current Estimates"][NumberColBox(5)] << Get;
//Remove Intercept from each
remove from(terms,1); //remove intercept
remove from(pvals,1); //remove p-value for intercept
max_index = Contains(pvals, max(pvals)); //get index of max p-value
//create an expression to remove the term with the largest p-value
remove_worst = parse(eval insert("\[step << Remove("^terms[max_index]^");]\"));
//Evaluate the expression
eval(remove_worst);도움이 되길 바랍니다!