<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Kaiser 的 MSA(也称为 KMO)是一种经常与反图像相关矩阵一起使用的度量,用于判断一组变量对因子分析的适用性。 我可以轻松获得这些 uisng SAS(过程因素)。 任何人都知道如何在 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) ) )
)
);