PCA分析後、可変数の固有ベクトルテーブルを単一のデータテーブルに保存できないこんにちは、
私は、PCA分析を実行し、結果の固有ベクトルを保存するスクリプトを作成しようとしています。
PCAには、いくつかの独立したPCA分析をもたらす「by」が含まれます。その数は、「by」オプションに入力するために使用される列(specimen_material_type)のカテゴリーの数に依存します
このスクリプトは1つの大きな例外を除いてうまく機能します。「結合されたデータテーブルの作成」機能を使用しても、最初のカテゴリの固有ベクトルテーブルのみがデータテーブルに保存されます。
分析とは異なるため、「by:標本_材料タイプ」によって提供される任意の数のカテゴリに対応できるようにスクリプトを微調整したいと思います。
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;任意の提案をいただければ幸いです。
どうもありがとう
セバスチャン
Re:PCA分析後、可変数の固有ベクトルテーブルを単一のデータテーブルに保存できないあなたはとても近いようです。以下のコードはあなたのために働きますか?
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」グループのレベルの数を気にする必要はありません(上記の場合は2つだけ)。
Re:PCA分析後、可変数の固有ベクトルテーブルを単一のデータテーブルに保存できないこんにちはイアン、
指導ありがとうございます。あなたのコードはうまく機能しますが、何らかの理由で、Yに割り当てられた少数の変数でのみ機能します。変数の数を増やすと、ある時点で、さまざまな固有ベクトルテーブルをグループ化できなくなります。
その理由は、65対64のベクトルで変数の数を増やし始めると、「By」カテゴリごとに報告される固有ベクトルの数がわずかに異なるためだと思います(概念実証表には2つのカテゴリしかない)。変数の数を徐々に減らしていくと、ベクトルの数が同じになる点があり、その点で、固有ベクトルテーブルは期待どおりに結合されます。
報告されているベクターの数を制御する方法はありますか?すべての固有ベクトルを報告する必要はなく、最大3つまたは4つまでです。
または、各固有ベクトルテーブルを個別に保存し、後でそれらを連結する方法を見つけることもできます。ただし、名前と番号が異なるため、「By」カテゴリごとにループする方法がわかりません。
任意の提案をいただければ幸いです。
セバスチャン