卡方 numpy.polyfit (numpy)
有人能解释一下怎么用numpy.polyfit来计算卡方(Chi^2)和自由度(doF)吗?
2 个回答
5
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
的参数,用来提供加权值)。
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)
如果你愿意,可以把这个数字除以自由度的数量。