我使用Python 3.6进行数据拟合。最近,我遇到了以下问题,由于缺乏经验,不确定如何处理。
如果我在同一组数据点上使用numpy.polyfit(x, y, 1, cov=True)和scipy.curve_fit(lambda: x, a, b: a*x+b, x, y),得到的系数a和b几乎相同。但是,scipy.curve_fit的协方差矩阵的值大约是numpy.polyfit的值的一半。
由于我想使用协方差矩阵的对角线来估计系数的不确定度(u = numpy.sqrt(numpy.diag(cov))),我有三个问题:
1. 哪个协方差矩阵才是正确的(我应该使用哪个)? 2. 为什么会有差异? 3. 需要什么才能使它们相等?
谢谢! 编辑:
如果我使用
如果我在同一组数据点上使用numpy.polyfit(x, y, 1, cov=True)和scipy.curve_fit(lambda: x, a, b: a*x+b, x, y),得到的系数a和b几乎相同。但是,scipy.curve_fit的协方差矩阵的值大约是numpy.polyfit的值的一半。
由于我想使用协方差矩阵的对角线来估计系数的不确定度(u = numpy.sqrt(numpy.diag(cov))),我有三个问题:
1. 哪个协方差矩阵才是正确的(我应该使用哪个)? 2. 为什么会有差异? 3. 需要什么才能使它们相等?
谢谢! 编辑:
import numpy as np
import scipy.optimize as sc
data = np.array([[1,2,3,4,5,6,7],[1.1,1.9,3.2,4.3,4.8,6.0,7.3]]).T
x=data[:,0]
y=data[:,1]
A=np.polyfit(x,y,1, cov=True)
print('Polyfit:', np.diag(A[1]))
B=sc.curve_fit(lambda x,a,b: a*x+b, x, y)
print('Curve_Fit:', np.diag(B[1]))
如果我使用
statsmodels.api
,结果将对应于 curve_fit 的结果。