我使用逻辑模型拟合数据点。由于我有时会有ydata错误的数据,我首先使用curve_fit及其sigma参数来包含我在拟合中的各个标准偏差。
现在我切换到了最小化,因为我还需要一些曲率拟合无法提供的拟合优度估计。一切都运作良好,但现在我错过了权衡最小平方的可能性,因为“sigma”与curve_fit有关。
有人一些代码示例关于我如何在最小方格中加权最小二乘?
谢谢,啄木鸟
我刚刚发现可以结合两个世界的最佳组合,并使用选项full_output从curve_fit()获得完整的leastsq()输出:
popt, pcov, infodict, errmsg, ier = curve_fit(func, xdata, ydata, sigma = SD, full_output = True)
这给了我infodict,我可以用来计算我所有的Fitness of Fit,并让我同时使用curve_fit的sigma选项......
假设你的数据在数组x
,y
和yerr
,模型是f(p, x)
,只需将误差函数定义为(y-f(p,x))/yerr
最小化。
scipy.optimize.curve_fit docs说:
pcov:2d数组
估计的popt协方差。对角线提供参数估计的方差。要计算参数上的一个标准偏差,请使用perr = np.sqrt(np.diag(pcov))。 sigma参数如何影响估计的协方差取决于absolute_sigma参数,如上所述。
和节
absolute_sigma:bool,可选
如果为True,则以绝对意义使用sigma,并且估计的参数协方差pcov反映这些绝对值。
如果为假,则只有西格玛值的相对大小很重要。返回的参数协方差矩阵pcov基于通过常数因子缩放西格玛。通过要求在使用缩放的西格玛等于1时弹出最佳参数的减少的chisq来设置该常数。换句话说,缩放西格玛以匹配拟合后残差的样本方差。数学上,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]
...
获得每个拟合参数的标准偏差误差(作为1D numpy数组)。现在你可以选择有用的成员(并以most representative of your data的方式组合它们)。