JavaScriptで共分散誤差楕円を描画するためにこのメソッドを実装しようとしています。
errorEllipse = function(stdDevX, stdDevY, cor, center, level) {
var errEllipse,
cov = cor * stdDevX * stdDevY,
covmat = [
[stdDevX * stdDevX, cov],
[cov, stdDevY * stdDevY]
],
eig = numeric.eig(covmat),
scale = Math.sqrt(jStat.chisquare.inv(level, 2)),
maxLambdaI = indexOfMax(eig.lambda.x),
minLambdaI = indexOfMin(eig.lambda.x),
rx = stdDevX > stdDevY ? Math.sqrt(eig.lambda.x[maxLambdaI]) * scale : Math.sqrt(eig.lambda.x[minLambdaI]) * scale,
ry = stdDevY > stdDevX ? Math.sqrt(eig.lambda.x[maxLambdaI]) * scale : Math.sqrt(eig.lambda.x[minLambdaI]) * scale,
v1 = eig.E.x[maxLambdaI],
theta = Math.atan2(v1[1], v1[0]) * 180 / Math.PI;
if (theta < 0) {
theta += 360;
}
//make the ellipse object
errEllipse = {
rx: rx,
ry: ry,
cx: center.x,
cy: center.y,
orient: -theta
};
return errEllipse;
};
現在の試行の結果で最も明白な問題は、楕円がデータに適合していないことです。どこが間違っているのかを正確に見つけるのは困難でした。
誰でも私に見せてもらえますか:1.)楕円の半径と角度を取得またはプロットする方法の何が問題になっていますか。または 2.) javascript でエラー/信頼楕円を描画する例。
固有ベクトルと値にはライブラリnumericjs、プロットにはjstat、d3を使用しています。
これは、現在のコードを含むplnkrです。
errorEllipse 関数は「script.js」ファイルにあります。testData.js を編集することでテストデータを変更できます。
アップデート:
問題がある場合に備えて、d3 で楕円をプロットするためのコードを追加しています。
svg.append('ellipse')
.attr('class', 'q-ellipse-99')
.attr('rx', Math.abs(xScale(xExtent[0] + ellipse99.rx) - xScale(xExtent[0])))
.attr('ry', Math.abs(yScale(yExtent[0] + ellipse99.ry) - yScale(yExtent[0])))
.attr('transform', 'translate(' + xScale(ellipse99.cx) + ',' + yScale(ellipse99.cy) + ')rotate(' + ellipse99.orient + ')');
xExtent 配列と yExtent 配列の両方が、データに対して d3.extent() を呼び出すと返されます。