Rsquared 값 테이블을 만드는 빠른 방법하나의 매개변수와 많은 매개변수에 대한 Rsquared 값을 찾는 스크립트가 있습니다.테이블에 있으면 최상의 값을 정렬하는 것이 간단합니다.수년 동안 매우 잘 작동했지만 수만 개 이상의 매개변수에 대한 값을 찾기 위해 푸시하려고 하면 시간이 매우 오래 걸립니다.JSL에서 빠른 방법을 아는 사람이 있는지 궁금합니다.
내가 시도했지만 모두 너무 오래 걸리는 것들:
1. Bivariate 보고서를 작성하고 디스플레이 트리에서 Rsq를 읽습니다.
xyp = 이변량 (와이( 열 (답변)), 엑스( 평가 (fact)), Fit Polynomial(degree), invisible);
이 명령은 실제로 예상보다 빠르게 작동하지만 값을 얻기 위해 디스플레이 트리를 반복하는 데 대부분의 시간이 걸립니다.
2. 모델 적합 -> StepWise -> 1항의 모든 가능한 모델을 사용합니다.
이것은 모든 용어에 대해 누락된 데이터가 없는 데이터 행에만 맞는 것으로 보이며 일부 용어에 대해 누락된 데이터가 많을 수 있습니다.그래서 그것은 내 요구에 맞지 않습니다.
3. 아래와 같은 함수로 제곱합을 합산합니다.
GetRsquared = function ({x,y}, {sx,sy,ssxx,ssyy,ssxy,nr,np,i},
sx=0;
sy=0;
ssxx=0;
ssyy=0;
ssxy=0;
nr=nrows(y);
np=nr;
for( i=1, i<=nr, i++,
if(is missing(x[i]),np--,
if(is missing(y[i]),np--,
sx=sx+x[i];
sy=sy+y[i];
ssxx=ssxx+x[i]*x[i];
ssyy=ssyy+y[i]*y[i];
ssxy=ssxy+x[i]*y[i]
)));
ssxx=ssxx-sx*sx/np;
ssyy=ssyy-sy*sy/np;
ssxy=ssxy-sx*sy/np;
r2=ssxy*ssxy/ssxx/ssyy
);
Re: Rsquared 값 표를 만드는 빠른 방법도와주셔서 감사합니다.미래의 JMP 탐험가를 위한 기록을 위해 여기에서 요약하고 싶습니다.
나는 최대 ~100,000개의 용어에 대해 한 용어 대 여러 용어의 모든 R 제곱 값을 빠르게 결정하는 방법을 찾으려고 했습니다.
내 평가판에서는 Windows 7, 64비트 운영 체제, Intel Core i5-4300U CPU @190GHz 2.50Ghz, 16GB RAM이 설치된 HP EliteBook을 사용하여 2,000개의 용어를 피팅했습니다.
1) 이변량 맞춤을 반복하고 디스플레이 트리에서 R 제곱을 읽거나 2) 무차별 대입 계산을 하는 내 원래 방법은 둘 다 내 노트북에서 ~ 37초가 걸렸습니다.100,000항에 ~ 30분입니다!그리고 하나 이상의 응답 용어에 대해 이 작업을 수행하고 싶습니다!
Multivariate 플랫폼을 사용하는 방법은 ~15분 동안 내 컴퓨터 리소스를 모두 소비한 후 메모리 부족으로 인해 충돌이 발생했습니다.집에서 시도하지 마십시오.
KarenC의 Response Screening을 사용하는 방법은 1초가 걸렸습니다!이것은 분명히 해결책입니다.그가 토론을 요약하고 사용할 코드를 보여주기 때문에 나는 mikedriscoll의 응답을 솔루션으로 표시했습니다.
완성하기 위해 마지막에 사용한 코드는 다음과 같습니다.
dt는 내 원래 데이터 테이블입니다.
resp는 관심 있는 y 열의 이름을 지정하는 문자열입니다.
사실은 관심 있는 x 열의 이름을 지정하는 문자열 목록입니다.
dt1 = dt << Response Screening(Y(column(resp)), X(eval(fact)));
// Note: This is not a normal table and JMP will not recognize dt1 as a table
// The 'table' is called "Pvalues". Hopefully you don't already have a table of that name.
// Of course you can write more code to make this error proof.
// To immediately move this information to a normal JMP table I took a subset.
dt2 = Data Table( "PValues" ) << Subset( All rows, Selected columns only( 0 ) );
// Now I can do other things, like ...
dt2 << Sort( By( :RSquare ), Order( Descending ), Replace Table );
rsq = dt2:RSquare<< get as matrix;
Re: Rsquared 값 표를 만드는 빠른 방법JSL에서 Response Screening 플랫폼에 전화할 수 있습니다. 거기에서 제 JSL 기술이 도움이 될 수 없습니다.
Re: Rsquared 값 표를 만드는 빠른 방법내 스크립트에 대한 첫 번째 질문에 대한 응답으로 다변량에는 "Y" 변수만 있으므로 X와 Y를 연결하여 계산하도록 합니다. 오버랩을 위해 무엇을 했는지는 기억나지 않지만 어떻게든 처리할 수 있을 것 같습니다.
Karen이 지적한 응답 스크리닝은 내가 하려는 일에 훨씬 더 의미가 있습니다.분명히 스크립트로 작성할 수 있습니다. 테스트로 실행한 다음 테이블이 아닌 보고서 출력에서 빨간색 삼각형을 확인합니다. 상단 빨간색 삼각형. 스크립트 저장 -> 스크립트 창으로 클릭하면 볼 수 있습니다. 나는 테이블과 r 값에 대한 참조를 얻는 방법을 모르지만 아마도 스크립트가 실행되기 전에 열린 테이블 목록을 얻은 다음 생성된 후에 새 테이블을 찾을 것입니다.
응답 스크리닝( Y( .... ), X(.... ) )
Re: Rsquared 값 표를 만드는 빠른 방법새 데이터 테이블에 "소스" 항목이 없다는 것도 놀랐습니다.이것을 추가하도록 요청하는 항목을 JMP 위시리스트에 추가하는 것이 좋습니다.
Re: Rsquared 값 표를 만드는 빠른 방법여자 이름,
이것은 매우 빠르며 내가 원하는 모든 매개변수를 얻는 것 같습니다.
내 응용 프로그램은 결과로 다른 작업을 수행하는 스크립트의 일부입니다.
스크립트로 작성할 수 있다고 생각하십니까?
테이블에 대한 소스 변수가 없다는 사실에 놀랐습니다.
Re: Rsquared 값 표를 만드는 빠른 방법마이크,
응답해 주셔서 감사합니다.나는 이것을 시도했다.이것은 모든 데이터에 공통적인 용어 R만 기록하고 있습니까?잘못된 데이터 열에 대해 강력한지 궁금합니다.
가볍게 두드리기
Re: Rsquared 값 표를 만드는 빠른 방법최근에 RSq 값을 얻기 위해 Analyze>Screening>Resposne Screening(JSL이 아닌 UI만)을 사용하고 있습니다.이는 일대다 매개변수 또는 다대다 매개변수에 적용됩니다. 빠르다. 다른 정보가 있지만 RSq 값은 생성된 pvalue 테이블에 있습니다. 보너스 팁: P-값 테이블에서 행(매개변수 쌍)을 선택하고 "선택한 항목 맞추기" 테이블 scritp를 실행하여 이변량 적합을 얻을 수 있습니다. 나는 항상 그것을 정말로 믿기 전에 수치적으로 강하게 나타나는 관계를 보고 싶기 때문에 이것을 좋아합니다.
Re: Rsquared 값 표를 만드는 빠른 방법나는 거의 같은 일을하는 스크립트를 가지고 있습니다. 이전에는 이변량을 사용했지만 지금은 다변량을 사용합니다(아래 스크립트의 하위 집합 참조).최근에 아직 수정하지 않은 버그를 발견했습니다. 열 이름에 특수 문자가 있을 가능성이 있습니다. 그러나 전반적으로 이것은 작동합니다. 이렇게 큰 데이터 세트에 사용한 적이 있는지 기억이 나지 않지만, 작업한 데이터의 경우 훨씬 빨랐습니다.일반적인 x의 수와 y의 일반적인 #을 얻으려면 실제로 (num_x + num_y)와 (num_x + num_y)를 계산하며, 이는 이변량을 반복하는 것보다 여전히 빠릅니다.
편집: Karen의 방법은 이 방법보다 훨씬 효율적이고 우아해 보입니다. 내 스크립트를 업데이트해야 하는 경우 해당 방법을 확실히 확인합니다.
numX = nitems(xParamNames);
numy = nitems(yParamNames);
yxParamNames = concat(yParamNames, xParamNames);
mvObj = Multivariate(
// Y(evallist(yParamList)
Y(evallist(yxParamNames)
),
Estimation Method( "Row-wise" ),
Matrix Format( "Square" ),
Scatterplot Matrix(0
)
);
corrMatrixObj = mvObj << xpath( "//OutlineBox[ text() = 'Correlations']//MatrixBox");
corrMatrix = corrMatrixObj << get();
corrMatrix = corrMatrix[1];
corrMatRows = 1::numY;
corrMatCols = (numY+1)::(numY+numX);
sub_corrMatrix = corrMatrix[corrMatRows,corrMatCols];
myRsqr = aslist(power(sub_corrMatrix,2)); // rsqr is corr matrix to the power 2. rest of script expects a list.
mvObj<< closewindow();