다음 JSL 코드는 클러스터링 후 ScatterPlot 행렬을 표시하는 데 사용할 수 있습니다.
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코드에서 Ellipse α를 0.4로 설정하려면 어떻게 해야 하나요?

(2) α가 0.4인 Ellipse에 포함된 점을 기록하고 싶습니다. 여기서 빨간색 Ellipse 내부의 점은 1로 표시되고, 녹색 Ellipse 내부의 점은 -1로 표시되고, 두 Ellipse 외부의 점은 0으로 표시됩니다. 이는 Table에 클러스터를 저장하는 것과 비슷하지만, 대신 Ellipse에 포함된 점을 기록하고 싶습니다. 이 기능을 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 플랫폼을 사용할 수 있습니다(클러스터는 열로 사용).

여기서는 타원 내부의 점을 선택할 수 있는 곳이 있습니다.

당신이 무엇을 하려고 하는지 정확히 알 수 없으므로(단지 포인트를 선택하려고 하는지 아니면 어떤 종류의 보고서도 가지고 있는지) 아래는 많은 작업을 수행하는 스크립트입니다.
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;

