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:
- result
SenSeasonalSlopesResultInstanz 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.
- result
Siehe auch
theilslopesdie analoge Funktion für nicht-saisonale Daten
scipy.stats.theilslopesnicht-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
ivonintra_slopeder Median vondijk[x[:, i]]>>> i = 2 >>> np.allclose(np.median(dijk(x[:, i])), intra_slope[i]) True
und
inter_slopeist der Median der vondijkfü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