正交距离回归 (scipy.odr
)#
包内容#
|
要拟合的数据。 |
|
数据,权重为实际的标准偏差和/或协方差。 |
|
Model 类存储有关您希望拟合的函数的信息。 |
|
ODR 类收集所有信息并协调主拟合例程的运行。 |
|
Output 类存储 ODR 运行的输出。 |
|
ODR 的底层函数。 |
警告,指示传入 ODR 的数据在传入 'odr' 时会引起问题,用户应该意识到这一点。 |
|
指示拟合中出现错误的异常。 |
|
停止拟合的异常。 |
|
|
通用多项式模型的工厂函数。 |
指数模型 |
|
任意维度的线性模型 |
|
单变量线性模型 |
|
二次模型 |
用法信息#
简介#
为什么使用正交距离回归 (ODR)?有时,在解释性(又名“自变量”)变量中存在测量误差,而不仅仅是在响应(又名“因变量”)变量中。普通最小二乘法 (OLS) 拟合程序将解释变量的数据视为固定的,即不受任何类型的误差影响。此外,OLS 程序要求响应变量是解释变量的显式函数;有时,使方程显式是不切实际的和/或会引入误差。ODR 可以轻松处理这两种情况,如果足以解决问题,甚至可以简化为 OLS 情况。
ODRPACK 是一个 FORTRAN-77 库,用于执行可能具有非线性拟合函数的 ODR。它使用修改后的信赖域 Levenberg-Marquardt 型算法 [1] 来估计函数参数。拟合函数由在 NumPy 数组上运行的 Python 函数提供。所需的导数也可以由 Python 函数提供,或者可以数值估计。ODRPACK 可以进行显式或隐式 ODR 拟合,或者可以进行 OLS。输入和输出变量可以是多维的。可以提供权重来解释观测值的不同方差,甚至是变量维度之间的协方差。
scipy.odr
包除了底层 odr
函数外,还提供了一个面向对象的 ODRPACK 接口。
有关 ODRPACK 的其他背景信息,请参阅ODRPACK 用户指南,建议阅读。
基本用法#
定义要拟合的函数。
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]
创建 Model。
linear = Model(f)
创建 Data 或 RealData 实例。
mydata = Data(x, y, wd=1./power(sx,2), we=1./power(sy,2))
或者,当实际协方差已知时
mydata = RealData(x, y, sx=sx, sy=sy)
使用数据、模型和初始参数估计来实例化 ODR。
myodr = ODR(mydata, linear, beta0=[1., 2.])
运行拟合。
myoutput = myodr.run()
检查输出。
myoutput.pprint()
参考文献#
P. T. Boggs 和 J. E. Rogers,“正交距离回归”,载于“测量误差模型和应用的统计分析:1989 年 6 月 10 日至 16 日举行的 AMS-IMS-SIAM 联合夏季研究会议的会议记录”,当代数学,第 112 卷,第 186 页,1990 年。