我有一些观测数据,我想使用lmfit.Minimizer()
来拟合一些模型参数,以最小化误差函数,由于我不会在这里讨论的原因,该函数必须返回浮点数而不是残差数组。这意味着我不能使用Leastsq
方法来最小化该功能。实际上,方法nelder
,BFGS
和powell
可以很好地收敛,但是这些方法不能提供最佳拟合参数(MinimizerResult.covar
)的协方差。
我想知道当使用任何非Leastsq
方法时,您是否是计算此协方差的简单方法。
答案 0 :(得分:0)
确实,leastsq方法是唯一可以计算误差线的方法,并且这需要残留的 array (元素多于变量!)。
事实证明,在lmfit中已经完成了一些工作,以期能够为标量最小化器计算不确定性,但是它并不完整。请参见https://github.com/lmfit/lmfit-py/issues/169和https://github.com/lmfit/lmfit-py/pull/481。如果您有兴趣提供帮助,那就太好了!
但是,是的,您可以手动计算协方差。对于每个变量,您都需要对其值进行微扰(理想情况下约为1-sigma,但是由于这是您要计算的内容,您可能不知道),然后修正该值并优化所有值其他值。这样,您可以计算Jacobian矩阵(相对于变量的残差数组的导数)。
根据雅可比矩阵,协方差矩阵为(假设没有奇点):
covar = numpy.inv(numpy.dot(numpy.transpose(jacobian), jacobian))