수천 가지 기능에 대한 Wilcoxon 순위 합계 테스트용 스크립트 작성 방법

전문가 여러분 안녕하세요. 저는 JMP 사용자입니다. 수천 개의 기능에 대한 Wilcoxon 순위 합계 테스트 결과를 계산하는 스크립트를 작성하는 방법을 배우기 위해 글을 쓰고 있습니다. grouping 및 feature(feature_1에서 feature_n까지) 테이블은 위 그림과 같이 첨부됩니다. 내가 할 일은 다음과 같습니다.
1) "에 대한 Wilcoson 순위합 검정 치료 A vs. 치료 없음" feature_1에서 feature_2000까지. "Fit Y by X" 기능을 사용해야 한다는 것을 이해합니다. X는 그룹화(치료)여야 합니다. Y는 feature_1, 2....n에 해당하는 값이어야 합니다.
2) 나는 그것을 mannully하는 방법을 이해합니다. 각 기능의 코드는 다음과 같습니다.
맞춤 그룹(
Oneway( Y( :Feature_1 ), X( :Treatment ), Wilcoxon Test( 1 ) ),
그러나 "치료 없음"과 "치료 A"만 있는 열 항목을 선택하도록 스크립트를 작성하는 방법을 모르겠습니다. 기능 1을 완료한 다음 기능 2를 완료하고 기능 2000까지 루프로 실행되도록 하는 방법입니다.
스크립팅 가이드를 읽기 위해 최선을 다했습니다. 하지만 기본적인 개념만 잡을 수 있을 뿐 제대로 풀 수는 없습니다. 여기에 있는 누군가가 최소한 여기에 도움을 줄 수 있다면 정말 감사할 것입니다.
매우 감사합니다..
최상의,
윈더미어
Re: 수천 개의 기능에 대한 Wilcoxon 순위 합계 테스트 스크립트 작성 방법네... 맞습니다. $를 사용하면 안 됩니다.
감사해요
귀하와 Jim의 솔루션이 모두 효과가 있다고 생각합니다.
Re: 수천 개의 기능에 대한 Wilcoxon 순위 합계 테스트 스크립트 작성 방법마지막으로 작동합니다 ...
그것은 배움의 좋은 경험입니다.
감사합니다
윈더미어
Re: 수천 개의 기능에 대한 Wilcoxon 순위 합계 테스트 스크립트 작성 방법열려고 하는 파일의 파일 이름 시작 부분에 "C"("$C"가 아님)만 있으면 된다고 생각하십시오.
Re: 수천 개의 기능에 대한 Wilcoxon 순위 합계 테스트 스크립트 작성 방법안녕하세요 Jim, 예를 들어 "C:\Users\yuanyli4\Desktop\JMP TEST\Sheet1.jmp"와 같이 SAMPLE_DATA에 없지만 창 아래 어딘가에 있는 데이터 세트를 열려고 하면
이렇게 써야 할까요?
dt= Open("$C:\Users\yuanyli4\Desktop\JMP TEST\Sheet1.jmp");
감사합니다
Re: 수천 개의 기능에 대한 Wilcoxon 순위 합계 테스트 스크립트 작성 방법dt = Open( "$C:\Users\yuanyli4\Desktop\JMP TEST\Sheet1.jmp" );
colList = dt << Get Column Names( Continuous );
dt2 = dt << Stack(
columns( colList ),
source Label Column( "Feature" ),
Stacked Data Column( "Data" ),
Output Table( (dt << getName) || "Stacked" )
);
Close( dt, NoSave );
ow = dt2 << Oneway(
Y( :Data ),
X( :Treatment ),
wilcoxon Test( 1 ),
By( :Feature )
);
firstOwRep = Report( ow[1] );
dt3 = firstOwRep[Table Box( 3 )] << makeCombinedDataTable;
dt3 << setName( "One Way Chisquare Results By Feature" );
이것은 내가 가장 최신의 제안을 기반으로 작성한 것입니다.
여전히 작동하지 않습니다 ... 
내가 그것을 실행하려고 할 때. 전혀 반응이 없다...
Re: 수천 개의 기능에 대한 Wilcoxon 순위 합계 테스트 스크립트 작성 방법다음은 원하는 작업을 수행하는 예입니다.연속 변수가 많은 샘플 데이터 테이블을 사용하고 있습니다.대상 열의 이름을 모방하기 위해 연속 열 중 하나의 이름을 "Feature_1"로 변경합니다.그런 다음 "Feature_1" 열 앞에 나타나는 colList에서 모든 연속 열을 삭제한 다음 나머지 열에 대한 모든 분석을 실행합니다.
Names Default To Here( 1 );
/* Open a sample data table */
dt = Open( "$SAMPLE_DATA\semiconductor capability.jmp" );
// For illustration, change the name of one of the columns to "Feature_1"
Column( dt, 10 ) << set name( "Feature_1" );
/* Obtain a list of numeric/continuous column names */
colList = dt << Get Column Names( Continuous );
// Remove from the list of columns, all columns before the column called
// "Feature_1"
If( Contains( colList, Parse( "Feature_1" ) ) > 1,
colList = Remove( colList, 1, Contains( colList, Parse( "Feature_1" ) ) - 1 )
);
// Run the analysis
Fit Group(
Oneway( Y( Eval( colList ) ), X( :Wafer ), Wilcoxon Test( 1 ) ),
// If you want all of the outputs in a single row and you don't
// know how many there will be, a simple way to handle this is
// to just specify a large number
<<{Arrange in Rows( 200 )}
);
스크립팅이 무엇인지 알아보려면 시간을 내어 스크립팅 가이드를 읽어 보십시오.
도움말==>도서==>스크립팅 가이드
Re: 수천 개의 기능에 대한 Wilcoxon 순위 합계 테스트 스크립트 작성 방법미안해요. 여전히 작동하지 않습니다.
어떤 사람이 특정한 경우에 도움을 줄 수 있는지 궁금합니다. Feature_1이라는 열에서 끝까지 루프 시작을 작성하는 방법을 몰라서 죄송합니다. 나는 누가 그것에 대본을 쓰는 방법을 설명할 수 있기를 정말로 바랍니다.
감사해요
Re: 수천 개의 기능에 대한 Wilcoxon 순위 합계 테스트 스크립트 작성 방법고려해야 할 또 다른 옵션은 JMP 응답 스크리닝 기능입니다. 순위 합계 테스트를 수행하지 않고 t-테스트 또는 강력한 테스트(이상치를 낮추기 위해)를 수행합니다. 빠르게 실행되고, p-값 표, 유의성 대 효과 크기에 대한 그래프를 제공하고, 무엇보다도 "선택한 맞춤" 옵션이 있어 가장 관심 있는 기능을 Y x X에 쉽게 맞출 수 있습니다. 2000 기능의 하위 집합에서 Wilcoxon 테스트를 실행할 수 있습니다.
https://www.jmp.com/support/help/14/response-screening.shtml
Re: 수천 개의 기능에 대한 Wilcoxon 순위 합계 테스트 스크립트 작성 방법Jim은 이미 여러분에게 큰 도움과 지침을 제공했습니다.
내가 올바르게 이해하면 2,000개 이상의 기능이 있을 수 있으므로 반복을 피하는 것이 약간 더 효율적일 수 있습니다. 또한 2,000개의 보고서를 보는 것은 좋지 않으므로 어떤 식으로든 결과를 요약해야 합니다.
이 경우 실제로 루프를 피할 수 있으므로 아래 코드가 JSL로 더 나아가는 데 도움이 되는 방법을 이해하고 싶을 것입니다. 일반적으로 데이터를 쌓고 'By' 변수를 사용하는 것은 알아두어야 할 좋은 코딩 패턴입니다. 물론 예제에는 두 가지 '기능'(heinght 및 weight)만 있습니다.
// Open a sample data table
dt = Open( "$SAMPLE_DATA\big class.jmp" );
// Obtain a list of column names containing the 'features'
colList = dt << Get Column Names( Continuous );
// Stack the data
dt2 = dt << Stack(
columns( colList ),
Source Label Column( "Feature" ),
Stacked Data Column( "Data" ),
Output Table( (dt << getName)||" Stacked" )
);
Close(dt, NoSave);
// Do the Wilcoxon tests all at the same time (this will be a list, due to the use of the 'By' variable)
ow = dt2 << Oneway( Y( :Data ), X( :sex ), Wilcoxon Test( 1 ), By(:Feature) );
// Get a link to the first report
firstOwRep = Report(ow[1]);
// Get the one way ChiSq results from ALL reports (features) into a single table
dt3 = firstOwRep[TableBox(3)] << makeCombinedDataTable;
dt3 << setName("One Way ChiSquare Results By Feature");
물론 통계 테스트를 수천 번 적용할 때는 오경보율이 높을 수밖에 없다는 점을 고려해야 한다.
Re: 수천 개의 기능에 대한 Wilcoxon 순위 합계 테스트 스크립트 작성 방법감사합니다. 제가 스크립팅 교육과 경험이 없다는 것이 절대적으로 옳습니다.
다시 시도하겠습니다. 또한 읽어야합니다. 제가 이해하지 못하는 내용을 여기에 게시해도 상관없기를 바랍니다...
양해해 주셔서 다시 한 번 감사드립니다.
최상의,
윈더미어
Re: 수천 개의 기능에 대한 Wilcoxon 순위 합계 테스트 스크립트 작성 방법아래는 원하는 것을 제공하는 주석이 달린 스크립트입니다.
/* Open a sample data table */
dt = Open( "$SAMPLE_DATA\big class.jmp" );
/* Obtain a list of numeric/continuous column names */
colList = dt << Get Column Names( Continuous );
// If you run a Oneway analysis, and specify to Arrange in Rows
// and then save the script, it generates
/*
Fit Group(
Oneway( Y( :height ), X( :sex ) ),
Oneway( Y( :weight ), X( :sex ) ),
<<{Arrange in Rows( 200 )}
)
*/
// A little modification to include all of the columns that
// were extracted using the << Get Columns Names message, and
// the script below will give you what you want
Fit Group(
Oneway( Y( Eval( colList ) ), X( :sex ) ),
// If you want all of the outputs in a single row and you don't
// know how many there will be, a simple way to handle this is
// to just specify a large number
<<{Arrange in Rows( 200 )}
);
위 스크립트의 모든 기능과 메시지는 스크립팅 인덱스에 예제와 함께 문서화되어 있습니다.
도움말==>스크립팅 인덱스
JSL 구조 및 메서드는 스크립팅 가이드에 설명되어 있습니다.
도움말==>도서==>스크립팅 가이드
그러나 현재 프로그래밍 지식과 경험이 제한되어 있는 것 같습니다.프로그래밍 입문에 관한 많은 책 중 하나를 선택하는 것이 좋습니다."JMP 스크립팅 언어 프로그래밍 입문"에 관한 책은 없지만 실제로 필요한 것은 프로그래밍의 개념을 배우는 것입니다.이것이 이해되면 프로그래밍 세계에서 언어 간 전환은 새로운 언어의 새로운 구문을 배우는 간단한 문제가 됩니다.
Re: 수천 개의 기능에 대한 Wilcoxon 순위 합계 테스트 스크립트 작성 방법
/* Open a sample data table */
dt = Open( "$Sheet1.jmp" );
/* Obtain a list of numeric/continuous column names as strings */
colList = dt << Feature_1( Continuous, String );
For( i = 2, i <= N Items( colList ), i++, );
Oneway(
Y( :colList ),
X( :Treatment ),
Wilcoxon Test( 1 )
);
<<{Arrange in Rows( 1 )};
제가 사용한 스크립트입니다.
안타깝게도,
전혀 안되네요..
응답 없음.
이유를 아는 사람이 있습니까?
감사해요
Re: 수천 개의 기능에 대한 Wilcoxon 순위 합계 테스트 스크립트 작성 방법안녕하십니까?
도와주셔서 감사합니다. 다음 사항을 올바른 방식으로 이해하고 있는지 확인하고 싶습니다.
1.
<SPAN class="token comment">/* Obtain a list of numeric/continuous column names as strings */</SPAN>
colList <SPAN class="token operator">=</SPAN> dt <SPAN class="token operator"><</SPAN><SPAN class="token operator"><</SPAN><SPAN class="token messages"> Get Column Names</SPAN><SPAN class="token punctuation">(</SPAN> Continuous<SPAN class="token punctuation">,</SPAN> String <SPAN class="token punctuation">)</SPAN><SPAN class="token punctuation">;</SPAN>
내 테이블의 경우 다음과 같이 작성해야 합니다.
colList <SPAN class="token operator">=</SPAN> dt <SPAN class="token operator"><</SPAN><SPAN class="token operator"><</SPAN><SPAN class="token messages"> "Feature_1"</SPAN><SPAN class="token punctuation">(</SPAN> Continuous<SPAN class="token punctuation">,</SPAN> String <SPAN class="token punctuation">); <BR /></SPAN>
맞습니까?
2.
<SPAN class="token function">For</SPAN><SPAN class="token punctuation">(</SPAN> i <SPAN class="token operator">=</SPAN> <SPAN class="token number">2</SPAN><SPAN class="token punctuation">,</SPAN> i <SPAN class="token operator"><=</SPAN> <SPAN class="token function">Nitems</SPAN><SPAN class="token punctuation">(</SPAN> colList <SPAN class="token punctuation">)</SPAN><SPAN class="token punctuation">,</SPAN> i<SPAN class="token operator">++</SPAN><SPAN class="token punctuation">,</SPAN>
제 경우에는 다음과 같이 작성해야 합니다.
<SPAN class="token function">For</SPAN><SPAN class="token punctuation">(</SPAN> i <SPAN class="token operator">=</SPAN> <SPAN class="token number">0</SPAN><SPAN class="token punctuation">,</SPAN> i <SPAN class="token operator"><=</SPAN> feature_2000<SPAN class="token punctuation">(</SPAN> colList <SPAN class="token punctuation">)</SPAN><SPAN class="token punctuation">,</SPAN> i<SPAN class="token operator">++</SPAN><SPAN class="token punctuation">,)</SPAN>
그 맞습니까?
그래서 저는 i=0, i=1, i=2가 무엇을 의미하는지 잘 모르겠습니다. 설명해 주시겠습니까?
"Nitems"는 마지막 열(feature_2000)의 열 이름으로 변경해야 합니다. 내 이해가 맞습니까?
또한 이 루프를 중지하려면 ")"가 필요합니까? 아래 표시된 템플릿에는 ")"가 없습니다.
감사합니다.
나는 내일 대본을 시도하고 당신에게 피드백을 줄 것입니다.
윈더미어
Re: 수천 개의 기능에 대한 Wilcoxon 순위 합계 테스트 스크립트 작성 방법여러 열을 반복하고 플랫폼 중 하나를 실행하는 것은 토론 포럼에서 처리되는 가장 일반적인 항목 중 하나입니다."Looping"에서 검색하면 여러 선택 항목이 나타납니다.다음은 여러 열을 반복하고 그래프 빌더 플랫폼을 실행하는 예에서 가져온 반복의 예입니다.Oneway Platform의 루핑은 매우 유사합니다.
/* Open a sample data table */
dt = Open( "$SAMPLE_DATA\Fitness.jmp" );
/* Obtain a list of numeric/continuous column names as strings */
colList = dt << Get Column Names( Continuous, String );
/* Loop through the list to generate the desired Graph Builder
and save the report as a JPEG file */
For( i = 2, i <= Nitems( colList ), i++,
gb = dt << Graph Builder(
Size( 534, 454 ),
Show Control Panel( 0 ),
Variables(
X( :Age ),
Y( Column( dt, colList[i] ) ),
Color( :Age )
),
Elements(
Points(
X,
Y,
Legend( 3 ),
Summary Statistic( "Mean" ),
Error Bars( "Confidence Interval" )
)
),
SendToReport(
Dispatch(
{},
"Graph Builder",
FrameBox,
{Marker Size( 5 )}
)
),
Invisible
);
gb << Save Picture( "E:\Trash\Graph Builder_" || colList[i] ||".jpg", JPEG );
);
/* Close table and all invisible reports */
Close( dt, No Save );Re: 수천 개의 기능에 대한 Wilcoxon 순위 합계 테스트 스크립트 작성 방법안녕,
그룹 정보를 선택해 주셔서 감사합니다.
하지만 feature_1, feature_2000에 대한 테스트를 루프로 수행하는 방법은 무엇입니까? 이에 대한 솔루션도 제공해 주시겠습니까?
감사해요
윈더미어
Re: 수천 개의 기능에 대한 Wilcoxon 순위 합계 테스트 스크립트 작성 방법빠르게 볼 수 있는 두 가지 솔루션은 "처리 안 함" 또는 "처리 A"가 없는 모든 행에 대한 행 상태를 "숨기기 및 제외"로 설정한 다음 Fit Y by X 분석을 실행하는 것입니다.
names default to here(1);
dt=current data table();
dt << select where(:treatment !="No Treatment" & :treatment !="Treatment A");
<BR />dt << Hide and Exclude;
dt << Fit Group(
Oneway(………………………..));
또는 데이터를 "치료 없음" 및 "치료 A" 행만 있는 새 테이블로 하위 집합으로 만든 다음 분석을 수행합니다.
names default to here(1);
dt=current data table();
dt << select where(:treatment =="No Treatment" | :treatment !=="Treatment A");
dt2=dt<<SUBSET></SUBSET>