我使用逻辑模型拟合数据点。由于我有时会有ydata错误的数据,我首先使用curve_fit及其sigma参数来包含我在拟合中的各个标准偏差。
现在我切换到了最小化,因为我还需要一些曲率拟合无法提供的拟合优度估计。一切都运作良好,但现在我错过了权衡最小平方的可能性,因为“sigma”与curve_fit有关。
是否还有一些代码示例,说明我如何在最小平方中加权最小二乘?
谢谢,Woodpicker
答案 0 :(得分:5)
我刚刚发现可以结合两个世界的最佳组合,并使用full_output选项从curve_fit()获得完整的lesssq()输出:
popt, pcov, infodict, errmsg, ier = curve_fit(func, xdata, ydata, sigma = SD, full_output = True)
这给了我infodict,我可以用来计算我所有的Fitness of Fit,并让我同时使用curve_fit的sigma选项......
答案 1 :(得分:4)
假设您的数据位于数组x
,y
yerr
且模型为f(p, x)
,请将错误函数定义为{{1} }。
答案 2 :(得分:0)
scipy.optimize.curve_fit docs说:
pcov:二维数组
popt的估计协方差。对角线提供参数估计的方差。要计算参数的一个标准偏差,请使用perr = np.sqrt(np.diag(pcov))。如上所述,sigma参数如何影响估计的协方差取决于absolute_sigma参数。
还有
部分absolute_sigma:布尔型,可选
如果为True,则在绝对意义上使用sigma,估计的参数协方差pcov反映这些绝对值。
如果为False,则仅sigma值的相对大小重要。返回的参数协方差矩阵pcov基于缩放sigma常数。通过使用缩放的sigma时,要求最优参数popt的减小的chisq等于1来设置此常数。换句话说,对sigma进行缩放以匹配拟合后残差的样本方差。从数学上讲,pcov(absolute_sigma = False)= pcov(absolute_sigma = True)* chisq(popt)/(M-N)
因此,您可以将absolute_sigma保留为默认值(False),然后使用
perr = np.sqrt(np.diag(pcov))
fitStdErr0 = perr[0]
fitStdErr1 = perr[1]
...
获取每个拟合参数的标准偏差误差(作为一维numpy数组)。现在,您可以选择有用的成员(并以most representative of your data的方式组合它们)。