Orthogonale Regressionsanalyse (scipy.odr)#

Paketinhalt#

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

Die zu fittenden Daten.

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

Die Daten mit Gewichtungen als tatsächliche Standardabweichungen und/oder Kovarianzen.

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

Die Klasse Model speichert Informationen über die zu fittende Funktion.

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

Die Klasse ODR fasst alle Informationen zusammen und koordiniert die Ausführung der Hauptanpassungsroutine.

Output(output)

Die Klasse Output speichert die Ausgabe eines ODR-Laufs.

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

Low-Level-Funktion für ODR.

OdrWarning

Warnung, die darauf hinweist, dass die an ODR übergebenen Daten Probleme verursachen werden, wenn sie an 'odr' übergeben werden, über die der Benutzer informiert werden sollte.

OdrError

Ausnahme, die einen Fehler beim Anpassen anzeigt.

OdrStop

Ausnahme, die das Anpassen stoppt.

polynomial(order)

Factory-Funktion für ein allgemeines Polynommodell.

exponential

Exponentielles Modell

multilinear

Mehrdimensionales lineares Modell

unilinear

Univariates lineares Modell

quadratic

Quadratisches Modell

Nutzungsinformationen#

Einleitung#

Warum orthogonale Regressionsanalyse (ODR)? Manchmal gibt es Messfehler in den erklärenden (auch "unabhängigen") Variablen, nicht nur in den Antwortvariablen (auch "abhängigen"). Gewöhnliche Kleinste-Quadrate (OLS)-Anpassungsverfahren behandeln die Daten für erklärende Variablen als fixiert, d. h. ohne Fehler jeglicher Art. Darüber hinaus verlangen OLS-Verfahren, dass die Antwortvariablen eine explizite Funktion der erklärenden Variablen sind; manchmal ist es unpraktisch, die Gleichung explizit zu machen und/oder führt zu Fehlern. ODR kann beide Fälle problemlos handhaben und kann sogar auf den OLS-Fall reduziert werden, wenn dieser für das Problem ausreicht.

ODRPACK ist eine FORTRAN-77-Bibliothek zur Durchführung von ODR mit möglicherweise nichtlinearen Anpassfunktionen. Sie verwendet einen modifizierten Trust-Region-Algorithmus vom Typ Levenberg-Marquardt [1], um die Funktionsparameter abzuschätzen. Die Anpassfunktionen werden durch Python-Funktionen bereitgestellt, die auf NumPy-Arrays operieren. Die erforderlichen Ableitungen können ebenfalls durch Python-Funktionen bereitgestellt werden oder numerisch geschätzt werden. ODRPACK kann explizite oder implizite ODR-Anpassungen durchführen oder OLS. Eingabe- und Ausgabevariablen können mehrdimensional sein. Gewichte können bereitgestellt werden, um unterschiedliche Varianzen der Beobachtungen und sogar Kovarianzen zwischen den Dimensionen der Variablen zu berücksichtigen.

Das Paket scipy.odr bietet eine objektorientierte Schnittstelle zu ODRPACK sowie die Low-Level-Funktion odr.

Weitere Hintergrundinformationen zu ODRPACK finden Sie im ODRPACK User’s Guide, dessen Lektüre empfohlen wird.

Grundlegende Verwendung#

  1. Definieren Sie die Funktion, gegen die Sie anpassen möchten.

    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. Erstellen Sie ein Model.

    linear = Model(f)
    
  3. Erstellen Sie eine Data- oder RealData-Instanz.

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

    oder wenn die tatsächlichen Kovarianzen bekannt sind

    mydata = RealData(x, y, sx=sx, sy=sy)
    
  4. Instanziieren Sie ODR mit Ihren Daten, Ihrem Modell und Ihrer anfänglichen Parameterschätzung.

    myodr = ODR(mydata, linear, beta0=[1., 2.])
    
  5. Führen Sie die Anpassung aus.

    myoutput = myodr.run()
    
  6. Ergebnisse prüfen.

    myoutput.pprint()
    

Referenzen#

[1]

P. T. Boggs und 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, Bd. 112, S. 186, 1990.