我有一个笛卡尔点数组(第 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));
使用 trig 身份可以将其重新设计为
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
一组二维值的平均值是另一个二维值,即它是一个点,而不是一条线。我相信这个点也被称为质心。
在这种情况下尚不完全清楚标准偏差是什么,但我认为根据与平均值的距离来定义它是有意义的。