JSL을 사용하여 PCA 플랫폼에서 T²를 저장하는 방법(또는 계산 방법)안녕 모두,
<
<< Save T Square 호출이 다변량 관리도에서 작동한다는 것을 알고 있지만 PCA 또는 다변량 플랫폼에서는 작동하지 않는 것 같습니다. T² 공식을 생성하려면 PCA 플랫폼을 사용해야 합니다. 왜냐하면 PCA 플랫폼에서는 실제로 계산에 사용할 PC 수를 지정할 수 있기 때문입니다. 이는 Mahalanobis 거리 제곱과 같은 일반적인 T² 통계가 아닙니다. 신고 창에 보낸 << T²(1, Save T Square) 호출도 작동하지 않습니다.
1. 스크립트를 사용하여 사용할 PC 수를 지정하고 T² 공식을 데이터 테이블에 저장할 수 있습니까? 지금까지 이에 대한 옵션을 찾지 못했습니다.
2. 그렇지 않다면 가장 잘 계산하는 방법은 무엇입니까? 계산이 정의되어 있음을 알고 있습니다. 여기 , 그러나 빨간색 핫 버튼을 사용하여 데이터 테이블에 저장되는 공식은 약간 다른 것 같습니다.
저장된 공식(수동 저장)에 따르면 T² = Vec Quadratic(S, X)= Diag(X*S*X`), 여기서 X는 표준화된 데이터 벡터이고 X`는 전치이며 S는 역 공분산입니다. 행렬. 이것은 Mahalanobis 거리의 제곱인 표준 T²입니다.
그러나 에 따르면 선적 서류 비치 PCA 플랫폼의 i번째 T² 값에 대해 T_i² = [X_ci*P_a]*L-1*[P`_a*X`_ci], 여기서 X_ci는 i번째 표준화 관측값이고 P_a는 첫 번째 "a"를 포함하는 행렬입니다. (즉, 모두가 아닐 수도 있음) L-1은 첫 번째 A 고유값을 포함하는 대각 행렬입니다. 원칙적으로 이것은 Vec Quadratic(L-1, [X_ci*P_a])와 동일해야 합니다. 단, 역 공분산 행렬 S를 사용하는 대신 첫 번째 "a" PC의 역 axa 고유값 행렬을 사용하고 X를 사용합니다. 이제 X_ci*P_a]입니다. 아니면 그렇게 나타날 것입니다.
JMP가 이미 이 모든 것을 계산했을 때 n-주성분 T²를 저장하기 위해 이 문제를 다시 설계하는 것은 다소 복잡하고 불필요해 보입니다. 저장 프로세스를 자동화하고 싶지만 옵션 1이 작동하지 않는 것 같습니다. 즉, 옵션 2가 차선책입니다. 그럼에도 불구하고 수식이 포함된 새 열을 만들기 위해 수식을 복구하려는 시도는 다소 무리가 있는 것 같습니다.
다변량 플랫폼에서 저장된 T² 수식(및 T² = Mahal.Dist.² 방식)을 보여 주는 Iris.jmp 파일의 수정된 데이터 테이블을 첨부하고 있습니다. PC 4대, 그 다음에는 PC로만. 수식을 보면 알 수 있듯이 Vec Quadratic(S,X)의 S 행렬은 PC 2대와 PC 4대를 사용하여 계산된 T²가 다릅니다.
다른 수의 PC로 T²를 얻는 스크립트 방법이나 T²를 계산하기 위해 열 수식을 적절하게 공식화하는 방법에 대한 통찰력이 있는 사람이 있다면 그 통찰력에 감사할 것입니다.
귀하의 피드백과 생각에 감사드립니다!,
DS
해석학데이터 테이블스크립팅Re: JSL을 사용하여 PCA 플랫폼에서 T²를 저장하는 방법(또는 계산 방법)안녕 @ih ,
매우 훌륭합니다. 빨간색 삼각형에 액세스하는 방법에 대한 정보를 제공해 주셔서 감사합니다. 전에는 방법을 몰랐습니다.
감사해요!,
DS
Re: JSL을 사용하여 PCA 플랫폼에서 T²를 저장하는 방법(또는 계산 방법)안녕 @SDF1 ,
PCA 플랫폼의 이상값 분석 부분으로 이동하여 T2를 저장하고 빨간색 삼각형 메뉴에서 다른 모든 작업을 수행할 수 있습니다. 이상값 분석을 위해 스크립팅 가능한 개체에 도달하기만 하면 됩니다.다음은 예입니다.
Names default to here(1);
dt = Open( "$Sample_data/iris.jmp" );
pca = Principal Components(
Y( :Sepal length, :Sepal width, :Petal length, :Petal width ),
Estimation Method( "Default" ),
"on Correlations"
);
pca << Outlier Analysis();
//Get a reference to the outlier analysis itself
oa = (pca << XPath("//OutlineBox[text()='Outlier Analysis']"))[1] << Get Scriptable Object;
//Now you can access that red triangle menu and more
oa << Number of Components(1);
oa << Save T²;
oa << Save T² Contribution;
Re: JSL을 사용하여 PCA 플랫폼에서 T²를 저장하는 방법(또는 계산 방법)안녕 @Mark_Bailey 그리고 @jthi ,
의견을 보내 주셔서 감사합니다. 이는 둘 이상의 행을 선택할 수 있는 문제를 해결하는 데 도움이 됩니다. 사실, 사용자가 너무 많은 항목을 선택했다는 경고를 표시하기 위해 약간 변경했습니다. 귀하의 모든 의견에 감사드리며 제가 선호하는 방식으로 이 코드 기능을 사용할 수 있도록 도와주세요.
Mount = Expr(
New Window( "Mountains",
tb = Table Box(
String Col Box( "Mountain", {"K2", "Delphi", "Kilimanjaro", "Grand Teton"} ),
Number Col Box( "Elevation (meters)", {8611, 681, 5895, 4199} ),
Plot Col Box( "", {8611, 681, 5895, 4199} ),
<<SET selectable="" rows=""> 1, Throw( "Too many items selected!\!rOnly one selection possible." ),
N Items( selRows ) == 1,
N = selrows;
);
)
)
)
)
);
Mount;</SET>T²가 다른 값을 제시하는 이유에 대해 다시 듣게 된다면 그 이유를 알고 싶습니다.
감사해요!,
DS
Re: JSL을 사용하여 PCA 플랫폼에서 T²를 저장하는 방법(또는 계산 방법)그런데 디스플레이 참조를 저장한 다음 창이 열린 후 이를 사용하여 메시지를 보낼 필요가 없습니다. 메시지 보내기를 함수 호출에서 다른 인수로 사용하여 표시 상자를 만들 수 있습니다. 이 방법은 창이 모달인 경우에 특히 유용합니다.
Names Default To Here( 1 );
New Window( "Mountains",
tb = Table Box(
String Col Box( "Mountain", {"K2", "Delphi", "Kilimanjaro", "Grand Teton"} ),
Number Col Box( "Elevation (meters)", {8611, 681, 5895, 4199} ),
Plot Col Box( "", {8611, 681, 5895, 4199} ),
<< Set Selectable Rows(1),
<< Set Row Change Function(
Function( {this},
{selRows},
selRows = this << Get Selected Rows;
If( N Items( selRows ) > 1,
this << Set Selected Rows( Matrix( selRows[1] ) )
Print( selRows );
);
);
)
)
);Re: JSL을 사용하여 PCA 플랫폼에서 T²를 저장하는 방법(또는 계산 방법)"간단한" 방법으로 하나의 열만 강제로 선택하는 방법을 찾지 못했습니다. 사용자가 1개 이상의 행을 선택한 경우 테이블 상자를 "강제" 업데이트할 수 있습니다. 적어도 어떤 행을 분석할지 좀 더 명확하게 할 것입니다.
이것은 항상 첫 번째 선택된 행을 사용하지만 일부 열에서 가장 큰 값을 가진 행을 사용하도록 수정할 수 있습니다.
Names Default To Here(1);
New Window("Mountains",
tb = Table Box(
String Col Box("Mountain", {"K2", "Delphi", "Kilimanjaro", "Grand Teton"}),
Number Col Box("Elevation (meters)", {8611, 681, 5895, 4199}),
Plot Col Box("", {8611, 681, 5895, 4199})
)
);
tb << Set Selectable Rows();
tb << set row change function(
Function({this}, {selRows},
selRows = this << get selected rows;
If(N Items(selRows) > 1,
this << Set Selected Rows(Matrix(selRows[1]));
);
Print(this << get selected rows);
)
);Re: JSL을 사용하여 PCA 플랫폼에서 T²를 저장하는 방법(또는 계산 방법)안녕 @Mark_Bailey ,
귀하의 피드백과 플랫폼 개발자의 JSL을 포함해 주셔서 감사합니다. 글쎄, 알고 보니 내가 추구했던 것에 대한 해결책(옵션 1) ~이다 실제로 JSL로 가능!! 그리고 훨씬 더 간단합니다. 보내주신 코드에서 확인하고 싶었을 뿐입니다.중요한 부분은 다음과 같습니다.
Outlier Analysis( 1, Number of Components( N ), Save T Square ),
구성 요소 수 입력에서 "N"을 변경하고 T 제곱 저장을 추가하면 실제로 정의한 N 구성 요소에 대한 데이터 테이블에 T² 공식이 저장됩니다. Outlier Analysis() 호출 내에서 "Save T Square"에 대한 요청을 보낼 수 있다는 것을 몰랐습니다. N 구성 요소와 함께 이 작업을 수행하면 도움을 주셔서 감사합니다. 위시리스트 등을 입력할 필요가 없습니다. JMP가 이미 해드릴 수 있습니다!
2, 3, 4 PC에 대한 T² 값을 계산하는 스크립트가 포함된 Iris_mod.jmp 데이터 테이블을 첨부합니다. 필요한 경우 T² 값을 효율적으로 계산하는 방법을 아는 것이 좋습니다. 계산을 위해 방금 작성한 코드는 다소 길고 번거롭지만 일단 모든 것이 정리되면 작동했을 것이라고 생각합니다. 그러나 나는 위의 솔루션을 선호합니다. 코드의 몇 자만 추가하면 됩니다!
보내주신 코드를 자세히 살펴보면 PCA 플랫폼에서 계산한 T²와 코드의 "수동" 계산이 동일한 PC 수에 대해 서로 다른 것을 발견했습니다. 이유에 대한 단서가 있습니까? "수동" 계산이 "잘못"되었거나 PCA가 수행하는 방식과 다르게 수행되거나 다른 작업이 진행 중입니다. 동일한 수의 PC에 대한 T² 결과가 PCA 플랫폼 및 "수동" 계산과 다르다는 것을 보여주는 다른 데이터 테이블 Iris_mod_different_T2.jmp도 첨부합니다. 추후 공지가 있을 때까지 PCA 플랫폼의 T² 공식을 선호합니다. "수동" 계산에 대해 다른 점과 값이 동일하지 않은 이유가 있는지 알고 싶습니다.
다시 한 번 감사드립니다!,
DS
추신 관심 있는 사람이 있다면 내가 작업한 코드가 아래에 있습니다. 사용자가 PCA를 수행할 열을 선택한 다음 DModX 및 T² 수식을 추출하는 데 사용할 PC 수를 동적으로 선택할 수 있는 대화형 코드입니다. 다른 분석을 원할 경우 선택한 PC 수를 데이터 테이블에 저장할 수도 있습니다.
큰 감사 @jthi Plot Col Box()에 대한 <
Names Default To Here( 1 );
//Clear Symbols();
//Function to choose the data table to model
choose_data_table = Function( {},
list = {};
For( i = 1, i <= N Table(), i++,
list[i] = Data Table( i ) << get name
);
win = New Window( "Select a data table",
<<MODAL></MODAL> PCRptOutlier << Save DModX( N_PCs );
If( savePCs == 1,
PCRptOutlier << Save Principal Components( N_PCs )
);
PCRptOutlier<<CLOSEWINDOW> 0, Try( choose_data_table, Throw( "No data found" ) )
);
ModMetrics;
);
Firstwin;</CLOSEWINDOW>Re: JSL을 사용하여 PCA 플랫폼에서 T²를 저장하는 방법(또는 계산 방법)T 제곱을 계산하는 방법은 첨부된 스크립트를 참조하십시오. 이러한 플랫폼의 JMP 개발자가 제공했습니다.
Re: JSL을 사용하여 PCA 플랫폼에서 T²를 저장하는 방법(또는 계산 방법)T 제곱을 저장하는 기능은 컨트롤 차트 플랫폼에서만 사용할 수 있으므로 현재로서는 첫 번째 접근 방식이 불가능합니다.
여기 JMP 커뮤니티에서 위시리스트를 검색하여 이미 요청한 사람이 있는지 확인할 수 있습니다. 그렇다면 투표하세요(쿠도). 그렇지 않은 경우 새 요청을 입력하십시오.