scipy.stats.

theilslopes#

scipy.stats.theilslopes(y, x=None, alpha=0.95, method='separate', *, axis=None, nan_policy='propagate', keepdims=False)[Quelle]#

Berechnet den Theil-Sen-Schätzer für eine Menge von Punkten (x, y).

theilslopes implementiert eine Methode zur robusten linearen Regression. Sie berechnet die Steigung als Median aller Steigungen zwischen gepaarten Werten.

Parameter:
yarray_like

Abhängige Variable.

xarray_like oder None, optional

Unabhängige Variable. Wenn None, wird stattdessen arange(len(y)) verwendet.

alphafloat, optional

Konfidenzgrad zwischen 0 und 1. Standard ist eine 95%ige Konfidenz. Beachten Sie, dass alpha symmetrisch um 0,5 ist, d. h. sowohl 0,1 als auch 0,9 werden als „ermittle das 90%ige Konfidenzintervall“ interpretiert.

method{‘joint’, ‘separate’}, optional

Methode zur Berechnung der Schätzung für den Achsenabschnitt. Folgende Methoden werden unterstützt:

  • ‘joint’: Verwendet np.median(y - slope * x) als Achsenabschnitt.

  • ‘separate’: Verwendet np.median(y) - slope * np.median(x)

    als Achsenabschnitt.

Standard ist ‘separate’.

Hinzugefügt in Version 1.8.0.

axisint oder None, Standard: None

Wenn es sich um eine ganze Zahl handelt, ist dies die Achse des Eingabearrays, entlang der die Statistik berechnet wird. Die Statistik jedes Achsen-Slices (z. B. Zeile) der Eingabe erscheint dann in einem entsprechenden Element der Ausgabe. Wenn None, wird die Eingabe vor der Berechnung der Statistik geglättet.

nan_policy{‘propagate’, ‘omit’, ‘raise’}

Definiert, wie Eingabe-NaNs behandelt werden.

  • propagate: Wenn ein NaN in der Achsen-Slice (z. B. Zeile) vorhanden ist, entlang der die Statistik berechnet wird, wird der entsprechende Eintrag der Ausgabe NaN sein.

  • omit: NaNs werden bei der Berechnung weggelassen. Wenn im Achsen-Slice, entlang dem die Statistik berechnet wird, nicht genügend Daten verbleiben, wird der entsprechende Eintrag der Ausgabe NaN sein.

  • raise: Wenn ein NaN vorhanden ist, wird ein ValueError ausgelöst.

keepdimsbool, Standard: False

Wenn dies auf True gesetzt ist, bleiben die reduzierten Achsen im Ergebnis als Dimensionen mit der Größe eins erhalten. Mit dieser Option wird das Ergebnis korrekt gegen das Eingabearray gestreut (broadcasted).

Rückgabe:
resultTheilslopesResult-Instanz

Der Rückgabewert ist ein Objekt mit folgenden Attributen:

slopefloat

Theil-Steigung.

interceptfloat

Achsenabschnitt der Theil-Geraden.

low_slopefloat

Untere Grenze des Konfidenzintervalls für die Steigung.

high_slopefloat

Obere Grenze des Konfidenzintervalls für die Steigung.

Siehe auch

siegelslopes

eine ähnliche Technik unter Verwendung wiederholter Mediane

Hinweise

Die Implementierung von theilslopes folgt [1]. Der Achsenabschnitt ist in [1] nicht definiert, und hier wird er als median(y) - slope*median(x) definiert, wie in [3] angegeben. Andere Definitionen des Achsenabschnitts existieren in der Literatur, wie z. B. median(y - slope*x) in [4]. Die Vorgehensweise zur Berechnung des Achsenabschnitts kann durch den Parameter method bestimmt werden. Ein Konfidenzintervall für den Achsenabschnitt wird nicht angegeben, da diese Frage in [1] nicht behandelt wird.

Zur Kompatibilität mit älteren SciPy-Versionen verhält sich der Rückgabewert wie ein namedtuple der Länge 4 mit den Feldern slope, intercept, low_slope und high_slope, sodass man weiterhin schreiben kann

slope, intercept, low_slope, high_slope = theilslopes(y, x)

Seit SciPy 1.9 werden np.matrix-Eingaben (für neuen Code nicht empfohlen) vor der Berechnung in np.ndarray konvertiert. In diesem Fall ist die Ausgabe eine Skalar- oder np.ndarray mit geeigneter Form anstelle eines 2D-np.matrix. Ebenso werden, während maskierte Elemente von Masked Arrays ignoriert werden, die Ausgabe eine Skalar- oder np.ndarray anstelle eines Masked Arrays mit mask=False sein.

Referenzen

[1] (1,2,3)

P.K. Sen, „Estimates of the regression coefficient based on Kendall’s tau“, J. Am. Stat. Assoc., Vol. 63, S. 1379-1389, 1968.

[2]

H. Theil, „A rank-invariant method of linear and polynomial regression analysis I, II and III“, Nederl. Akad. Wetensch., Proc. 53:, S. 386-392, S. 521-525, S. 1397-1412, 1950.

[3]

W.L. Conover, „Practical nonparametric statistics“, 2. Aufl., John Wiley and Sons, New York, S. 493.

Beispiele

>>> import numpy as np
>>> from scipy import stats
>>> import matplotlib.pyplot as plt
>>> x = np.linspace(-5, 5, num=150)
>>> y = x + np.random.normal(size=x.size)
>>> y[11:15] += 10  # add outliers
>>> y[-5:] -= 7

Berechne die Steigung, den Achsenabschnitt und das 90%ige Konfidenzintervall. Zum Vergleich wird auch die Kleinste-Quadrate-Anpassung mit linregress berechnet.

>>> res = stats.theilslopes(y, x, 0.90, method='separate')
>>> lsq_res = stats.linregress(x, y)

Zeichne die Ergebnisse. Die Theil-Sen-Regressionsgerade ist rot dargestellt, wobei die gestrichelten roten Linien das Konfidenzintervall der Steigung veranschaulichen (beachten Sie, dass die gestrichelten roten Linien nicht das Konfidenzintervall der Regression sind, da das Konfidenzintervall des Achsenabschnitts nicht enthalten ist). Die grüne Linie zeigt zum Vergleich die Kleinste-Quadrate-Anpassung.

>>> fig = plt.figure()
>>> ax = fig.add_subplot(111)
>>> ax.plot(x, y, 'b.')
>>> ax.plot(x, res[1] + res[0] * x, 'r-')
>>> ax.plot(x, res[1] + res[2] * x, 'r--')
>>> ax.plot(x, res[1] + res[3] * x, 'r--')
>>> ax.plot(x, lsq_res[1] + lsq_res[0] * x, 'g-')
>>> plt.show()
../../_images/scipy-stats-theilslopes-1.png