正交距离回归 (scipy.odr)#

包内容#

Data(x[, y, we, wd, fix, meta])

要拟合的数据。

RealData(x[, y, sx, sy, covx, covy, fix, meta])

数据,权重为实际的标准差和/或协方差。

Model(fcn[, fjacb, fjacd, extra_args, ...])

Model 类存储了关于你希望拟合的函数的信息。

ODR(data, model[, beta0, delta0, ifixb, ...])

ODR 类收集所有信息并协调主拟合例程的运行。

Output(output)

Output 类存储了 ODR 运行的输出结果。

odr(fcn, beta0, y, x[, we, wd, fjacb, ...])

ODR 的底层函数。

OdrWarning

警告:传递给 ODR 的数据在传递给 'odr' 时会导致问题,用户应注意这一点。

OdrError

指示拟合错误的异常。

OdrStop

异常停止拟合。

polynomial(order)

用于一般多项式模型的工厂函数。

exponential

指数模型

multilinear

任意维度的线性模型

unilinear

单变量线性模型

quadratic

二次模型

使用信息#

介绍#

为什么使用正交距离回归 (ODR)?有时在解释变量(也称为“自变量”)中存在测量误差,而不仅仅是在响应变量(也称为“因变量”)中。普通最小二乘法 (OLS) 拟合过程将解释变量的数据视为固定的,即不受任何类型的误差影响。此外,OLS 过程要求响应变量是解释变量的显式函数;有时使方程显式化是不切实际的,甚至会引入误差。ODR 可以轻松处理这两种情况,如果问题足够简单,甚至可以简化为 OLS 情况。

ODRPACK 是一个用于执行可能包含非线性拟合函数的正交距离回归(ODR)的 FORTRAN-77 库。它使用修改后的信赖域 Levenberg-Marquardt 型算法 [1] 来估计函数参数。拟合函数由操作 NumPy 数组的 Python 函数提供。所需的导数也可以由 Python 函数提供,或者可以数值估计。ODRPACK 可以进行显式或隐式的 ODR 拟合,或者可以进行 OLS(普通最小二乘法)。输入和输出变量可以是多维的。可以提供权重以考虑观测值的不同方差,甚至可以考虑变量维度之间的协方差。

scipy.odr 包除了提供低级别的 odr 函数外,还提供了一个面向对象的 ODRPACK 接口。

关于 ODRPACK 的更多背景信息可以在 ODRPACK 用户指南 中找到,建议阅读。

基本用法#

  1. 定义你想要拟合的函数。:

    def f(B, x):
        '''Linear function y = m*x + b'''
        # B is a vector of the parameters.
        # x is an array of the current x values.
        # x is in the same format as the x passed to Data or RealData.
        #
        # Return an array in the same format as y passed to Data or RealData.
        return B[0]*x + B[1]
    
  2. 创建一个模型。:

    linear = Model(f)
    
  3. 创建一个 Data 或 RealData 实例。:

    mydata = Data(x, y, wd=1./power(sx,2), we=1./power(sy,2))
    

    或者,当实际协方差已知时:

    mydata = RealData(x, y, sx=sx, sy=sy)
    
  4. 使用您的数据、模型和初始参数估计实例化ODR。:

    myodr = ODR(mydata, linear, beta0=[1., 2.])
    
  5. 运行拟合。:

    myoutput = myodr.run()
    
  6. 检查输出。:

    myoutput.pprint()
    

引用

[1]

P. T. Boggs and J. E. Rogers, “Orthogonal Distance Regression,” in “Statistical analysis of measurement error models and applications: proceedings of the AMS-IMS-SIAM joint summer research conference held June 10-16, 1989,” Contemporary Mathematics, vol. 112, pg. 186, 1990.