<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Kaiser 的 MSA(也稱為 KMO)是一種經常與反圖像相關矩陣一起使用的指標,用於判斷一組變量是否適合進行因子分析。 我可以輕鬆獲得這些 uisng SAS(proc 因素)。 任何人都知道如何在 JMP 中獲得這些(我使用的是 JMP Pro 版本 9)?我看到 2010 年初有一篇關於 KMO 的帖子,答案是通過將偏相關/逆相關矩陣導出到 Excel 來逐字計算這些。 我希望現在,JMP 或 soem 用戶已經提出了一個腳本或一些自動執行的選項。 謝謝。
我使用的是 2012 年發布的相同 MSA 腳本。 它在早期版本的 JMP 上運行良好。 但是,在 JMP Pro 15.1.0 上,MSA 計算似乎已關閉。 你能幫忙嗎?
該代碼就像一個魅力! 我在幾個數據集上檢查了它,結果與我運行 SAS 得到的結果相同。 非常感謝。
JMP 人員(如果您正在收聽)- 請將此代碼/jsl 合併到下一版本的 JMP 中,作為多變量相關平台的紅色三角形選項。
查看此代碼是否有幫助。 我只能根據社會經濟樣本數據對其進行檢查,結果與 SAS 在線文檔中顯示的 SAS 結果相同。 使用風險自負,並且一定要在您擁有 MSA 結果的盡可能多的數據集上進行測試。
/* Next line if want to open a specific JMP table */
//dt = Open( "$SAMPLE_DATA/Socioeconomic.jmp" );
/* Next line if want to have user pick a JMP data table */
//dt = Open();
/* No Open statement if want to run against the current data table */
cd = Column Dialog( Col ID = ColList( "Select Columns" ) );
names = cd["Col ID"];
nsel = N Items( names );
mv = Multivariate(
Y( Eval( names ) ),
Estimation Method( "Row-wise" ),
Scatterplot Matrix( Density Ellipses( 1 ), Shaded Ellipses( 0 ), Ellipse Color( 3 ) ),
Partial Correlations( 1 )
);
rmv = Report( mv );
dtcorr = rmv["Correlations"][Matrix Box( 1 )] << make into data table;
dtpart = rmv["Partial Corr"][Matrix Box( 1 )] << make into data table;
stkcorr = dtcorr << Stack(
columns( Eval( names ) ),
Source Label Column( "Label" ),
Stacked Data Column( "Data" )
);
stkpart = dtpart << Stack(
columns( Eval( names ) ),
Source Label Column( "Label" ),
Stacked Data Column( "Data" )
);
Close( dtcorr, nosave );
Close( dtpart, nosave );
stkcorr << New Column( "DataSqr", formula( Data ^ 2 ) );
stkpart << New Column( "DataSqr", formula( Data ^ 2 ) );
sumsqrcorr = Col Sum( (stkcorr:"DataSqr") ) - nsel;
sumsqrpart = Col Sum( (stkpart:"DataSqr") );
MSA = sumsqrcorr / (sumsqrcorr + sumsqrpart);
//Show( MSA );
Summarize( bycorr = by( stkcorr:"Row" ), sumsqrcorrby = Sum( stkcorr:"DataSqr" ) );
Summarize( bypart = by( stkpart:"Row" ), sumsqrpartby = Sum( stkpart:"DataSqr" ) );
Close( stkcorr, nosave );
Close( stkpart, nosave );
//show(sumsqrcorrby, sumsqrpartby);
//show(bycorr, bypart);
sumsqrcorrby = sumsqrcorrby - 1;
//show(sumsqrcorrby);
MSAvar = {};
For( i = 1, i <= nsel, i++,
MSAvar = sumsqrcorrby / (sumsqrcorrby + sumsqrpartby);
//Show( bycorr, MSAvar );
);
sr = New Window( "Summary Results",
V List Box(
Table Box( String Col Box( "Variable", bycorr ), Number Col Box( "MSA", MSAvar ) ),
Text Box( "Overall MSA = " || Char( round(MSA, 5) ) )
)
);