正交距離迴歸 (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 是一個 FORTRAN-77 程式庫,用於執行具有可能非線性擬合函數的 ODR。它使用修改後的信賴域 Levenberg-Marquardt 型演算法 [1] 來估計函數參數。擬合函數由在 NumPy 陣列上運作的 Python 函數提供。所需的導數也可以由 Python 函數提供,或者可以數值估計。ODRPACK 可以執行顯式或隱式 ODR 擬合,也可以執行 OLS。輸入和輸出變數可以是多維的。可以提供權重以考慮觀測值的不同變異數,甚至是變數維度之間的共變異數。

scipy.odr 套件提供 ODRPACK 的物件導向介面,以及底層的 odr 函數。

有關 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. 建立 Model。

    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 和 J. E. Rogers,“Orthogonal Distance Regression,”在“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,卷。 112,第 186 頁,1990 年。