有误差的线性曲线拟合

Linear curve fitting with errors

我正在寻找一种在 Javascript 中执行线性曲线拟合的方法。我找到了几个库,但它们不会传播错误。我的意思是,我有数据和相关的测量误差,例如:

x = [ 1.0 +/- 0.1, 2.0 +/- 0.1, 3.1 +/- 0.2, 4.0 +/- 0.2 ]
y = [ 2.1 +/- 0.2, 4.0 +/- 0.1, 5.8 +/- 0.4, 8.0 +/- 0.1 ]

我的符号 a +/- b 表示 { value : a, error : b }

我想将其放入 y = mx + b,并找到 mb 及其传播的错误。我知道我可以实现的最小二乘法算法,但它只会在 y 变量上出现错误,而且我在这两个方面都有明显的错误。

我也无法在 Javascript 中找到可以执行此操作的库;但如果有其他语言的开源库,我可以检查它以了解如何在 JS 中实现它。

Origin 或 plotly 之类的程序可以实现这一点,但我不知道如何实现。此示例数据集的结果是:

m = 1.93 +/- 0.11
b = 0.11 +/- 0.30

看来least squares(LS)方法确实是个不错的方向。 给定一个 x 和 y 列表,最小化 m 和 b 的最小二乘 return 值 $$\sum_{i} (m*x_{i}+b -y_{i})^{2} $$.

LS方法的好处是你会找到参数的最优值,计算速度很快,你可能会在java脚本中找到植入,像这样one.

现在你应该注意你的误差范围。请注意,您处理误差范围的方式更像是 "business question" 而不是数学问题。这意味着很少有人会根据他们的需要选择很少的治疗方法,并且从数学的角度来看他们都会无动于衷。

在不了解您的需求的情况下,我建议您根据边距将每个点 (x,y) 变成 4 个点。 (x+e,y+e), (x-e, y+e), (x+e, y-e), (x-e,y-e).

这种表示的好处是它很简单,它让位于通常更敏感的边缘边界的末端,而且最好的是 - 它是一种减少。因此,一旦生成新值,您就可以使用常规 LS 实现,而无需自己实现此类算法。

非常有用的书Numerical Recipes provides a method to fit data to a straight line, with uncertainties in both X and Y coordinates. It can be found online这两个版本:

该方法基于最小化 χ2(卡方),类似于最小二乘法,但考虑了每个数据点的个体不确定性。当不确定性 σi 仅在 Y 轴上时,权重正比于 1/σi2 被分配给计算中的点。当数据在 X 和 Y 坐标上有不确定性时,分别由 σxi 和 σyi 给出,拟合到一条直线

y(x) = a + b · x

使用 χ2,其中每个点的权重与

成正比

1 / (σ2yi + b2 · σ2xi)

详细的方法和代码(C或Fortran)可以在书中找到。由于copyright,我无法在此处复制它们。