PCA 분석 후 변수 번호 고유 벡터 테이블을 단일 데이터 테이블에 저장할 수 없습니다.여보세요,
PCA 분석을 실행하고 결과 고유 벡터를 저장하는 스크립트를 작성하려고했습니다.
PCA에는 'by'가 포함되어있어 여러 독립적 인 PCA 분석이 가능합니다. 'by'옵션을 채우는 데 사용되는 열 (specimen_material_type)의 범주 수에 따라 달라지는 수
이 스크립트는 한 가지 예외를 제외하고는 잘 작동합니다. "결합 데이터 테이블 만들기"기능을 사용하더라도 첫 번째 범주의 고유 벡터 테이블 만 데이터 테이블에 저장됩니다.
'by : specimen_material-type'에서 제공하는 다양한 범주를 분석 할 수 있도록 스크립트를 조정하고 싶습니다.
dt = Data Table( "split by symbol" );
colList = dt << Get Column Names( numeric );
obj = dt << Principal Components(
Y( Eval( colList ) ),
Estimation Method( "Wide" ),
"on Correlations",
by( :specimen_material_type ),
Summary Plots( Label variables( 0 ) ),
Eigenvectors( 1 ),
Arrow Lines( 0 ),
SendToReport(
Dispatch(
{"Summary Plots"},
"PCA Summary Plots",
FrameBox,
{Row Legend(
test_article,
Color( 1 ),
Color Theme( "JMP Default" ),
Marker( 0 ),
Marker Theme( "" ),
Continuous Scale( 0 ),
Reverse Scale( 0 ),
Excluded Rows( 0 )
)}
)
)
);
obj << Save Principal Components( 3 );
Report( obj[1] )[Outline Box( "Eigenvectors" )][Table Box( 1 )] << Make Combined Data Table;어떤 제안이라도 대단히 감사하겠습니다.
고마워
세바스티앙
다시 : PCA 분석 후 변수 번호 Eigenvector 테이블을 단일 데이터 테이블에 저장할 수 없습니다.당신이 매우 가까운 것 같습니다. 아래 코드가 효과가 있습니까?
NamesDefaultToHere(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
pca = dt << Principal Components(Y( :height, :weight ), Eigenvectors( 1 ), By(:sex));
dtev = Report(pca[1])[OutlineBox("Eigenvectors")][TableBox(1)] << makeCombinedDataTable;
dtev << setName("Eigenvexctors with By Group");
이미 알고 있듯이 'MakeCombinedDataTable'은 'By'그룹의 레벨 수 (위의 경우 두 개)에 신경 쓰지 않아야합니다.
다시 : PCA 분석 후 변수 번호 Eigenvector 테이블을 단일 데이터 테이블에 저장할 수 없습니다.안녕 이안,
지도 해 주셔서 감사합니다. 코드는 잘 작동하지만 어떤 이유로 Y에 할당 된 작은 변수로만 작동하는 경우 어떤 이유로 든 가능합니다. 변수 수를 늘리면 특정 시점에서 다양한 고유 벡터 테이블을 그룹화 할 수 없게됩니다.
그 이유는 65 대 64 벡터로 변수 수를 늘리기 시작할 때 각 'By'범주에 대해보고 된 고유 벡터의 수가 약간 달라지기 때문일 수 있습니다 (개념 증명 테이블에는 2 개의 범주 만 있음). 변수의 수를 점진적으로 감소시키면서, 벡터의 수가 어느 시점에서 동일하게되는지, 고유 벡터 테이블은 예상대로 결합된다.
보고되는 벡터 수를 제어하는 방법이 있습니까? 모든 고유 벡터를보고 할 필요는 없습니다 (최대 3 또는 4).
또는 각 고유 벡터 테이블을 개별적으로 저장하고 나중에 연결하는 방법을 찾는 것도 효과적입니다. 그러나 이름과 번호가 다양하므로 각 'By'범주를 반복하는 방법을 잘 모르겠습니다.
모든 제안을 부탁드립니다.
세바스티앙