Próbuję zrozumieć wynik funkcji testowej Kołmogorowa-Smirnowa (dwie próbki, dwustronne). Oto prosty test.
x <- c(1,2,2,3,3,3,3,4,5,6)
y <- c(2,3,4,5,5,6,6,6,6,7)
z <- c(12,13,14,15,15,16,16,16,16,17)
ks.test(x,y)
# Two-sample Kolmogorov-Smirnov test
#
#data: x and y
#D = 0.5, p-value = 0.1641
#alternative hypothesis: two-sided
#
#Warning message:
#In ks.test(x, y) : cannot compute exact p-value with ties
ks.test(x,z)
#Two-sample Kolmogorov-Smirnov test
#data: x and z
#D = 1, p-value = 9.08e-05
#alternative hypothesis: two-sided
#
#Warning message:
#In ks.test(x, z) : cannot compute exact p-value with ties
ks.test(x,x)
#Two-sample Kolmogorov-Smirnov test
#data: x and x
#D = 0, p-value = 1
#alternative hypothesis: two-sided
#
#Warning message:
#In ks.test(x, x) : cannot compute exact p-value with ties
Jest kilka rzeczy, których tutaj nie rozumiem.
Z pomocy wydaje się, że wartość p odnosi się do hipotezy
var1=var2
. Tutaj jednak oznaczałoby to, że test mówi (p<0.05
):za. Nie mogę tego powiedzieć
X = Y
;b. Można tak powiedzieć
X = Z
;do. Nie mogę tego powiedzieć
X = X
(!)
Poza tym, że x różni się od siebie (!), Jest dla mnie również dość dziwne x=z
, ponieważ obie dystrybucje mają zerowe nakładające się wsparcie. Jak to możliwe?
Według definicji teście
D
powinna być maksymalna różnica tych dwóch rozkładów prawdopodobieństwa, ale na przykład w przypadku,(x,y)
powinno byćD = Max|P(x)-P(y)| = 4
(w przypadku, gdyP(x)
,P(y)
nie są normalizowane) alboD=0.3
(jeśli są one znormalizowane). Dlaczego D różni się od tego?Celowo podałem przykład z wieloma powiązaniami , ponieważ dane, z którymi pracuję, mają wiele identycznych wartości. Dlaczego to myli test? Myślałem, że obliczył rozkład prawdopodobieństwa, na który nie powinny mieć wpływu powtarzające się wartości. Dowolny pomysł?
źródło
dgof::ks.test(x,y,simulate.p.value=TRUE, B=1000)
iMatching::ks.boot(x,y, nboots=1000)
( sekhon.berkeley.edu/matching/ks.boot.html ). Zarówno D, jak i obliczona wartość p są absolutnie identyczne w obu przypadkach. To sprawia, że myślę, że może KS nie jest taki zły, nawet jeśli ktoś ma kilka powiązań i nie ma gwarancji, że metoda zadziała? Powodem, dla którego lubię KS, jest to, że nie jest parametryczne, tj. Nie muszę zakładać rozkładu próbek.D(x,y) = sqrt(100/20)*0.3=0.67
, że wciąż jest inaczej.Aby obliczyć D (z
ks.test
kodu):źródło