Я пытаюсь понять вывод тестовой функции Колмогорова-Смирнова (два примера, двухсторонние). Вот простой тест.
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
Есть несколько вещей, которые я не понимаю здесь.
Из справки кажется, что значение р относится к гипотезе
var1=var2
. Однако здесь это будет означать, что тест говорит (p<0.05
):а. Не могу этого сказать
X = Y
;б. Могу сказать это
X = Z
;с. Не могу сказать, что
X = X
(!)
Помимо того, что кажется, что x отличается от самого себя (!), Для меня также довольно странно, что x=z
оба дистрибутива имеют поддержку перекрытия нулей. Как это возможно?
В соответствии с определением теста,
D
должна быть максимальная разница между двумя распределения вероятностей, но, например , в случае ,(x,y)
он должен бытьD = Max|P(x)-P(y)| = 4
(в случае , когдаP(x)
,P(y)
не нормализованы) илиD=0.3
(если они нормированы). Почему D отличается от этого?Я специально сделал пример со многими связями , так как данные, с которыми я работаю, имеют много одинаковых значений. Почему это смущает тест? Я думал, что он рассчитал распределение вероятностей, на которое не должны влиять повторяющиеся значения. Любая идея?
источник
dgof::ks.test(x,y,simulate.p.value=TRUE, B=1000)
и сMatching::ks.boot(x,y, nboots=1000)
( sekhon.berkeley.edu/matching/ks.boot.html ). И D, и рассчитанное значение p абсолютно идентичны в обоих случаях. Это заставляет меня думать, что, возможно, KS не так уж и плох, даже если у вас несколько связей, и метод не гарантированно работает? Причина, по которой мне нравится KS, заключается в том, что он не параметрический, т.е. мне не нужно предполагать распределение для выборок.D(x,y) = sqrt(100/20)*0.3=0.67
, что по-прежнему отличается.Чтобы вычислить D (из
ks.test
кода):источник