我有一组数据(位移与时间),我已经使用optimize.leastsq方法拟合了几个方程.我现在希望得到拟合参数的误差值.通过文档查看输出的矩阵是雅可比矩阵,我必须将其乘以残差矩阵以得到我的值.不幸的是,我不是统计学家所以我在术语中有点溺水.
根据我的理解,我需要的是与我的拟合参数一致的协方差矩阵,因此我可以对角元素的平方根来得到拟合参数的标准误差.我有一个模糊的阅读记忆,协方差矩阵无论如何都是来自optimize.leastsq方法的输出.它是否正确?如果不是,您将如何获得残差矩阵乘以输出的雅可比矩阵乘以得到我的协方差矩阵?
任何帮助将不胜感激.我是python的新手,因此如果问题变成一个基本问题就道歉.
拟合代码如下:
fitfunc = lambda p, t: p[0]+p[1]*np.log(t-p[2])+ p[3]*t # Target function'
errfunc = lambda p, t, y: (fitfunc(p, t) - y)# Distance to the target function
p0 = [ 1,1,1,1] # Initial guess for the parameters
out = optimize.leastsq(errfunc, p0[:], args=(t, disp,), full_output=1)
Run Code Online (Sandbox Code Playgroud)
args t和disp是time和displcement值的数组(基本上只有2列数据).我已经导入了代码顶部所需的所有内容.输出提供的拟合值和矩阵如下:
[ 7.53847074e-07 1.84931494e-08 3.25102795e+01 -3.28882437e-11]
[[ 3.29326356e-01 -7.43957919e-02 8.02246944e+07 2.64522183e-04]
[ -7.43957919e-02 1.70872763e-02 -1.76477289e+07 -6.35825520e-05]
[ 8.02246944e+07 -1.76477289e+07 2.51023348e+16 5.87705672e+04]
[ 2.64522183e-04 -6.35825520e-05 5.87705672e+04 2.70249488e-07]]
Run Code Online (Sandbox Code Playgroud)
我怀疑此刻适合有点怀疑.当我可以解决错误时,这将得到确认.
嗨,我想问我的同伴python用户如何执行他们的线性拟合.
我一直在搜索方法/库的最后两周来执行此任务,我想分享我的经验:
如果您想基于最小二乘法执行线性拟合,您有很多选择.例如,您可以在numpy和scipy中找到类.我自己选择了由linfit呈现的那个(遵循IDL中linfit函数的设计):
http://nbviewer.ipython.org/github/djpine/linfit/blob/master/linfit.ipynb
此方法假定您在y轴坐标中引入sigmas以适合您的数据.
但是,如果您已经量化了x轴和y轴的不确定性,则没有太多选项.(在主要的python科学图书馆中没有IDL"Fitexy"等价物).到目前为止,我只找到了"kmpfit"库来执行此任务.幸运的是,它有一个非常完整的网站,描述了它的所有功能:
https://github.com/josephmeiring/kmpfit http://www.astro.rug.nl/software/kapteyn/kmpfittutorial.html#
如果有人知道其他方法,我也很想知道它们.
无论如何,我希望这会有所帮助.