Я хотел бы проверить гипотезу о том, что две выборки взяты из одной и той же совокупности, не делая никаких предположений о распределении выборок или совокупности. Как мне это сделать?
Из Википедии у меня сложилось впечатление, что U-критерий Манна-Уитни должен быть подходящим, но на практике он мне не подходит.
Для конкретности я создал набор данных с двумя выборками (a, b), которые являются большими (n = 10000) и взяты из двух популяций, которые не являются нормальными (бимодальные), похожи (то же самое среднее), но различны (стандартное отклонение вокруг «горбов».) Я ищу тест, который распознает, что эти образцы не из одной популяции.
Вид гистограммы:
Код R:
a <- tibble(group = "a",
n = c(rnorm(1e4, mean=50, sd=10),
rnorm(1e4, mean=100, sd=10)))
b <- tibble(group = "b",
n = c(rnorm(1e4, mean=50, sd=3),
rnorm(1e4, mean=100, sd=3)))
ggplot(rbind(a,b), aes(x=n, fill=group)) +
geom_histogram(position='dodge', bins=100)
Вот тест Манна Уитни, который на удивление (?) Не смог отвергнуть нулевую гипотезу о том, что выборки относятся к одной популяции:
> wilcox.test(n ~ group, rbind(a,b))
Wilcoxon rank sum test with continuity correction
data: n by group
W = 199990000, p-value = 0.9932
alternative hypothesis: true location shift is not equal to 0
Помогите! Как мне обновить код, чтобы обнаружить разные дистрибутивы? (Я бы особенно хотел метод, основанный на общей рандомизации / повторной выборке, если таковой имеется.)
РЕДАКТИРОВАТЬ:
Спасибо всем за ответы! Я с волнением узнаю больше о Колмогорове-Смирнове, который кажется очень подходящим для моих целей.
Я понимаю, что тест KS сравнивает эти ECDF двух образцов:
Здесь я вижу наглядно три интересные особенности. (1) Образцы из разных распределений. (2) A явно выше B в определенных точках. (3) A явно ниже B в некоторых других точках.
Кажется, что тест KS может проверить гипотезу каждой из этих функций:
> ks.test(a$n, b$n)
Two-sample Kolmogorov-Smirnov test
data: a$n and b$n
D = 0.1364, p-value < 2.2e-16
alternative hypothesis: two-sided
> ks.test(a$n, b$n, alternative="greater")
Two-sample Kolmogorov-Smirnov test
data: a$n and b$n
D^+ = 0.1364, p-value < 2.2e-16
alternative hypothesis: the CDF of x lies above that of y
> ks.test(a$n, b$n, alternative="less")
Two-sample Kolmogorov-Smirnov test
data: a$n and b$n
D^- = 0.1322, p-value < 2.2e-16
alternative hypothesis: the CDF of x lies below that of y
Это действительно здорово! У меня есть практический интерес к каждой из этих функций, и поэтому здорово, что тест KS может проверить каждую из них.