こんにちは:
JMPに相関行列(または共分散行列)を入力して共通因子分析(または主成分分析)を行う方法を知りたいです。ドキュメントやどこにも例が見つかりません。
JMP で誰かが以前にそれをやったはずです。
解決策を投稿していただけますか?
ありがとう
ナラヤナン
約20ヶ月前に投稿された質問への返信が、こちらで見当たりません。私も同じ疑問を抱いているのですが、どなたか回答をいただけませんか?「独自の」相関行列と共分散行列を単純な主成分分析に入力したいのですが、方法が見つかりません。
ありがとう。
マイケル
こんにちは、 @MaxiumumFactorsと@AN1 、
JMPのスクリプトインデックスを見て、独自の行列を入力する方法があるかどうか確認してみましたが、JMPではそれができず、生成された行列からしか操作できないようです。もしこれがご希望でしたら、ウィッシュリストへの投稿をご検討ください。
ありがとう、
ベン
JMPジャパンのシニアテスター、小野裕介です。英語が下手で申し訳ありません。
JMP Pro をお持ちの場合、構造方程式モデルプラットフォームは共分散行列 (または相関行列) と平均ベクトルを入力としてサポートし、確認因子分析 (CFA) やその他の SEM を適合できます。
JMPスクリプト言語(JSL)の自分の関数は、対称行列の固有値分解を行うことができます。主成分分析(PCA)も固有値分解によって実行できるため、 自分の関数をPCAに使用できます。
最尤推定による因子分析はより複雑で、最大尤度推定アルゴリズムをプログラムするのは困難です。そこで、複雑ではありますが、以下の手法を推奨します。
コレスキー関数を用いると、共分散行列と平均ベクトルがあなたのデータと全く同じダミーデータをシミュレートできます(共分散行列が半正定値行列の場合)。共分散行列がそれらの 、平均ベクトルが平均の場合、以下のようにデータを作成できます。
z = J(n, NCol(cov), Random Normal());
For(i = 1, i <= NCol(z), i++,
z[0,i] = (z[0,i] - Mean(z[0,i]))
);
c = Covariance(z);
invrc = Inv(Cholesky(c))`;
rcov = Cholesky(cov);
z = J(n,1,1)*mean` + z * invrc * rcov`;
このダミーデータの結果には意味がないものがあることに注意してください。例えば、PCAのスコアプロットは乱数シードに依存します。共分散行列と平均ベクトルに関連する結果のみが意味を持ちます。例えば、最大値、最小値、スピアマン/ケンドール相関は、平均値と共分散以外の情報に依存するため、意味がありません。
以下のコードは一例です。JSLに慣れていない方にとって、この「ダミーデータメソッド」を理解してプログラムするのは難しいでしょう。また、私の英語の説明も分かりにくいです。また、この計算によって、必要な平均ベクトルと共分散行列を持つダミーデータが生成される理由についても、数学的な説明を省略しています。ご質問があれば、ぜひご返信ください。
Names Default To Here(1);
/////////// This is a sample data //////////////////////////////////////
New Table( "Test",
New Column( "Mean", Values( [100, 50, 30, 20] )),
New Column( "Stddev", Values( [3, 4, 2.5, 1.8] )),
New Column( "X1", Values( [1, 0.8, 0.6, 0.4])),
New Column( "X2", Values( [0.8, 1, 0.5, 0.2] )),
New Column( "X3", Values( [0.6, 0.5, 1, 0.2] )),
New Column( "X4", Values( [0.4, 0.2, 0.2, 1] ))
);
///////////////////////////// From Here ///////////////////////////////
mean colname = "Mean"; /* column name for means */
stddev colname = "Stddev"; /* column name for standard deviations */
corr colnames = {"X1", "X2", "X3", "X4"};
n = 100; /* Specify the sample size */
dt = Current Data Table();
mean = Column(dt, mean colname) << Get As Matrix; /* Read your mean vector */
sd = Column(dt, stddev colname) << Get As Matrix; /* Read your standard deviations */
r = dt <
<GET as="" matrix=""></GET>
<DIV>JMPのユニークな点の一つは、そのインタラクティブ性です。例えば、PCAプラットフォームのスコアプロットでは外れ値を見つけることができます。平均値、標準偏差、相関係数といった要約データから分析を始めると、データに関するいくつかの情報が失われてしまいます。私自身も、教科書で分析を行う際に多少の不便を感じています。しかし、最近では要約データではなく、サンプルの生データセットを提供する教科書が増えているように思います。もし、PCAや因子分析プラットフォームでも、JMP ProのSEMプラットフォームのような要約データ入力をサポートして欲しいというご要望がありましたら、ぜひウィッシュリストにご記入ください( <A href="https://community.jmp.com/t5/user/viewprofilepage/user-id/51054" target="_blank">@Ben_BarrInghさん</A>のコメント)。</DIV>