cramervonmises_2samp#
- scipy.stats.cramervonmises_2samp(x, y, method='auto', *, axis=0, nan_policy='propagate', keepdims=False)[Quelle]#
Führt den Cramér-von-Mises-Test für zwei Stichproben zur Anpassungsgüte durch.
Dies ist die Zwei-Stichproben-Version des Cramér-von-Mises-Tests ([1]): Für zwei unabhängige Stichproben \(X_1, ..., X_n\) und \(Y_1, ..., Y_m\) lautet die Nullhypothese, dass die Stichproben aus derselben (nicht spezifizierten) kontinuierlichen Verteilung stammen.
- Parameter:
- xarray_like
Ein 1-D-Array mit beobachteten Werten der Zufallsvariablen \(X_i\). Muss mindestens zwei Beobachtungen enthalten.
- yarray_like
Ein 1-D-Array mit beobachteten Werten der Zufallsvariablen \(Y_i\). Muss mindestens zwei Beobachtungen enthalten.
- method{‘auto’, ‘asymptotic’, ‘exact’}, optional
Die Methode zur Berechnung des p-Wertes, siehe Hinweise für Details. Der Standardwert ist „auto“.
- 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:
- resObjekt mit Attributen
- statisticfloat
Cramér-von-Mises-Statistik.
- pvaluefloat
Der p-Wert.
Siehe auch
Hinweise
Hinzugefügt in Version 1.7.0.
Die Statistik wird gemäß Gleichung 9 in [2] berechnet. Die Berechnung des p-Wertes hängt vom Schlüsselwort method ab.
asymptotic: Der p-Wert wird durch Verwendung der Grenzverteilung der Teststatistik angenähert.exact: Der exakte p-Wert wird durch Aufzählung aller möglichen Kombinationen der Teststatistik berechnet, siehe [2].
Wenn
method='auto', wird der exakte Ansatz verwendet, wenn beide Stichproben gleich oder weniger als 20 Beobachtungen enthalten, andernfalls wird die asymptotische Verteilung verwendet.Wenn die zugrunde liegende Verteilung nicht kontinuierlich ist, ist der p-Wert wahrscheinlich konservativ (Abschnitt 6.2 in [3]). Bei der Rangbildung der Daten zur Berechnung der Teststatistik werden bei Gleichständen Mittelränge verwendet.
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
[2] (1,2)Anderson, T.W. (1962). On the distribution of the two-sample Cramer-von-Mises criterion. The Annals of Mathematical Statistics, S. 1148-1159.
[3]Conover, W.J., Practical Nonparametric Statistics, 1971.
Beispiele
Angenommen, wir möchten testen, ob zwei Stichproben, die von
scipy.stats.norm.rvsgeneriert wurden, dieselbe Verteilung aufweisen. 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=100, random_state=rng) >>> y = stats.norm.rvs(size=70, random_state=rng) >>> res = stats.cramervonmises_2samp(x, y) >>> res.statistic, res.pvalue (0.29376470588235293, 0.1412873014573014)
Der p-Wert übersteigt unser gewähltes Signifikanzniveau, daher lehnen wir die Nullhypothese, dass die beobachteten Stichproben aus derselben Verteilung stammen, nicht ab.
Bei kleinen Stichprobengrößen kann man exakte p-Werte berechnen.
>>> x = stats.norm.rvs(size=7, random_state=rng) >>> y = stats.t.rvs(df=2, size=6, random_state=rng) >>> res = stats.cramervonmises_2samp(x, y, method='exact') >>> res.statistic, res.pvalue (0.197802197802198, 0.31643356643356646)
Der p-Wert, der auf der asymptotischen Verteilung basiert, ist auch bei kleiner Stichprobengröße eine gute Näherung.
>>> res = stats.cramervonmises_2samp(x, y, method='asymptotic') >>> res.statistic, res.pvalue (0.197802197802198, 0.2966041181527128)
Unabhängig von der Methode würde man in diesem Beispiel die Nullhypothese nicht auf dem gewählten Signifikanzniveau ablehnen.