我一直在寻找一种在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
中,并查找m
和b
及其传播的错误。我知道我可以实现的最小二乘法算法,但是它只在y变量上出错,并且在这两个方面我都有明显的错误。我也找不到Javascript库来做到这一点;但是如果有其他语言的开源库,我可以对其进行检查以了解如何在JS中实现。
像Origin或plotly这样的程序都可以实现这一点,但是我不知道如何实现。此示例数据集的结果为:
m = 1.93 +/- 0.11
b = 0.11 +/- 0.30
最佳答案
非常有用的一本书Numerical Recipes提供了一种将数据拟合为直线的方法,该方法在X和Y坐标上均具有不确定性。可以在以下两个版本中找到online:
该方法基于最小化与最小二乘相似的χ2(卡方),但考虑到每个数据点的个体不确定性。当不确定度σi仅在Y轴上时,在计算中将与1/σi2成比例的权重分配给该点。当数据在X和Y坐标中具有不确定性时,分别由σxi和σyi给出,则拟合为直线
使用χ2,其中每个点的权重与
本书中提供了详细的方法和代码(使用C或Fortran)。由于copyright,我无法在此处复制它们。