我正在使用逻辑模型拟合数据点。由于有时我的数据存在 ydata 错误,因此我首先使用 curve_fit 及其 sigma 参数将我的个人标准偏差包含在拟合中。
现在我切换到了 minimumsq,因为我还需要一些曲线拟合无法提供的拟合优度估计。一切正常,但现在我错过了像“sigma”对curve_fit一样称量最小平方的可能性。
有人有一些关于我如何在最小平方中加权最小二乘的代码示例吗?
谢谢, 啄木鸟
我正在使用逻辑模型拟合数据点。由于有时我的数据存在 ydata 错误,因此我首先使用 curve_fit 及其 sigma 参数将我的个人标准偏差包含在拟合中。
现在我切换到了 minimumsq,因为我还需要一些曲线拟合无法提供的拟合优度估计。一切正常,但现在我错过了像“sigma”对curve_fit一样称量最小平方的可能性。
有人有一些关于我如何在最小平方中加权最小二乘的代码示例吗?
谢谢, 啄木鸟
我刚刚发现可以结合两全其美,并使用选项 full_output 也可以从 curve_fit() 获得完整的 leastsq() 输出:
popt, pcov, infodict, errmsg, ier = curve_fit(func, xdata, ydata, sigma = SD, full_output = True)
这给了我 infodict,我可以用它来计算我所有的拟合优度,并让我同时使用 curve_fit 的 sigma 选项......
假设您的数据在数组x
中y
,yerr
并且模型是f(p, x)
,只需将要最小化的误差函数定义为(y-f(p,x))/yerr
。
scipy.optimize.curve_fit文档说:
pcov:二维数组
popt 的估计协方差。对角线提供参数估计的方差。要计算参数的一个标准差误差,请使用 perr = np.sqrt(np.diag(pcov))。如上所述,sigma 参数如何影响估计的协方差取决于 absolute_sigma 参数。
以及关于
absolute_sigma : bool,可选
如果为 True,则以绝对意义使用 sigma,估计的参数协方差 pcov 反映了这些绝对值。
如果为 False,则只有 sigma 值的相对大小很重要。返回的参数协方差矩阵 pcov 基于按常数因子缩放 sigma。这个常数是通过要求当使用缩放的 sigma 时优化参数 popt 的减少 chisq 等于统一来设置的。换句话说,sigma 被缩放以匹配拟合后残差的样本方差。数学上,pcov(absolute_sigma=False) = pcov(absolute_sigma=True) * chisq(popt)/(MN)
因此,您可以将 absolute_sigma 保留为默认值 (False),然后使用
perr = np.sqrt(np.diag(pcov))
fitStdErr0 = perr[0]
fitStdErr1 = perr[1]
...
获得每个拟合参数的标准偏差误差(作为一维 numpy 数组)。现在您可以选择有用的成员(并以最能代表您的数据的方式组合它们)。