JSL を使用して PCA プラットフォームから T² を保存する方法 (または計算方法)こんにちは、みんな、
<
<< Save T Square の呼び出しが多変量管理図で機能することはわかっていますが、PCA または多変量プラットフォームでは機能しないようです。 PCA プラットフォームを使用して T² 式を生成する必要があるのは、PCA プラットフォームでは計算に使用する PC の数を実際に指定できるためです。これは、マハラノビス距離の 2 乗などの通常の T² 統計ではありません。 レポート ウィンドウに送信された呼び出し << T²(1, Save T Square) も機能しません。
1. スクリプトを使用して、使用する PC の数を指定し、T² 式をデータ テーブルに保存することは可能ですか? これまでのところ、これに対するオプションは見つかりませんでした。
2. そうでない場合、どのように計算するのが最適ですか? 計算が定義されていることは知っていますここですが、赤いホットボタンを使用してデータテーブルに保存される数式は少し異なるようです。
保存された式 (手動保存) によると、T² = Vec Quadratic(S, X)= Diag(X*S*X`)、ここで、X はデータの標準化ベクトル、X` はその転置、S は逆共分散です。マトリックス。 これは標準的な T²、マハラノビス距離の 2 乗です。
ただし、によれば、ドキュメンテーション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 が次善の策です。 それでも、数式を含む新しい列を作成するために数式を復元しようとするのは、少し大変なように思えます。
Iris.jmp ファイルの変更されたデータ テーブルを添付します。このテーブルには、多変量プラットフォームから保存された T² 式 (および T² = Mahal.Dist.² のしくみ) と、式がすべてを使用して決定される PCA プラットフォームからの T² が表示されます。 4 台の PC、その後は PC のみになります。 式を見るとわかるように、Vec Quadratic(S,X) の S 行列は、2 台の PC と 4 台の PC を使用して計算された 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 ),
Number of Components 入力の「N」を変更し、Save T Square を追加すると、定義した 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_Difference_T2.jmp も添付します。 追って通知があるまで、私は PCA プラットフォームの T² 式を使用することを好みます。 「手動」計算に何か違いがあるのか、また値が同じではない理由を知りたいです。
再度、感謝します!、
DS
PS 興味のある人は、私が取り組んでいるコードを以下に示します。 これは、ユーザーが 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 コミュニティのウィッシュ リストを検索して、誰かがすでにリクエストしているかどうかを確認してください。 もしそうなら、それに投票してください(工藤)。 そうでない場合は、新しいリクエストを入力してください。