有人可以解释一下如何使用numpy.polyfit获得Chi^2/doF吗?
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)
如果您愿意,可以将此数字除以自由度数。
polyfit
函数支持一个名为full
的参数。如果将其设置为True
,则polyfit
函数将返回更多值,包括残差的平方和。这个值是卡方统计量(未经自由度标准化)。p, residuals, _, _, _ = numpy.polyfit(x, y, 2, full=True)
chisq_dof = residuals / (len(x) - 3)
我自己没有用过权重,但我认为 polyfit
应该会做正确的事情(因为自从 numpy 1.7 开始,polyfit
接受一个参数 w
来提供拟合的权重)。