
DavidK Chiesto di disegnando le ellissi attorno ai punti dati. Ho lottato per questo tempo fa e questo è un riassunto di ciò che ho risolto con l'aiuto di persone che sanno davvero cosa stanno facendo. Tutti gli errori qui sono miei, commenti e correzioni ben accetti!Questa immagine è l'output di Bivariate, prodotto alla fine dello script. L'obiettivo dello script è calcolare i parametri per disegnare l'ellisse verde. Lo script utilizza le funzioni integrate di JMP Correlation, Mean, StdDev, Eigen per eseguire il lavoro. Eigen, in particolare, restituisce i parametri che descrivono l'ellisse. Questi parametri vengono trasformati in una matrice di trasformazione 3x3 2D che viene quindi utilizzata per trasformare i punti su un cerchio unitario intorno a 0,0 nell'ellisse desiderata.
x = Open( "$sample_data\big class.jmp" );
H = x:height << get values; // column vectors
W = x:weight << get values;
data = H || W; // 2 columns by 40 rows
corr = Correlation( data );
mean = Mean( H ) || Mean( W );
stddev = Std Dev( H ) || Std Dev( W );
cov = Diag( stddev ) * corr * Diag( stddev );
{D, E} = Eigen( cov );
// sort columns of E. Don't know why; it controls which ellipse axis goes with the bigger vector, I think.
// you can see the gap in the ellipse change position if you use [1,2] (or just comment the next 3 lines)
jj = [2,1];
E = E[ 0, jj ];
D = D[ jj ];
// there seems to be a lot of opinions on how to do the confidence limit...
NormalContour = sqrt(ChiSquare Quantile( 0.95, 2 ));
T = NormalContour * E * Diag( Sqrt( D ) );
m = (T` |/ mean) || [0, 0, 1]; // transform matrix
unitCircle = J(100,3); // 2x2 transform uses 3x3 matrix for homogeneous coords
For( i = 1, i <= 100, i++,
unitCircle[i, 1] = Sin( (i - 1) * 2 * Pi() / 100 ); // divide by 99 to close the gap
unitCircle[i, 2] = Cos( (i - 1) * 2 * Pi() / 100 );
unitCircle[i, 3] = 1;
);
ellipse = unitCircle * m; // draw the ellipse as a unit circle transformed by m
New Window( "Ellipse from Eigen Values and Vectors",
Graph Box(xscale(50,75),yscale(40,180),
Marker( Marker State( 12 ), H, W ),
line( ellipse[0,1], ellipse[0,2])
)
);
// for comparison...
x<<BIVARIATE></BIVARIATE>

Ecco l'ellisse disegnata "manualmente". La matrice di trasformazione, m, potrebbe anche essere utilizzata (con il suo inverso) per convertire i punti dati in un cerchio unitario; la distanza da 0,0 sarebbe minore di uno per i punti all'interno dell'ellisse. Si noti che Bivariate fa già tutto il lavoro, inclusa la selezione dei punti all'interno o all'esterno dell'ellisse.

Se utilizzi la matrice di trasformazione con Scene3D di JMP, potresti dover trasporre "m" per soddisfare le aspettative di Scene3D per una matrice di trasformazione.
modifica 30 settembre 2017: riparazione della formattazione