scipy.stats.

cramervonmises#

scipy.stats.cramervonmises(rvs, cdf, args=(), *, axis=0, nan_policy='propagate', keepdims=False)[Quelle]#

Führt den Cramér-von-Mises-Test für die Anpassungsgüte für eine Stichprobe durch.

Dies führt einen Test der Anpassungsgüte einer kumulativen Verteilungsfunktion (CDF) \(F\) im Vergleich zur empirischen Verteilungsfunktion \(F_n\) von beobachteten Zufallsvariablen \(X_1, ..., X_n\) durch, die als unabhängig und identisch verteilt angenommen werden ([1]). Die Nullhypothese ist, dass die \(X_i\) die kumulative Verteilung \(F\) haben.

Parameter:
rvsarray_like

Ein 1-D-Array von beobachteten Werten der Zufallsvariablen \(X_i\). Die Stichprobe muss mindestens zwei Beobachtungen enthalten.

cdfstr oder callable

Die kumulative Verteilungsfunktion \(F\), gegen die die Beobachtungen getestet werden. Wenn es sich um einen String handelt, sollte es der Name einer Verteilung in scipy.stats sein. Wenn es sich um ein Callable handelt, wird dieses Callable zur Berechnung der CDF verwendet: cdf(x, *args) -> float.

argstuple, optional

Verteilungsparameter. Diese werden als bekannt angenommen; siehe Hinweise.

axisint oder None, Standard: 0

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:
resobject with attributes
statisticfloat

Cramér-von-Mises-Statistik.

pvaluefloat

Der p-Wert.

Hinweise

Hinzugefügt in Version 1.6.0.

Der p-Wert stützt sich auf die Näherung gemäß Gleichung 1.8 in [2]. Es ist wichtig zu bedenken, dass der p-Wert nur dann genau ist, wenn eine einfache Hypothese getestet wird, d. h. die Parameter der Referenzverteilung bekannt sind. Wenn die Parameter aus den Daten geschätzt werden (zusammengesetzte Hypothese), ist der berechnete p-Wert nicht zuverlässig.

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

[2]

Csörgő, S. und Faraway, J. (1996). The Exact and Asymptotic Distribution of Cramér-von Mises Statistics. Journal of the Royal Statistical Society, S. 221-234.

Beispiele

Angenommen, wir möchten testen, ob Daten, die von scipy.stats.norm.rvs generiert wurden, tatsächlich aus der Standardnormalverteilung stammen. Wir wählen ein Signifikanzniveau von alpha=0.05.

>>> import numpy as np
>>> from scipy import stats
>>> rng = np.random.default_rng()
>>> x = stats.norm.rvs(size=500, random_state=rng)
>>> res = stats.cramervonmises(x, 'norm')
>>> res.statistic, res.pvalue
(0.1072085112565724, 0.5508482238203407)

Der p-Wert überschreitet unser gewähltes Signifikanzniveau, daher lehnen wir die Nullhypothese nicht ab, dass die beobachtete Stichprobe aus der Standardnormalverteilung stammt.

Nun wollen wir prüfen, ob dieselben Stichproben, verschoben um 2,1, mit der Tatsache vereinbar sind, dass sie aus einer Normalverteilung mit einem Mittelwert von 2 stammen.

>>> y = x + 2.1
>>> res = stats.cramervonmises(y, 'norm', args=(2,))
>>> res.statistic, res.pvalue
(0.8364446265294695, 0.00596286797008283)

Hier haben wir das Schlüsselwort args verwendet, um den Mittelwert (loc) der Normalverteilung anzugeben, gegen die die Daten getestet werden. Dies entspricht dem Folgenden, bei dem wir eine gefrorene Normalverteilung mit einem Mittelwert von 2,1 erstellen und dann deren cdf Methode als Argument übergeben.

>>> frozen_dist = stats.norm(loc=2)
>>> res = stats.cramervonmises(y, frozen_dist.cdf)
>>> res.statistic, res.pvalue
(0.8364446265294695, 0.00596286797008283)

In beiden Fällen würden wir die Nullhypothese ablehnen, dass die beobachtete Stichprobe aus einer Normalverteilung mit einem Mittelwert von 2 (und einer Standardvarianz von 1) stammt, da der p-Wert kleiner ist als unser gewähltes Signifikanzniveau.