Scipy.odr 有一个“适合类型”的设置,包括一个普通的最小二乘法。这与ODRPACK 的文档相匹配(参见第 31 页,计算方法)。
但是,包在此模式下接受标准偏差/权重,并且权重确实会影响拟合结果:
In [1]: from scipy import odr
...: def f(B, x):
...: return B[0]*x + B[1]
...: lin = odr.Model(f)
...: mydata = odr.RealData([0, 1, 2], [1,1,2], sy=[0.01,1,1])
...: myodr = odr.ODR(mydata, lin, beta0=[0,1])
...: myodr.set_job(fit_type=2)
...: myoutput = myodr.run()
...: print(myoutput.beta)
...: print(myoutput.sd_beta)
[0.400012 0.99998 ]
[0.200016 0.00447205]
In [2]: mydata = odr.RealData([0, 1, 2], [1,1,2], sy=[0.5,1,1])
...: myodr = odr.ODR(mydata, lin, beta0=[0,1])
...: myodr.set_job(fit_type=2)
...: myoutput = myodr.run()
...: print(myoutput.beta)
...: print(myoutput.sd_beta)
[0.42857143 0.95238096]
[0.23328473 0.21295886]
我的问题是:这真的是普通的最小二乘拟合,还是加权最小二乘拟合?文档清楚地说明了一件事,行为显示了另一件事。