Il seguente codice JSL può essere utilizzato per visualizzare una matrice di dispersione dopo il clustering.
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 )}
)
)
);
Ho bisogno di aiuto con le seguenti due domande:
(1) Come posso impostare l'ellisse α su 0,4 nel codice JSL?

(2) Vorrei registrare i punti inclusi nell'ellisse con un α di 0,4, dove i punti all'interno dell'ellisse rossa sono etichettati come 1, quelli all'interno dell'ellisse verde sono etichettati come -1 e i punti all'esterno di entrambe le ellissi sono etichettati come 0. Questo è simile al salvataggio dei cluster in una tabella, ma invece, voglio registrare i punti inclusi nelle ellissi. Come posso aggiungere questa funzionalità al codice JSL?
Sembra che la piattaforma di miscele normali potrebbe usare la sua matrice di scatterplot, che non è così facile da accedere o manipolare. Potresti salvare i cluster nella tua tabella e poi usare Scatterplot Matrix per creare il grafico
Scatterplot Matrix(
Y(:height, :weight),
Group(:Cluster),
Matrix Format("Lower Triangular"),
Density Ellipses(1),
Ellipses Coverage(0.4),
Group By(:Cluster)
);
ma questo non ti permetterà di ottenere i punti. Per ottenere questo puoi usare la piattaforma Fit Y by X (usa cluster come colonna By).

Questo è un posto in cui so che puoi selezionare i punti all'interno delle ellissi

Poiché non sono sicuro di cosa stai cercando di fare (stai solo cercando di selezionare i punti o hai anche una sorta di report), di seguito è riportato uno script che fa molte cose
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;

