卡方 numpy.polyfit (numpy)

11 投票
2 回答
12625 浏览
提问于 2025-04-16 14:40

有人能解释一下怎么用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)

如果你愿意,可以把这个数字除以自由度的数量。

撰写回答