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.statssein. 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 einValueErrorausgelö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.
Siehe auch
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 innp.ndarraykonvertiert. In diesem Fall ist die Ausgabe eine Skalar- odernp.ndarraymit geeigneter Form anstelle eines 2D-np.matrix. Ebenso werden, während maskierte Elemente von Masked Arrays ignoriert werden, die Ausgabe eine Skalar- odernp.ndarrayanstelle eines Masked Arrays mitmask=Falsesein.Referenzen
[1]Cramér-von-Mises-Kriterium, Wikipedia, https://en.wikipedia.org/wiki/Cram%C3%A9r%E2%80%93von_Mises_criterion
[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.rvsgeneriert wurden, tatsächlich aus der Standardnormalverteilung stammen. Wir wählen ein Signifikanzniveau vonalpha=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 derencdfMethode 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.