Я хотел бы проверить гипотезу о том, что две выборки взяты из одной и той же совокупности, не делая никаких предположений о распределении выборок или совокупности. Как мне это сделать?
Из Википедии у меня сложилось впечатление, что 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 может проверить каждую из них.
Ответы:
Тест Колмогорова-Смирнова является наиболее распространенным способом сделать это, но есть и другие варианты.
Тесты основаны на эмпирических кумулятивных функциях распределения. Основная процедура:
dgof
cvm.test()
РЕДАКТИРОВАТЬ:
Чтобы превратить это в процедуру типа выборки, мы можем сделать следующее:
В конце концов вы соберете много выборок из распределения статистики теста в соответствии с нулевой гипотезой, чьи квантили вы можете использовать для проведения теста вашей гипотезы на любом уровне значимости, который вы хотите. Для статистики теста KS это распределение называется распределением Колмогорова.
Обратите внимание, что для теста KS это просто трата вычислительных усилий, потому что квантили очень просто охарактеризовать теоретически, но процедура обычно применима к любому тесту гипотезы.
источник