如何在numpy.polyfit中包含测量误差

时间:2014-11-07 10:46:15

标签: python numpy

numpy.polyfit的文档HERE将可选的输入向量 w 定义为“应用于y坐标的权重”。这个定义不清楚,似乎不是最小二乘拟合权重的标准定义(参见例如HERE)。

如何计算输入测量的1σ误差(标准偏差)的常见情况,如何计算numpy.polyfit中使用的权重?

1 个答案:

答案 0 :(得分:1)

简答

w 与numpy.polyfit中的1σ错误之间的关系是

w = 1/sigma

这与每个人都期望的不同。

编辑:在我对Github的评论之后,numpy.polyfit 1.16文档现在明确指出“使用1 / sigma(不是1 / sigma ** 2)”以避免人们认为有公式中的拼写错误。

解释

在最小二乘拟合中,通常以这样的方式定义权重向量,即拟合最小化平方误差(参见例如WikipediaNIST

chi2 = np.sum(weights*(p(x) - y)**2)

在1σ误差(标准偏差)“sigma”已知的常见情况下,人们有熟悉的教科书关系,其中权重是方差的倒数

weights = 1/sigma**2

然而,numpy.polyfit文档将权重定义为“应用于y坐标的权重”。这个定义不太正确。权重适用于拟合残差,而不仅适用于y坐标。

更重要的是,看看Numpy(v1.9.1)代码中的数学,看起来Numpy代码在最后的方块意义上解决了下面的线性问题,其中 w 向量确实乘以y坐标

(vander*w[:, np.newaxis]).dot(x) == y*w

但是,在最小二乘意义上求解上述数组表达式相当于使用括号内的 w 最小化下面的表达式

chi2 = np.sum((w*(vander.dot(x) - y))**2)

或者,使用Numpy文档的表示法

chi2 = np.sum((w*(p(x) - y))**2)

w 与1σ误差之间的关系为

w = 1/sigma

这与每个人都期望的不同。