scipy.stats.

quantile#

scipy.stats.quantile(x, p, *, method='linear', axis=0, nan_policy='propagate', keepdims=None)[Quelle]#

Berechnet das p-te Quantil der Daten entlang der angegebenen Achse.

Parameter:
xarray_like von reellen Zahlen

Daten-Array.

parray_like von float

Wahrscheinlichkeit oder Sequenz von Wahrscheinlichkeiten der zu berechnenden Quantile. Werte müssen zwischen 0 und 1 (einschließlich) liegen. Muss eine Länge von 1 entlang der Achse haben, es sei denn, keepdims=True.

methodstr, Standard: ‘linear’

Die Methode zur Schätzung des Quantils. Die verfügbaren Optionen, nummeriert wie in [1], sind

  1. ‘inverted_cdf’

  2. ‘averaged_inverted_cdf’

  3. ‘closest_observation’

  4. ‘interpolated_inverted_cdf’

  5. ‘hazen’

  6. ‘weibull’

  7. ‘linear’ (Standard)

  8. ‘median_unbiased’

  9. ‘normal_unbiased’

‘harrell-davis’ ist ebenfalls verfügbar, um die Quantilschätzung gemäß [2] zu berechnen. Siehe Hinweise für Details.

axisint oder None, Standard: 0

Achse, entlang der die Quantile berechnet werden. None verflacht sowohl x als auch p vor der Berechnung, ohne zu prüfen, ob die ursprünglichen Formen kompatibel waren.

nan_policystr, Standard: ‘propagate’

Definiert, wie mit NaNs in den Eingabedaten x umgegangen wird.

  • propagate: Wenn ein NaN in dem Achsenslice (z. B. Zeile) vorhanden ist, entlang dem die Statistik berechnet wird, enthält der entsprechende Slice der Ausgabe NaN(s).

  • omit: NaNs werden bei der Berechnung weggelassen. Wenn nicht genügend Daten im Achsenslice verbleiben, entlang dem die Statistik berechnet wird, enthält der entsprechende Slice der Ausgabe NaN(s).

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

Wenn NaNs in p vorhanden sind, wird ein ValueError ausgelöst.

keepdimsbool, optional

Betrachten Sie den Fall, dass x 1-D ist und p ein Skalar ist: das Quantil ist eine reduzierende Statistik, und das Standardverhalten ist, ein Skalar zurückzugeben. Wenn keepdims auf True gesetzt ist, wird die Achse nicht reduziert, und das Ergebnis ist ein 1-D-Array mit einem Element.

Der allgemeine Fall ist subtiler, da für jeden Achsenslice von x mehrere Quantile angefordert werden können. Wenn beispielsweise sowohl x als auch p 1-D sind und p.size > 1 ist, kann keine Achse reduziert werden; es muss eine Achse geben, die die Anzahl der durch p.size gegebenen Quantile enthält. Daher

  • Standardmäßig wird die Achse reduziert, wenn möglich (d. h. wenn es genau ein Element von q pro Achsenslice von x gibt).

  • Wenn keepdims auf True gesetzt ist, wird die Achse nicht reduziert.

  • Wenn keepdims auf False gesetzt ist, wird die Achse reduziert, wenn möglich, und andernfalls wird ein Fehler ausgelöst.

Rückgabe:
quantileSkalar oder ndarray

Das/die resultierende(n) Quantil(e). Der dtype ist der Ergebnis-dtype von x und p.

Hinweise

Gegeben eine Stichprobe x aus einer zugrunde liegenden Verteilung, bietet quantile eine nichtparametrische Schätzung der inversen kumulativen Verteilungsfunktion.

Standardmäßig geschieht dies durch Interpolation zwischen benachbarten Elementen in y, einer sortierten Kopie von x

(1-g)*y[j] + g*y[j+1]

wobei der Index j und der Koeffizient g die ganzzahligen und gebrochenen Komponenten von p * (n-1) sind, und n die Anzahl der Elemente in der Stichprobe ist.

Dies ist ein Sonderfall der Gleichung 1 von H&F [1]. Allgemeiner gilt:

  • j = (p*n + m - 1) // 1, und

  • g = (p*n + m - 1) % 1,

wobei m gemäß verschiedenen Konventionen definiert sein kann. Die bevorzugte Konvention kann über den Parameter method ausgewählt werden

Methode

Nummer in H&F

m

interpolated_inverted_cdf

4

0

hazen

5

1/2

weibull

6

p

linear (Standard)

7

1 - p

median_unbiased

8

p/3 + 1/3

normal_unbiased

9

p/4 + 3/8

Beachten Sie, dass die Indizes j und j + 1 auf den Bereich 0 bis n - 1 beschnitten werden, wenn die Ergebnisse der Formel außerhalb des zulässigen Bereichs nicht-negativer Indizes liegen würden. Wenn j auf null beschnitten wird, wird auch g auf null gesetzt. Die -1 in den Formeln für j und g berücksichtigt die 0-basierte Indizierung von Python.

Die obige Tabelle enthält nur die Schätzer aus [1], die kontinuierliche Funktionen der Wahrscheinlichkeit p sind (Schätzer 4-9). SciPy bietet auch die drei diskontinuierlichen Schätzer aus [1] (Schätzer 1-3), wobei j wie oben definiert ist, m wie folgt definiert ist und g gleich 0 ist, wenn index = p*n + m - 1 kleiner als 0 ist, und andernfalls wie unten definiert ist.

  1. inverted_cdf: m = 0 und g = int(index - j > 0)

  2. averaged_inverted_cdf: m = 0 und g = (1 + int(index - j > 0)) / 2

  3. closest_observation: m = -1/2 und g = 1 - int((index == j) & (j%2 == 1))

Eine andere Strategie zur Berechnung von Quantilen aus [2], method='harrell-davis', verwendet eine gewichtete Kombination aller Elemente. Die Gewichte werden berechnet als

\[w_{n, i} = I_{i/n}(a, b) - I_{(i - 1)/n}(a, b)\]

wobei \(n\) die Anzahl der Elemente in der Stichprobe ist, \(i\) die Indizes \(1, 2, ..., n-1, n\) der sortierten Elemente sind, \(a = p (n + 1)\), \(b = (1 - p)(n + 1)\), \(p\) die Wahrscheinlichkeit des Quantils ist und \(I\) die regularisierte, untere unvollständige Betafunktion ist (scipy.special.betainc).

Referenzen

[1] (1,2,3,4)

R. J. Hyndman und Y. Fan, „Sample quantiles in statistical packages,“ The American Statistician, 50(4), S. 361-365, 1996

[2] (1,2)

Harrell, Frank E. und C. E. Davis. „A new distribution-free quantile estimator.“ Biometrika 69.3 (1982): 635-640.

Beispiele

>>> import numpy as np
>>> from scipy import stats
>>> x = np.asarray([[10, 8, 7, 5, 4],
...                 [0, 1, 2, 3, 5]])

Nimmt den Median entlang der letzten Achse.

>>> stats.quantile(x, 0.5, axis=-1)
array([7.,  2.])

Nimmt ein anderes Quantil entlang jeder Achse.

>>> stats.quantile(x, [[0.25], [0.75]], axis=-1, keepdims=True)
array([[5.],
       [3.]])

Nimmt mehrere Quantile entlang jeder Achse.

>>> stats.quantile(x, [0.25, 0.75], axis=-1)
array([[5., 8.],
       [1., 3.]])