SciPy ODR“普通”最小二乘?

计算科学 scipy 最小二乘 统计数据 回归
2021-12-08 05:39:17

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]

我的问题是:这真的是普通的最小二乘拟合,还是加权最小二乘拟合?文档清楚地说明了一件事,行为显示了另一件事。

1个回答

根据ODRPACK 文档,“普通最小二乘法”似乎很清楚,作者的意思是最小二乘法,其中误差(被认为是)仅在因变量中,而不在自变量中。“普通最小二乘”选项确实使用了权重。事实上,与流行的用法相反,包的“普通最小二乘”选项不仅使用权重,而且它也可能是非线性的(最小二乘),而不是线性最小二乘。所以 ODRPACK 的“普通”最小二乘并不是那么普通。

别怪我,我只是个使者。我没有写包或选择它的命名法。