lmfit卡方趋近于0且scale_covar=False时参数不确定度失准问题问询
lmfit 拟合参数不确定度计算异常问题
问题现象
使用lmfit开展数据拟合分析时,若设置scale_covar=False,当*卡方(chi-square)*数值接近0(即模型几乎完美匹配观测数据)时,输出的最优拟合参数对应的不确定度存在明显失准情况。
测试以X = [0,1,2]、Y = [0,1,2]的直线回归为场景,向数据中添加幅值递增的噪声f开展多组对照测试,结果显示仅当噪声幅值足够大时,lmfit报告的参数不确定度才与普通最小二乘法(ordinary least squares)的预期计算值一致。
核心疑问
该现象属于以下哪类情况:
- lmfit在参数不确定度估计逻辑上的bug或固有局限
- 对lmfit输出结果的预期理解存在偏差
测试代码与运行结果
测试所用代码
# python 3.7.6 # lmfit 1.0.2 import numpy as np from lmfit import minimize, Parameters def residual(p, x, y): return y - (p['a'] + p['b'] * x) def report(out): print(f'{f:8.0e} {out.chisqr:8.0e} {out.params["a"].value:8.2f} {out.covar[0,0]**.5:8.2f} {out.params["b"].value:8.2f} {out.covar[1,1]**.5:8.2f} {out.covar[0,1]/(out.covar[0,0]*out.covar[1,1])**.5:8.2f}') print(f'{"noise":>8} {"chisq":>8} {"a":>8} {"SE(a)":>8} {"b":>8} {"SE(b)":>8} {"cor(a,b)":>8}') print(f'{"-"*8} {"-"*8} {"-"*8} {"-"*8} {"-"*8} {"-"*8} {"-"*8}') params = Parameters() params.add('a', value=0.5) params.add('b', value=0.5) f = 0 X = np.array([0.,1.,2.]) Y = np.array([0.,1.,2.]) out = minimize(residual, params, args=(X, Y), scale_covar = False) report(out) for e in np.linspace(16,2,15): f = 10**-e Y[1] = 1 + f out = minimize(residual, params, args=(X, Y), scale_covar = False) report(out)
对应运行输出
noise chisq a SE(a) b SE(b) cor(a,b) -------- -------- -------- -------- -------- -------- -------- 0e+00 2e-24 0.00 1.00 1.00 0.45 -0.00 1e-16 2e-24 0.00 1.00 1.00 0.45 -0.00 1e-15 2e-24 0.00 1.00 1.00 0.45 -0.00 1e-14 1e-24 -0.00 0.00 1.00 0.50 -0.45 1e-13 2e-24 -0.00 0.00 1.00 1.00 -0.89 1e-12 2e-24 -0.00 0.00 1.00 0.50 -0.45 1e-11 7e-23 0.00 1.00 1.00 0.45 -0.00 1e-10 7e-21 0.00 1.00 1.00 0.45 -0.00 1e-09 7e-19 0.00 1.00 1.00 0.45 -0.00 1e-08 7e-17 0.00 0.24 1.00 0.50 -0.44 1e-07 7e-15 0.00 0.93 1.00 0.67 -0.74 1e-06 7e-13 0.00 0.92 1.00 0.70 -0.77 1e-05 7e-11 0.00 0.91 1.00 0.71 -0.77 1e-04 7e-09 0.00 0.91 1.00 0.71 -0.77 1e-03 7e-07 0.00 0.91 1.00 0.71 -0.77 1e-02 7e-05 0.00 0.91 1.00 0.71 -0.77
内容的提问来源于stack exchange,提问作者Mathieu
相关产品推荐
相关产品推荐

