scipy.stats.mstats.

sen_seasonal_slopes#

scipy.stats.mstats.sen_seasonal_slopes(x)[Quelle]#

Berechnet saisonale Theil-Sen- und Kendall-Steigungsschätzer.

Die saisonale Verallgemeinerung von Sen's Steigung berechnet die Steigungen zwischen allen Wertepaaren innerhalb einer „Saison“ (Spalte) eines 2D-Arrays. Sie gibt ein Array zurück, das den Median dieser „innerhalb der Saison“-Steigungen für jede Saison enthält (der Theil-Sen-Steigungsschätzer jeder Saison), und sie gibt den Median der inneren Saison-Steigungen über alle Saisons hinweg zurück (der saisonale Kendall-Steigungsschätzer).

Parameter:
x2D array_like

Jede Spalte von x enthält Messungen der abhängigen Variablen innerhalb einer Saison. Die unabhängige Variable (normalerweise Zeit) jeder Saison wird als np.arange(x.shape[0]) angenommen.

Rückgabe:
resultSenSeasonalSlopesResult Instanz

Der Rückgabewert ist ein Objekt mit folgenden Attributen:

intra_slopendarray

Für jede Saison der Theil-Sen-Steigungsschätzer: der Median der inneren Saison-Steigungen.

inter_slopefloat

Der saisonale Kendall-Steigungsschätzer: der Median der inneren Saison-Steigungen *über alle* Saisons hinweg.

Siehe auch

theilslopes

die analoge Funktion für nicht-saisonale Daten

scipy.stats.theilslopes

nicht-saisonale Steigungen für nicht-maskierte Arrays

Hinweise

Die Steigungen \(d_{ijk}\) innerhalb der Saison \(i\) sind

\[d_{ijk} = \frac{x_{ij} - x_{ik}} {j - k}\]

für Paare von unterschiedlichen ganzzahligen Indizes \(j, k\) von \(x\).

Element \(i\) des zurückgegebenen intra_slope Arrays ist der Median der \(d_{ijk}\) über alle \(j < k\); dies ist der Theil-Sen-Steigungsschätzer der Saison \(i\). Der zurückgegebene Wert inter_slope, besser bekannt als der saisonale Kendall-Steigungsschätzer, ist der Median der \(d_{ijk}\) über alle \(i, j, k\).

Referenzen

[1]

Hirsch, Robert M., James R. Slack, und Richard A. Smith. „Techniques of trend analysis for monthly water quality data.“ Water Resources Research 18.1 (1982): 107-121.

Beispiele

Angenommen, wir haben 100 Beobachtungen einer abhängigen Variablen für jede von vier Jahreszeiten

>>> import numpy as np
>>> rng = np.random.default_rng()
>>> x = rng.random(size=(100, 4))

Wir berechnen die saisonalen Steigungen als

>>> from scipy import stats
>>> intra_slope, inter_slope = stats.mstats.sen_seasonal_slopes(x)

Wenn wir eine Funktion definieren, um alle Steigungen zwischen Beobachtungen innerhalb einer Saison zu berechnen

>>> def dijk(yi):
...     n = len(yi)
...     x = np.arange(n)
...     dy = yi - yi[:, np.newaxis]
...     dx = x - x[:, np.newaxis]
...     # we only want unique pairs of distinct indices
...     mask = np.triu(np.ones((n, n), dtype=bool), k=1)
...     return dy[mask]/dx[mask]

dann ist das Element i von intra_slope der Median von dijk[x[:, i]]

>>> i = 2
>>> np.allclose(np.median(dijk(x[:, i])), intra_slope[i])
True

und inter_slope ist der Median der von dijk für alle Saisons zurückgegebenen Werte

>>> all_slopes = np.concatenate([dijk(x[:, i]) for i in range(x.shape[1])])
>>> np.allclose(np.median(all_slopes), inter_slope)
True

Da die Daten zufällig generiert werden, würden wir erwarten, dass die Mediansteigungen sowohl innerhalb als auch über alle Jahreszeiten hinweg nahe Null liegen, und das sind sie tatsächlich

>>> intra_slope.data
array([ 0.00124504, -0.00277761, -0.00221245, -0.00036338])
>>> inter_slope
-0.0010511779872922058