次のようなデカルト ポイントの配列があります (列 1 は x 値、列 2 は y 値)。
308 522
307 523
307 523
307 523
307 523
307 523
306 523
ポイントの標準偏差を取得するにはどうすればよいですか? それは、直線である平均と比較されます。ポイントはその直線ではないため、標準偏差は、線分が直線からどれだけ波打っているか、または「オフベース」であるかを表します。
本当に助かります。
次のようなデカルト ポイントの配列があります (列 1 は x 値、列 2 は y 値)。
308 522
307 523
307 523
307 523
307 523
307 523
306 523
ポイントの標準偏差を取得するにはどうすればよいですか? それは、直線である平均と比較されます。ポイントはその直線ではないため、標準偏差は、線分が直線からどれだけ波打っているか、または「オフベース」であるかを表します。
本当に助かります。
データが直線を表していることが確実な場合xy
は、次のようにします。
最適な直線を見つけることは、過剰決定された線形システムAx = b
を最小二乗法で解くことと同じです。ここで、
xy = [
308 522
307 523
307 523
307 523
307 523
307 523
306 523];
x_vals = xy(:,1);
y_vals = xy(:,2);
A = [x_vals ones(size(x_vals))];
b = y_vals;
これは、次のように Matlab で実行できます。
sol = A\b;
m = sol(1);
c = sol(2);
m
ここで行ったのは、との値を見つけてc
、方程式によって記述される線が、y = mx+c
与えられたデータに最も適合するようにすることです。この最適な線は完全ではないため、y データに関してエラーがあります。
errs = (m*x_vals + c) - y_vals;
これらの誤差の標準偏差は、次のように計算できます。
>> std(errs)
ans =
0.2440
線に垂直な距離 (ユークリッド距離) を使用する場合は、幾何学的要素を含める必要があります。
errs = (m*x_vals + c) - y;
errs_perpendicular = errs * cos(atan(m));
トリガー ID を使用して、これを作り直すことができます
errs_perpendicular = errs * 1/sqrt(1+m*m);
そしてもちろん、
>> std(errs_perpendicular)
ans =
0.2182
直線がデータに適合するかどうか確信が持てない場合、および/またはxy
データが本質的に共通の中心の周りの点群を表す場合は、次のようにします。
重心を求める ( COM
):
COM = mean(xy);
すべての点から までの距離COM
:
dists = sqrt(sum(bsxfun(@minus, COM, xy).^2,2));
およびその標準偏差:
>> std(dists)
ans =
0.5059
2次元値のセットの平均は、別の2次元値です。つまり、線ではなく点です。この点は重心としても知られていると思います。
この場合の標準偏差は完全には明らかではありませんが、平均からの距離で定義するのは理にかなっていると思います。