有人可以解释如何使用 numpy.polyfit 获得 Chi^2/doF 吗?
问问题
10678 次
2 回答
17
假设您有一些数据点
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)
如果您愿意,可以将此数字除以自由度数。
于 2011-03-30T08:57:29.410 回答
4
Numpypolyfit
至少从 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
来提供适合的权重)。
于 2016-04-18T06:59:46.853 回答