卡方检验 numpy.polyfit (numpy)

11

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

2个回答

18
假设你有一些数据点。
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)

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


非常感谢您,Sven Marnach。您的回答完全解决了我的问题。 - casper
5
根据您上面的评论,请接受这个回答 :) - SabreWolfy
2
参考:这里假设单元不确定性。具有测量不确定度的数组s的卡方公式为chi_squared = numpy.sum(((numpy.polyval(p, x) - y)/s) ** 2)。 - Daniele
没有额外的权重,这难道不只是“平方误差和”(而不是卡方)吗?或者我错了吗? - Trevor Boyd Smith
1
@TrevorBoydSmith 如果所有错误都设置为1,则它们是相同的。 :) - Sven Marnach
显示剩余2条评论

5
自Numpy 1.3版本以来,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 来提供拟合的权重)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接