Wilcoxon 秩和检验是否是检验总捐款是否不同的正确检验?

机器算法验证 r p 值 wilcoxon-mann-whitney 检验 置换检验 测试
2022-04-01 22:56:22

背景:

我的软件要求用户提供任意数量的可选捐款。我在用户之间分配测试捐赠请求以找到最好的提问方式:50% 获得请求版本 1,50% 获得请求版本 2,我们看看哪个更好。

几乎所有用户都捐 0 美元,但也有少数用户捐款。结果可能如下所示:

         Number of users  Number of donations   Dollar amounts donated
GROUP A  10,000           10                    40,20,20,20,15,10,10,5,5,5
GROUP B  10,000           15                    50,20,10,10,10,10,10,10,5,5,5,5,5,5,5

我想知道一组是赢家,还是平局,或者我们是否需要更大的样本来确定。(这个例子,为了讨论而保持简单,几乎可以肯定需要更大的样本才能获得显着的结果。)

我已经测量的内容:

  1. 一组有明显更多捐款吗?大多少?我使用ABBA Thumbtack 工具 测量这个 p 值和置信区间,仅使用捐赠数量和用户数量,忽略美元金额。其方法在“什么是基础统计数据?”中进行了描述。该链接的部分。(这超出了我的想象,但我相信它通过将捐赠率之间的差异作为 Agresti-Couli 区间上的正常随机变量来计算置信区间。)
  2. 一组捐赠的金额是否有显着差异? 我通过执行置换测试来测量这个 p 值:重复将所有 2N 个受试者重新洗牌到 2 个 N 个受试者组中,每次测量组之间总资金的差异,并找到差异 >= 观察到的洗牌的比例区别。(我相信这是有效的,基于这个可汗学院视频为饼干做同样的事情而不是美元。)

R的wilcox.test:

现在关于wilcox.test()R 的几个问题:

  1. 如果我提供wilcox.test(paired=FALSE)上面的数据表,它会回答我上面的工具尚未回答的任何新问题,让我有更多的洞察力来决定是否继续运行我的测试/宣布获胜者/宣布平局?
  2. 如果是这样,它会回答什么确切的问题?
2个回答

如果您使用wilcox.test()设置为 的参数paired(注意这是小写,并且R区分大小写)FALSE,则您正在运行Mann-WhitneyU-测试这是对随机优势的考验。如果分布相等,并且您从每个版本中随机选择一个观察值,则版本 2 的观察值将有 50%-50% 的机会高于版本 1 的观察值。另一方面,来自版本 2 可能有超过 50% 的机会大于(小于)版本 1 的值。这是随机优势。没有说多少更大或更小,只是它更大或更小。

我觉得这不适合你的目标。你想要最多的总钱,可以理解为最大的平均捐赠乘以用户数。由于偏斜,一个版本可能具有最大的平均值/总数,但另一个版本随机更大。(如果是这种情况,您会想要以前的版本。)因为这是您最终想要的,所以特定于发行版的那个方面的测试最适合您。

我认识到您的数据不太正常,因此,t-test(这可能是大多数人在比较两组时首先想到的),这是不合适的。给定两个连续但非正常的组,大多数人可能同样会自动选择 Mann-Whitney。在您的情况下,出于上述原因,我会进行排列测试。(如果我理解正确的话,我认为这就是您所做的。)置换测试在这里是有效的,因为您将用户随机分配到两个组;因此,它们是可交换的。

要执行置换测试,只需打乱分组指标并计算均值和均值之间的差异。多次执行此操作将允许您创建均值之间差异的抽样分布。您可以将观察到的差异与抽样分布进行比较。对于双尾测试,取除差异之外的较小比例并将其乘以 2。该产品可直接解释为p-价值。这是您的数据的一个工作示例:

A            = c(rep(0, 9990), 40,20,20,20,15,10,10,5,5,5)
B            = c(rep(0, 9985), 50,20,10,10,10,10,10,10,5,5,5,5,5,5,5)
realized.dif = mean(B)-mean(A);  realized.dif  # [1] 0.0015

set.seed(6497)
donations = stack(list(A=A, B=B))
values    = donations$values
ind       = donations$ind
difs      = vector(length=1000)
for(i in 1:1000){
  ind     = sample(ind)
  difs[i] = mean(values[ind=="B"])-mean(values[ind=="A"])
}
difs = sort(difs)
mean(difs>=realized.dif)    # [1] 0.459  # a 1-tailed test, if Ha: B>A a-priori
mean(difs>=realized.dif)*2  # [1] 0.918  # a 2-tailed test

关于第一个研究问题,即“哪个版本产生了更多的捐款”,虽然我承认每个人都喜欢ABBA,但你也可以这样做R我会用一个z-测试两个比例的差异。R,就是prop.test()这是使用您的数据的示例:

prop.test(rbind(c(10, 9990),
                c(15, 9985) ))
#  2-sample test for equality of proportions with continuity correction
# 
# data:  rbind(c(10, 9990), c(15, 9985))
# X-squared = 0.6408, df = 1, p-value = 0.4234
# alternative hypothesis: two.sided
# 95 percent confidence interval:
#   -0.0015793448  0.0005793448
# sample estimates:
# prop 1 prop 2 
# 0.0010 0.0015 

@gung 的回答是正确的。但我要补充一点,由于您的数据可能存在偏差,右尾很大,因此平均值可能不可靠,因此它可能不是代表分布中心性的“正确”指数。因此,我也会尝试使用更强大的解决方案,例如中位数或截断均值。