Chi square numpy.polyfit(numpy)

cas*_*per 9 python numpy least-squares

有人可以解释如何使用numpy.polyfit获取Chi ^ 2/doF?

Sve*_*ach 17

假设您有一些数据点

x = numpy.array([0.0, 1.0, 2.0, 3.0])
y = numpy.array([3.6, 1.3, 0.2, 0.9])
Run Code Online (Sandbox Code Playgroud)

要将抛物线拟合到这些点,请使用numpy.polyfit():

p = numpy.polyfit(x, y, 2)
Run Code Online (Sandbox Code Playgroud)

要获得此拟合的卡方x值,请在数据点的值处计算多项式,减去y值,平方和求和:

chi_squared = numpy.sum((numpy.polyval(p, x) - y) ** 2)
Run Code Online (Sandbox Code Playgroud)

如果您愿意,可以将此数字除以自由度数.

  • @casper:根据你上面的评论,请接受这个答案:) (4认同)
  • 供参考:这里假设单一不确定性。具有数组s且测量不确定性的chi_square的公式为chi_squared = numpy.sum((((numpy.polyval(p,x)-y)/ s)** 2) (2认同)

小智 5

Numpypolyfit至少从 1.3 版开始就支持full参数。如果设置为Truepolyfit将返回更多值,包括残差的平方。这是卡方(未按自由度标准化)。

所以一个简单的例子是

p, residuals, _, _, _ = numpy.polyfit(x, y, 2, full=True)
chisq_dof = residuals / (len(x) - 3)
Run Code Online (Sandbox Code Playgroud)

我自己还没有尝试过使用权重,但我认为polyfit这里做了正确的事情(从 numpy 1.7 开始,polyfit接受一个参数w来提供拟合的权重)。