SciPy曲线拟合参数的方差是什么?(Python)

5

我目前正在使用Python的scipy.optimize包中的curve_fit函数,并知道如果您对从curve_fit获得的协方差矩阵的对角线条目取平方根,则会得到curve_fit计算的参数的标准偏差。但是,我不确定这个标准偏差究竟意味着什么。据我所知,这是使用Hesse矩阵的近似值,但确切的计算是什么?高斯钟形曲线上的标准偏差告诉您曲线某个范围内区域的百分比,因此我认为对于curve_fit,它告诉您在某些参数值之间有多少数据点,但显然这并不正确...

如果这应该是曲线拟合的基本知识,我很抱歉,但我真的无法弄清楚标准偏差的作用,它们表示参数的误差,但是这些参数被计算为函数的最佳拟合,就像不存在整个最优参数集合一样,我们得到该集合的平均值,因此也具有标准偏差。只有一个最佳值,还有什么可以与之相比较的呢?我想我的问题实际上归结为:我如何手动和准确地计算这些标准偏差,而不仅仅是使用Hesse矩阵的近似值?


1
这个问题与PythonScipy有什么关系?这更适合放在维基百科上。 - Ma0
我不确定在哪里发布这个问题,我认为Python和Scipy是适当的主题,因为这是我个人遇到问题的地方...我应该在其他地方发布吗? - MMichelis
1个回答

8
拟合参数的方差表示基于模型对数据的拟合质量而得到的最佳拟合值的不确定性。也就是说,它描述了值能够远离最佳拟合值多少,并仍然具有接近最佳拟合值的拟合质量。
使用卡方统计量的标准定义, chi_square = (((data-model)/epsilon)**2).sum() 以及reduced_chi_square = chi_square/(ndata-nvarys)(其中data是数据值数组,model是计算模型数组,epsilon是数据的不确定性,ndata是数据点数,nvarys是变量数),良好的拟合应该具有约为1的reduced_chi_square或者chi_square约为ndata-nvary。(注意:不是0——由于数据中存在噪声,拟合不会完美)。
变量的最佳拟合值的方差给出了更改该值(并重新优化所有其他值)并将卡方增加1所需的量。这给出了所谓的"1-sigma"值的不确定度。
正如您所说,这些值表达在scipy.optimize.curve_fit返回的协方差矩阵的对角线项中(非对角线项给出变量之间的相关性:如果一个变量的值从其最佳值发生变化,其他变量将如何响应以使拟合更好)。这个协方差矩阵是用在解决方案附近的试验值和导数构建的——它计算了参数空间的"曲率"(即当变量值发生变化时,卡方如何变化)。
您可以手动计算这些不确定度。 lmfit库(https://lmfit.github.io/lmfit-py/)具有从最小二乘法或曲线拟合中更明确地探索变量置信区间的例程。这些在https://lmfit.github.io/lmfit-py/confidence.html更详细地描述。使用lmfit进行曲线拟合可能比尝试为curve_fit重新实现置信区间代码更容易。

非常感谢,现在我理解得更清楚了!我会尝试使用lmfit并查看置信区间的情况! - MMichelis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接