Zrozumienie testu Kołmogorowa-Smirnowa w R.

17

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.

  1. 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?

  1. Według definicji teście Dpowinna 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, gdy P(x), P(y)nie są normalizowane) albo D=0.3 (jeśli są one znormalizowane). Dlaczego D różni się od tego?

  2. 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ł?

Nonancourt
źródło

Odpowiedzi:

21

Test KS opiera się na testowaniu „identyczności” dwóch niezależnych próbek z ciągłego rozkładu (jak podaje strona pomocy). Jeśli tak jest, prawdopodobieństwo powiązań powinno być zadziwiająco małe (również stwierdzone). Statystyka testowa to maksymalna odległość między ECDF dwóch próbek. Wartość p jest prawdopodobieństwem zobaczenia statystyki testowej jako wysokiej lub wyższej niż obserwowana, jeśli dwie próbki zostały pobrane z tego samego rozkładu. (To nie jest „prawdopodobieństwo, że var1 = var2”. Co więcej, 1-p_wartość NIE jest również tym prawdopodobieństwem.) Wysokie wartości p mówią, że nie możesztwierdzą, że istnieje różnica statystyczna, ale niskie wartości p nie są dowodem identyczności. Niskie wartości p mogą wystąpić przy niskich rozmiarach próby (jak podaje twój przykład) lub obecności interesujących, ale niewielkich różnic, np. Nakładających się zaburzeń oscylacyjnych. Jeśli pracujesz z sytuacjami z dużą liczbą powiązań, sugeruje to, że możesz potrzebować testu, który bardziej pasuje do twojej sytuacji danych.

Moje wyjaśnienie, dlaczego więzi były pogwałceniem założeń, nie było twierdzeniem, że więzi unieważniły wyniki. Właściwości statystyczne testu KS w praktyce są stosunkowo odporne lub odporne na niepowodzenie tego założenia. Główny problem z testem KS, jak widzę, polega na tym, że jest on zbyt ogólny, aw konsekwencji ma zbyt małą moc, aby zidentyfikować znaczące różnice o interesującym charakterze. Test KS jest bardzo ogólnym testem i ma raczej niską moc dla bardziej szczegółowych hipotez.

Z drugiej strony widzę również test KS (lub „jeszcze potężniejszy” test Andersona Darlinga lub Lilleforsa (sp?)) Używany do testowania „normalności” w sytuacjach, w których taki test jest całkowicie nieuzasadniony, takich jak test na normalność zmiennych używanych jako predyktory w modelu regresji przed dopasowaniem. Ktoś mógłby słusznie chcą być testowanie normalności z tych reszt , ponieważ to, co zakłada w teorii modelowania. Nawet wtedy niewielkie odstępstwa od normalności reszt zasadniczo nie podważają wiarygodności wyników. Lepiej byłoby stosować solidne metody sprawdzania istotnego wpływu „nienormalności” na wnioski dotyczące istotności statystycznej.

Być może powinieneś skonsultować się z lokalnym statystykem? Może pomóc ci w dokładniejszym zdefiniowaniu pytania statystycznego, a zatem masz większą szansę na zidentyfikowanie różnicy, jeśli taka istnieje. Byłoby to uniknięcie „błędu typu II”: niezapewnienia wniosku o różnicy, gdy taka różnica występuje.

DWin
źródło
Testowałem te same przykłady zarówno z, jak dgof::ks.test(x,y,simulate.p.value=TRUE, B=1000)i Matching::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.
Nonancourt,
Jednak nadal nie mogę zrozumieć wartości D. Myślałem, że może to być prefaktor jak sqrt (m * n / (m + n)) jak tutaj , ale to by sprawiło D(x,y) = sqrt(100/20)*0.3=0.67, że wciąż jest inaczej.
Nonancourt,
3

Aby obliczyć D (z ks.testkodu):

ks.test(x,y)

    Two-sample Kolmogorov-Smirnov test

data:  x and y
D = 0.5, p-value = 0.1641
alternative hypothesis: two-sided

alternative <- "two.sided"
x <- x[!is.na(x)]
n <- length(x)
  y <- y[!is.na(y)]
  n.x <- as.double(n)
  n.y <- length(y)
  w <- c(x, y)
  z <- cumsum(ifelse(order(w) <= n.x, 1/n.x, -1/n.y))
  z <- z[c(which(diff(sort(w)) != 0), n.x + n.y)] #exclude ties
  STATISTIC <- switch(alternative, two.sided = max(abs(z)), 
                      greater = max(z), less = -min(z))
  STATISTIC

[1] 0.5
Robert
źródło