如何计算Lmfit复合模型各组成分量的1-sigma不确定性
复合模型分量不确定度计算方法
你使用的是lmfit拟合框架的话,有非常简便的实现方式,核心逻辑是直接复用全局拟合得到的参数和协方差矩阵,单独对每个分量模型调用不确定度计算接口即可,具体实现步骤如下:
- 首先提取复合模型中的两个子分量模型实例
model_a = gmodel.components[0] model_b = gmodel.components[1]
- 传入拟合得到的参数、自变量数据,单独计算每个分量的1σ不确定度
# 替换x_data为你拟合时使用的自变量数组 uncert_a = model_a.eval_uncertainty(params=result.params, x=x_data) uncert_b = model_b.eval_uncertainty(params=result.params, x=x_data)
返回的uncert_a、uncert_b格式和你调用result.eval_uncertainty()得到的整体不确定度完全一致,分别对应a、b两个分量的1σ置信区间半宽,你可以直接和result.eval_components()返回的分量拟合值做加/减运算,得到每个分量的上下置信区间线。
正确性验证
因为上述方法复用了全局拟合得到的完整协方差矩阵,已经天然考虑了不同分量之间的参数相关性,计算结果和整体模型的不确定度是完全匹配的,你可以通过以下代码验证:
import numpy as np total_uncert = result.eval_uncertainty(x=x_data) # 合成两个分量的不确定度 calc_total = np.sqrt(uncert_a**2 + uncert_b**2) # 两者差值应该在数值误差范围内,通常小于1e-6 print("最大误差:", np.max(np.abs(total_uncert - calc_total)))
内容的提问来源于stack exchange,提问作者Som Paneru
相关产品推荐
相关产品推荐

