非参数检验是否从同一分布中抽取两个样本


19

我想检验一个假设,即从同一总体中抽取两个样本,而无需对样本或总体的分布进行任何假设。我应该怎么做?

在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:

ECDFs

在这里,我可以直观地看到三个有趣的功能。(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测试可以检查它们中的每一个都很棒。


MW不拒绝并不奇怪。对于单面测试,它将测试Pr(a> b)<0.05,其中a和b是您总体中随机选择的成员。
mdewey

1
有时会说曼恩·惠特尼的假设与两组的“位置”有关,或者与系统随机差异相似。就您的数据而言,两组对称分布在75附近,因此MW绝对不应有任何区别。
Sal Mangiafico

4
这是当我们不清楚测试假设时所造成的困惑的一个很好的例子。不幸的是,人们被教导要使用t检验来比较两个组,而没有真正地认为该检验可以比较两个均值,而存在中位数检验来比较两个中位数,Mann-Whitney可以比较其他东西,分位数回归来比较其他百分位数,用于比较方差的测试,用于比较分布的Kolmogorov-Smirnov等等,我们有时只是说我们要比较两个“人口”,而没有弄清楚我们真正要测试哪个假设。
Sal Mangiafico

经过反思,看来MW测试的Wikipedia页面上非常清楚地陈述了该假设,而我认为这种假设还意味着样本也来自同一分布,这是一种误解(毫无根据的飞跃)。确实,当比较围绕同一中心点对称的两个不同分布时,问题变得显而易见。
卢克·高里(Luke Gorrie)

Answers:


17

Kolmogorov-Smirnov测试是执行此操作的最常用方法,但是还有其他一些选择。

检验基于经验累积分布函数。基本过程是:

  • 选择一种方法来测量ECDF之间的距离。由于ECDF是函数,因此显而易见的候选者是范数,它衡量函数空间中的距离。这个距离是我们的测试统计量大号p
  • 在样本来自相同分布的零假设下找出检验统计量的分布(幸运的是,人们已经在最常见的距离上做到了这一点!)
  • 为您的假设选择一个阈值,如果计算的检验统计量位于点2的分布的尾部,则拒绝空值。α αα

大号

ks.test(a,b)

p

大号2dgofcvm.test()

编辑:

ñ

要将其转换为采样类型的过程,我们可以执行以下操作:

  1. ññ
  2. 计算样本的距离度量。对于KS测试,这只是最大值。经验CDF之间的差异。
  3. 存储结果并返回到步骤1。

最终,您将在原假设下根据检验统计量的分布构建大量样本,您可以使用其分位数以所需的显着性水平进行假设检验。对于KS检验统计量,此分布称为Kolmogorov分布。

注意,对于KS检验,这只是浪费计算工作量,因为分位数在理论上非常简单,但是该过程通常适用于任何假设检验。


谢谢!Kolmogorov-Smirnov检验确实拒绝了原假设,即这些样本来自同一种群。从直觉上讲,比较ECDF很有意义,因为这差不多就是我在直方图中所做的视觉效果。问题:假设我需要从头开始执行此测试,而无需使用R之类的任何工具。是否有一个简单的方法就足够了?我问(也许是基于引导程序吗?),因为我的背景是计算机编程,我发现基于仿真的方法更容易理解。
卢克·戈里

您应该研究随机化或置换。对于非正常测试,我更喜欢这些。他们还符合模拟而非统计的标准
RTbecard

2
@JamesAdamCampbell您可以在另一个答案中对此进行扩展吗?
威尔

1
大号

1
我认为没有任何问题。如果您尝试其中的一些东西,我很想看看结果!看看CI方法和直接KS测试是否总是能给您相同的答案会很酷。我怀疑他们会这样做:)
请问将于
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.