你好,
我一直在尝试编写一个脚本来运行PCA分析并保存生成的特征向量。
PCA包含一个“ by”,可以进行几个独立的PCA分析。其数量取决于用于填充“ by”选项的列(specimen_material_type)中的类别数量
该脚本可以很好地运行,但有一个主要例外:尽管使用了“合并组合数据表”功能,但只有第一类的特征向量表才保存到数据表中。
我想对脚本进行调整,以使其可以容纳“ by:sample_material-type”提供的任意数量的类别,因为它与分析有所不同。
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;任何建议将不胜感激。
非常感谢
塞巴斯蒂安
看起来你很亲近。以下代码对您有用吗?
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”组中的级别数(在上述情况下,仅为两个)。
嗨,伊恩,
非常感谢您的指导。您的代码运行良好,但是由于某种原因,如果仅将分配给Y的少量变量使用,则由于某些原因。如果我增加变量的数量,则有时无法将各种特征向量表分组。
我怀疑原因可能是当我开始使用65 vs 64矢量增加变量的数量时,每个“按”类别报告的特征向量的数量略有不同(概念证明表中只有2个类别)。随着变量数量的逐渐减少,在某个点上向量的数量变得相同,在这一点上,特征向量表将按预期方式组合在一起。
有没有办法控制正在报告的载体数量?我不需要报告所有特征向量,最多只需报告3或4。
或者,找到一种方法来分别保存每个特征向量表,然后再将它们串联起来。但是,我不确定如何遍历每个“按”类别,因为它们的名称和数量会有所不同。
任何建议,将不胜感激。
塞巴斯蒂安