Chi square numpy.polyfit(numpy)

时间:2011-03-29 18:43:50

标签: python numpy least-squares

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

2 个答案:

答案 0 :(得分:16)

假设您有一些数据点

x = numpy.array([0.0, 1.0, 2.0, 3.0])
y = numpy.array([3.6, 1.3, 0.2, 0.9])

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

p = numpy.polyfit(x, y, 2)

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

chi_squared = numpy.sum((numpy.polyval(p, x) - y) ** 2)

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

答案 1 :(得分:1)

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

所以一个简单的例子就是

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

我自己没有尝试使用权重,但我认为polyfit在这里做正确的事(因为numpy 1.7,polyfit接受参数w来为拟合提供权重)