scipy.stats.

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 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:
resObjekt mit Attributen
statisticfloat

Cramér-von-Mises-Statistik.

pvaluefloat

Der p-Wert.

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 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] (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.rvs generiert 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.