我想检验一个假设,即从同一总体中抽取两个样本,而无需对样本或总体的分布进行任何假设。我应该怎么做?
在Wikipedia上,我的印象是Mann Whitney 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)
令人惊讶的是,这是曼·惠特尼(Mann Whitney)检验(?)无法拒绝样本来自同一总体的原假设:
> 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
救命!我应该如何更新代码以检测不同的分布?(如果可以的话,我特别希望基于通用随机化/重采样的方法。)
编辑:
谢谢大家的回答!我很高兴学习更多关于Kolmogorov-Smirnov的信息,这似乎非常适合我的目的。
我了解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测试可以检查它们中的每一个都很棒。