Понимание теста Колмогорова-Смирнова в R

17

Я пытаюсь понять вывод тестовой функции Колмогорова-Смирнова (два примера, двухсторонние). Вот простой тест.

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

Есть несколько вещей, которые я не понимаю здесь.

  1. Из справки кажется, что значение р относится к гипотезе var1=var2. Однако здесь это будет означать, что тест говорит ( p<0.05):

    а. Не могу этого сказать X = Y;

    б. Могу сказать это X = Z;

    с. Не могу сказать, что X = X(!)

Помимо того, что кажется, что x отличается от самого себя (!), Для меня также довольно странно, что x=zоба дистрибутива имеют поддержку перекрытия нулей. Как это возможно?

  1. В соответствии с определением теста, Dдолжна быть максимальная разница между двумя распределения вероятностей, но, например , в случае , (x,y)он должен быть D = Max|P(x)-P(y)| = 4(в случае , когда P(x), P(y)не нормализованы) или D=0.3 (если они нормированы). Почему D отличается от этого?

  2. Я специально сделал пример со многими связями , так как данные, с которыми я работаю, имеют много одинаковых значений. Почему это смущает тест? Я думал, что он рассчитал распределение вероятностей, на которое не должны влиять повторяющиеся значения. Любая идея?

Нонанкур
источник

Ответы:

21

Тест KS основан на тестировании «одинаковости» двух независимых выборок из непрерывного распределения (как указано на странице справки). Если это так, то вероятность связей должна быть удивительно мала (также указано). Статистика теста - это максимальное расстояние между ECDF двух выборок. Значение p - это вероятность увидеть статистику теста выше или выше, чем наблюдаемая, если две выборки были взяты из одного и того же распределения. (Это не «вероятность того, что var1 = var2». Более того, 1-p_value НЕ является той же вероятностью.) Высокие значения p говорят, что вы не можетепретендовать на статистическую поддержку разницы, но низкие значения р не свидетельствуют о одинаковости. Низкие значения p могут возникать при малых размерах выборки (как показывает ваш пример) или при наличии интересных, но небольших различий, например, наложенных колебательных возмущений. Если вы работаете с ситуациями с большим количеством связей, это предполагает, что вам может понадобиться использовать тест, который более точно соответствует вашей ситуации с данными.

Мое объяснение того, почему связи были нарушением допущений, не было утверждением, что связи аннулировали результаты. Статистические свойства теста KS на практике относительно устойчивы или устойчивы к ошибкам этого предположения. Основная проблема с тестом KS, как я вижу, заключается в том, что он является чрезмерно общим и, как следствие, недостаточно силен для выявления значимых различий интересного характера. Тест KS является очень общим тестом и имеет довольно низкую мощность для более конкретных гипотез.

С другой стороны, я также вижу KS-тест (или «еще более мощный» тест Андерсона Дарлинга или Лиллефорса (sp?)), Используемый для проверки «нормальности» в ситуациях, когда такой тест совершенно неоправдан, например, тест на нормальность переменных, используемых в качестве предикторов в регрессионной модели до подбора. Можно было бы законно хотят испытывать нормальность из тех остатков , так это то , что предполагается в теории моделирования. Даже тогда скромные отклонения от нормальности остатков обычно не ставят под сомнение достоверность результатов. Людям лучше использовать надежные методы для проверки важного влияния «ненормальности» на выводы о статистической значимости.

Возможно, вам следует проконсультироваться с местным статистиком? Это может помочь вам в более точном определении статистического вопроса и, следовательно, иметь больше шансов определить разницу, если она действительно существует. Это было бы предотвращением «ошибки типа II»: неспособность поддержать заключение о разнице, когда такая разница присутствует.

Dwin
источник
Я протестировал одни и те же примеры как с, так 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, заключается в том, что он не параметрический, т.е. мне не нужно предполагать распределение для выборок.
Nonancourt
Тем не менее, я до сих пор не могу понять значения D. Я подумал, что это может быть префактор в виде sqrt (m * n / (m + n)), как здесь , но это может сделать D(x,y) = sqrt(100/20)*0.3=0.67, что по-прежнему отличается.
Nonancourt
3

Чтобы вычислить D (из ks.testкода):

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
Роберт
источник