从polyfit中找出不确定性

时间:2015-01-03 17:46:53

标签: python numpy

我使用2阶的简单polyfit来拟合样本数据中的一行:

np.polyfit(x, y, 2)

返回系数。

现在我想找到拟合线的不确定性,并尝试使用cov参数,它返回3x3协方差矩阵:

np.polyfit(x, y, 2, cov=True)

但是我不确定如何计算不确定性,根据我的谷歌搜索应该通过平方协方差矩阵的对角线来计算。

2 个答案:

答案 0 :(得分:5)

P.H的"Estimating Errors in Least-Squares Fitting"解决了这个问题。里希特,1995年,TDA进展报告42-122。

从报告中,本段可能已经足够

  

上面考虑的第一个例子,即确定错误   一个或多个拟合参数,给出了一个简单的答案   拟合的协方差矩阵的对角元素的项,   并且众所周知。

您感兴趣的对角线元素例如:

x = linspace(0,1,1000)
# comment and uncomment the last term to see how the fit appears in the figure,
# and how the covariances of the single polynomial coefficients vary in turn.
y = cos(x)*x**2+x+sin(x-1.) #+(x*1.3)**6
p,cov = polyfit(x,y,2,cov=True)
plot(x,y,'b')
plot(x,polyval(p,x),'r')
print sqrt(diag(cov))

更一般地,该参考解决了多项式系数中的该误差如何也是因变量y的误差,作为自变量x的函数。来自报告:

  

本文的目的是讨论上述错误,并在   特别是,提出允许人们确定的结果   拟合的标准误差作为自变量的函数,   以及为这些错误建立置信限度。

答案 1 :(得分:0)

为方便起见,我根据gg349的答案为Python 3编写了一个完整的示例。

import numpy as np
import matplotlib.pyplot as plt 

x = np.linspace(0,1,1000)
# comment and uncomment the last term to see how the fit appears in the figure,
# and how the covariances of the single polynomial coefficients vary in turn.
y = np.cos(x) * x**2 + x + np.sin(x - 1.) \
#     + (x * 1.3)**6

p, cov = np.polyfit(x, y, 2, cov=True)

plt.plot(x, y)
plt.plot(x, np.polyval(p,x))
plt.show()

print(np.sqrt(np.diag(cov)))