6

我正在使用逻辑模型拟合数据点。由于有时我的数据存在 ydata 错误,因此我首先使用 curve_fit 及其 sigma 参数将我的个人标准偏差包含在拟合中。

现在我切换到了 minimumsq,因为我还需要一些曲线拟合无法提供的拟合优度估计。一切正常,但现在我错过了像“sigma”对curve_fit一样称量最小平方的可能性。

有人有一些关于我如何在最小平方中加权最小二乘的代码示例吗?

谢谢, 啄木鸟

4

3 回答 3

6

我刚刚发现可以结合两全其美,并使用选项 full_output 也可以从 curve_fit() 获得完整的 leastsq() 输出:

popt, pcov, infodict, errmsg, ier = curve_fit(func, xdata, ydata, sigma = SD, full_output = True)

这给了我 infodict,我可以用它来计算我所有的拟合优度,并让我同时使用 curve_fit 的 sigma 选项......

于 2013-05-13T18:32:49.297 回答
4

假设您的数据在数组xyyerr并且模型是f(p, x),只需将要最小化的误差函数定义为(y-f(p,x))/yerr

于 2013-05-13T11:38:14.207 回答
0

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 数组)。现在您可以选择有用的成员(并以最能代表您的数据的方式组合它们)。

于 2019-04-20T22:14:40.800 回答