curve_fit线性回归参数误差与手动计算结果不符问题咨询
线性拟合中参数b误差计算差异的原因
你的手动公式错误,和数据量无关。
当对y=mx+b进行加权线性拟合(权重为w_i = 1/yerr_i²)时,参数b的误差不能仅用sqrt(1/np.sum((yerr)**(-2)))计算——这个简化公式只适用于**固定斜率m=0(仅拟合常数项)**的场景。
正确的参数b误差来自拟合的协方差矩阵对角元,推导基于χ²最小化的二阶导数:
- 首先计算行列式
D:w = 1 / (yerr ** 2) sum_w = np.sum(w) sum_wx = np.sum(w * x) sum_wx2 = np.sum(w * x ** 2) D = sum_w * sum_wx2 - sum_wx ** 2 - 然后b的方差为
sum_wx2 / D,误差为:berr = np.sqrt(sum_wx2 / D)
scipy.optimize.curve_fit在设置sigma=yerr且absolute_sigma=True时,会自动计算完整的协方差矩阵,因此给出的b误差是准确的。用上述正确公式手动计算,结果会和curve_fit输出一致。
内容的提问来源于stack exchange,提问作者Omar Medina
相关产品推荐
相关产品推荐

