Der folgende JSL-Code kann verwendet werden, um nach dem Clustering eine ScatterPlot-Matrix anzuzeigen.
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 )}
)
)
);
Ich benötige Unterstützung bei folgenden zwei Fragen:
(1) Wie kann ich die Ellipse α im JSL-Code auf 0,4 setzen?

(2) Ich möchte die in der Ellipse enthaltenen Punkte mit einem α von 0,4 aufzeichnen, wobei die Punkte innerhalb der roten Ellipse mit 1, die innerhalb der grünen Ellipse mit -1 und die Punkte außerhalb beider Ellipsen mit 0 gekennzeichnet sind. Dies ähnelt dem Speichern von Clustern in einer Tabelle, aber stattdessen möchte ich die in den Ellipsen enthaltenen Punkte aufzeichnen. Wie kann ich diese Funktionalität zum JSL-Code hinzufügen?
Es scheint, als ob die Plattform für normale Mischungen ihre eigene Streudiagrammmatrix verwendet, die nicht so einfach zugänglich oder manipulierbar ist. Sie könnten die Cluster in Ihrer Tabelle speichern und dann die Streudiagrammmatrix verwenden, um das Diagramm zu erstellen.
Scatterplot Matrix(
Y(:height, :weight),
Group(:Cluster),
Matrix Format("Lower Triangular"),
Density Ellipses(1),
Ellipses Coverage(0.4),
Group By(:Cluster)
);
aber damit erhalten Sie keine Punkte. Um diese zu erhalten, können Sie die Plattform „Fit Y by X“ verwenden (Cluster als Spalte „By“ verwenden).

Dies ist ein Ort, an dem ich weiß, dass Sie die Punkte innerhalb der Ellipsen auswählen können

Da ich nicht wirklich sicher bin, was Sie versuchen (versuchen Sie nur, die Punkte auszuwählen oder haben Sie auch eine Art Bericht), finden Sie unten ein Skript, das viele Dinge tut
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;

