使用 Mann-Whitney 检验的 2 个非正态样本的“中心”差异

机器算法验证 非参数 结构方程建模 wilcoxon-mann-whitney 检验
2022-04-07 05:52:29

我有 2 个不同大小的非正态分布样本(N1~=N2)。

为了评估这些样本之间是否存在显着差异,我使用了 Mann Whitney U 检验(ranksum在 MATLAB 中)。

现在我想评估人口差异有多大。对于正态分布的数据,我只会使用具有 SEM 置信区间的均值差异。

然而,对于非参数数据,我的 Wikipedia 研究建议使用 Hodges-Lehmann 估计器。我的问题是:

  1. 霍奇斯-莱曼估计量真的正确吗?
  2. 如何计算 HL 估计器的置信区间(如 SEM)
  3. 如何在 MATLAB 中实现它?

谢谢

1个回答

是的,如果您的备选方案是轮班备选方案,则相应的估计是 Hodges-Lehmann。

估计很容易。

Hodges Lehmann 估计是交叉样本成对差异的样本中位数。

对于非常大的样本,有一些有效的方法(例如,对两个样本进行排序,然后使用其中的信息来加速中位数的搜索)。

我将假设您的样本没有那么大以至于值得这样做,在这种情况下,您只需要找到所有成对差异并找到结果的中位数。

例如,如果您的 x-sample 是:

16.388  6.775 18.270 17.034 18.825 16.197 16.709 18.188  9.999

你的 y 样本是:

 9.305  9.799 11.103

那么差分矩阵 xy 是

   7.083  6.589  5.285
  -2.530 -3.024 -4.328
   8.965  8.471  7.167
   7.729  7.235  5.931
   9.520  9.026  7.722
   6.892  6.398  5.094
   7.404  6.910  5.606
   8.883  8.389  7.085
   0.694  0.200 -1.104

(这里的列对应于特定的 y,行对应于特定的 y)。然后,您取整组差异的中位数。

(在 R 中,这只是一个问题:

> median(outer(x,y,"-"))
[1] 6.91

毫无疑问,这在 Matlab 中同样容易;会产生类似[X,Y] = meshgrid(x,y); Z = X - Y; 的工作来生成差异矩阵吗?)

如果您的样本太大以至于这不可行,您应该指出这一点。


我不知道为什么它之前没有点击,但是在 Wilcoxon-Mann-Whitney (WMW) 测试中为诸如 Hodges-Lehmann 移位参数之类的东西找到一个区间的基本概念非常明显;相同的想法被广泛用于其他置换测试。

基本思想是这样的:你左右移动第二个样本,直到你点击α/21-α/2WMW 统计的分位数(离散的,这些将被截断小于α/2在尾巴,但你可以合法地有一个比α/2如果尾部面积之和小于α; 然而,大多数人会更喜欢对称,即使代价是比必要的区间更保守)。

这种方法可以通过使用不需要导数的固定根查找算法在软件中轻松实现。界限很明显(如果您在完全分离样本时还没有达到它,那么您永远不会,因此首先检查那些“最大偏移”值,然后将它们用作界限;同样,HL 估计本身就是每次搜索的另一端)。

还有其他方法可以做到这一点可能会更有效,但这应该与一个好的根查找器一起工作得很好(可能只涉及在不同移位值下对统计数据的十几个评估)。


针对有关问题是规模变化而不是位置变化的评论:

一种可能性 - 您可以考虑查看日志中的位置偏移估计,这应该对应于未转换值中比例变化(比例)的日志。那就是如果XF(X)F(是的/一个)那么如果X*=lnXG(X),*=lnG(是的-ln一个), 在哪里G(X)=F(经验(X)).

间隔,至少应该很好地延续。

这是一个正在使用的示例:

数据如下。x 样本是来自具有尺度参数的分布的 60 个观测值μ=18,而 y 样本是 50 个带有尺度参数的观测值μ=25. 除了规模发生变化外,它们具有相同的分布。

规模的增加是一个因素25/181.3889.

这是原始比例和对数比例数据的箱线图:

x&y 样本的箱线图和日志的箱线图

在这里,我们对日志数据执行 Wilcoxon-Mann-Whitney:

> lx=log(x)
> ly=log(y)
> wilcox.test(ly,lx,conf.int=TRUE)

    Wilcoxon rank sum test with continuity correction

data:  ly and lx
W = 1743, p-value = 0.1455
alternative hypothesis: true location shift is not equal to 0
95 percent confidence interval:
 -0.09044406  0.68813695
sample estimates:
difference in location 
             0.2917924 

如果我们对区间取幂,它应该包含 95% 的真实比例。它确实包含这次的人口比率:

> exp(wilcox.test(ly,lx,conf.int=TRUE)$conf.int)
[1] 0.9135254 1.9900046
attr(,"conf.level")
[1] 0.95

如果我们对对数中的估计偏移取幂,这将是对比例的(有点)向下偏差的估计,但它相当不错:

> exp(wilcox.test(ly,lx,conf.int=TRUE)$estimate)
difference in location 
              1.338825 

[示例中使用的数据生成如下:

> set.seed(94394381)
> x=rexp(60,1/18)
> y=rexp(50,1/25)

...以防万一有人想尝试]


还有其他方法可以估计规模变化;例如,可以将 y 样本除以一个常数,C, 并尝试不同的值C直到 WMW 统计量等于其在原假设下的期望值。也可以尝试不同的值,直到统计量等于α/21-α/2WMW 的零分布的分位数。如上所述,这将是比例的点估计和区间。

(这样做的好处是不会在中心估计中引入小偏差。)