以下 JSL 代码可用于显示聚类后的散点图矩阵。
dt = Open("$SAMPLE_DATA/Big Class.jmp");
Normal Mixtures(
Y( :height, :weight ),
{Mixtures Tolerance( 0.00000001 ), Mixtures MaxIter( 300 ),
Mixtures N Starts( 30 ), Outlier Cluster( 0 ), Diagonal Variance( 0 ),
Number of Clusters( 2 ), Go( Scatterplot Matrix( Ellipse Alpha( 0.1 ) ) )},
SendToReport(
Dispatch( {"Normal Mixtures NCluster=2"}, "Correlations for Normal Mixtures",
OutlineBox,
{Close( 0 )}
),
Dispatch( {"Normal Mixtures NCluster=2", "Scatterplot Matrix"}, "101",
ScaleBox,
{Min( 59.68 ), Max( 179.498666666667 ), Inc( 20 ), Minor Ticks( 0 )}
)
)
);
我需要帮助解决以下两个问题:
(1)如何在 JSL 代码中将椭圆 α 设置为 0.4?

(2) 我想记录 α 为 0.4 的椭圆中包含的点,其中红色椭圆内的点标记为 1,绿色椭圆内的点标记为 -1,两个椭圆外的点标记为 0。这类似于将簇保存在表中,但我想记录椭圆中包含的点。如何将此功能添加到 JSL 代码中?
似乎普通混合平台可能使用自己的散点图矩阵,而这种矩阵不太容易访问或操作。您可以将聚类保存到表中,然后使用散点图矩阵创建图
Scatterplot Matrix(
Y(:height, :weight),
Group(:Cluster),
Matrix Format("Lower Triangular"),
Density Ellipses(1),
Ellipses Coverage(0.4),
Group By(:Cluster)
);
但这不会让你得到分数。要得到这个,你可以使用 Fit Y by X 平台(使用集群作为 By 列)。

我知道你可以在这里选择椭圆内的点

由于我不太确定您要做什么(您只是想选择要点还是也有某种报告),下面的脚本可以做很多事情
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
nw = New Window("",
vlb = V List Box(
nm = dt << Normal Mixtures(
Y(:height, :weight),
{Mixtures Tolerance(0.00000001), Mixtures MaxIter(300), Mixtures N Starts(30),
Outlier Cluster(0), Diagonal Variance(0), Number of Clusters(2), Go()}
)
)
);
cols = Associative Array(dt << Get Column Names("String"));
nm << Save Clusters;
cluster_col = Associative Array(dt << Get Column Names("String"));
cluster_col << Remove(cols);
cluster_col = (cluster_col << get keys)[1];
vlb << Append(
sm = dt << Scatterplot Matrix(
Y(:height, :weight),
Group(:Cluster),
Matrix Format("Lower Triangular"),
Shaded Ellipses(1),
Ellipses Coverage(0.4),
Group By(Eval(cluster_col))
);
);
biv = dt << Bivariate(Y(:weight), X(:height), By(:Cluster), Invisible);
biv << Density Ellipse(0.4, {Select Points Inside});
new_col = dt << New Column("Ellipse", Numeric, Nominal, Formula(
If(Selected() & :Cluster == 1,
1
, Selected() & :Cluster == 2,
-1
,
0
)
));
dt << run formulas;
new_col << Delete Formula;
dt << clear select;
// Just for visualization purposes
gb = dt << Graph Builder(
Size(653, 491),
Show Control Panel(0),
Variables(
X(:height),
Y(:weight),
Overlay(:Cluster, Overlay Encoding("Style")),
Color(:Ellipse)
),
Elements(Points(X, Y, Legend(3)))
);
For(i = 1, i <= 2, i++,
ls = Report(biv[i])[FrameBox(1)] << Find Seg(LineSeg(1));
xs = ls << Get X Values;
ys = ls << Get y Values;
Eval(EvalExpr(
Report(gb)[FrameBox(1)] << Add Graphics Script(
Line(Expr(xs), Expr(ys));
)
));
);
//biv << close window;

