Ich kann nicht herausfinden, wie ein KS-Test mit zwei Stichproben in Scipy durchgeführt wird.
Nach dem Lesen der Dokumentation scipy kstest
Ich kann sehen, wie man testet, wo eine Verteilung mit der Standardnormalverteilung identisch ist
from scipy.stats import kstest
import numpy as np
x = np.random.normal(0,1,1000)
test_stat = kstest(x, 'norm')
#>>> test_stat
#(0.021080234718821145, 0.76584491300591395)
Dies bedeutet, dass wir bei einem p-Wert von 0,76 die Nullhypothese, dass die beiden Verteilungen identisch sind, nicht ablehnen können.
Ich möchte jedoch zwei Verteilungen vergleichen und sehen, ob ich die Nullhypothese, dass sie identisch sind, ablehnen kann, etwa:
from scipy.stats import kstest
import numpy as np
x = np.random.normal(0,1,1000)
z = np.random.normal(1.1,0.9, 1000)
und testen Sie, ob x und z identisch sind
Ich habe das Naive versucht:
test_stat = kstest(x, z)
und bekam den folgenden Fehler:
TypeError: 'numpy.ndarray' object is not callable
Gibt es eine Möglichkeit, einen KS-Test mit zwei Stichproben in Python durchzuführen? Wenn ja, wie soll ich das machen?
Danke im Voraus
python
numpy
scipy
statistics
distribution
Akavall
quelle
quelle
Antworten:
Sie verwenden den KS-Test mit einer Stichprobe. Sie möchten wahrscheinlich den Test mit zwei Stichproben
ks_2samp
:>>> from scipy.stats import ks_2samp >>> import numpy as np >>> >>> np.random.seed(12345678) >>> x = np.random.normal(0, 1, 1000) >>> y = np.random.normal(0, 1, 1000) >>> z = np.random.normal(1.1, 0.9, 1000) >>> >>> ks_2samp(x, y) Ks_2sampResult(statistic=0.022999999999999909, pvalue=0.95189016804849647) >>> ks_2samp(x, z) Ks_2sampResult(statistic=0.41800000000000004, pvalue=3.7081494119242173e-77)
Die Ergebnisse können wie folgt interpretiert werden:
Sie können entweder den
statistic
von Python angegebenen Wert mit der kritischen Wertetabelle des KS-Tests entsprechend Ihrer Stichprobengröße vergleichen. Wenn derstatistic
Wert höher als der kritische Wert ist, unterscheiden sich die beiden Verteilungen.Oder Sie können das
p-value
mit einem Signifikanzniveau a vergleichen , normalerweise a = 0,05 oder 0,01 (Sie entscheiden, je niedriger a ist, desto signifikanter). Wenn der p-Wert niedriger als a ist , ist es sehr wahrscheinlich, dass die beiden Verteilungen unterschiedlich sind.quelle
statistic
undp-value
ansehen?Dies ist, was die scipy Dokumente sagen:
Kann nicht ablehnen bedeutet nicht, dass wir bestätigen.
quelle
For an identical distribution, we cannot reject the null hypothesis since the p-value is high, 41%: >>> >>> rvs4 = stats.norm.rvs(size=n2, loc=0.0, scale=1.0) >>> stats.ks_2samp(rvs1, rvs4) (0.07999999999999996, 0.41126949729859719)