A / B测试使用什么统计测试?


12

我们有两个队列,每个队列1000个样本。我们在每个队列中测量2个数量。第一个是二进制变量。第二个是遵循重尾分布的实数。我们想评估哪个同类群组对每个指标的效果最佳。有很多统计测试可供选择:人们建议使用z检验,其他人使用t检验,其他人使用Mann–WhitneyU。

  • 对于我们的案例,我们应该为每个指标选择哪种测试?
  • 如果一项测试表明同类人群之间存在显着差异,而另一项测试表明存在显着性差异,将会发生什么?

Answers:


12

假设您的两个指标是1)二进制和2)重尾,则应避免假设正态分布的t检验。

我认为Mann-Whitney U是您最好的选择,即使您的分布接近正常,也应该足够有效。

关于第二个问题:

如果一项测试表明同类人群之间存在显着差异,而另一项测试表明存在显着性差异,将会发生什么?

如果统计差异处于临界点并且数据具有“混乱”的样本分布,这种情况并不少见。这种情况要求分析人员仔细考虑每个统计检验的所有假设和局限性,并最大程度考虑违反假设次数最少的统计检验。

假设正态分布。有很多关于正常性的测试,但这还不是故事的结局。即使与正态性存在一些偏差,某些测试在对称分布上也能很好地工作,但在偏斜分布上却不能很好地工作。

作为一般经验法则,建议您不要在明显违反其任何假设的情况下进行任何测试。

编辑:对于第二个变量,将变量转换为正态分布(或至少接近)的变量可能是可行的,只要该转换是保留顺序的即可。您需要非常有信心,变换对于两个同类群都能产生正态分布。如果将第二个变量拟合为对数正态分布,则对数函数会将其转换为正态分布。但是,如果分布是帕累托(幂定律),则不会转换为正态分布。

编辑:本评论所述,您绝对应该考虑将贝叶斯估计作为t检验和其他空假设显着性检验(NHST)的替代方法。


谢谢(你的)信息。我还不够清楚,我有两个量,一个是二进制数,另一个是在重尾分布后的实数。我编辑了问题以澄清这一点。
iliasfl 2014年

是的,我想我明白。您想运行两次测试,一次在二进制变量上,一次在实变量上(重尾分布)。我建议同时运行Mann-WhitneyU。

为什么Mann-Whitney适合二进制数据?
Glen_b-恢复莫妮卡2014年

Mann-Whitney U对于非正态分布有效,包括具有两个值(即二进制)的离散分布。如果所有数据都是二进制的,那么也许另一个测试会更好。
MrMeritology

有人可以确认这是否正确吗?...

7

对于实值数据,您可能还需要考虑根据数据的引导生成自己的测试统计信息。当您处理非正态总体分布时,或者试图围绕没有方便的解析解决方案的参数建立置信区间时,这种方法往往会产生准确的结果。(在您的情况下,前者是正确的。我仅在上下文中提及后者。)

对于实值数据,请执行以下操作:

  1. 汇集您的两个队列。
  2. 从池中取样两组1000个元素,并进行替换。
  3. 计算两组样本均值之差。
  4. 重复执行步骤2和3几千次,以分布这些差异。

获得该分布后,计算实际样本的均值差,然后计算p值。


谢谢,您最终得到了一个分布,该分布应该是正常的,并带有一些均值和标准差。为了决定获胜者(如果有),您将如何从中计算出p值以及置信区间?
iliasfl 2014年

分布不一定是正常的。它将大致具有从其采样的任何内容的分布。这就是使用引导程序的好处。无论如何,您都可以通过根据实际结果计算测试统计量来获得p值。即每个队列的方式差异。然后将该数字与分布进行比较。您获得的百分位数是针对均数差的单方面检验的p值。
内森·古尔德

4
内森(Nathan)描述的也是贝叶斯重要性检验方法的基础。我使用(当前使用)贝叶斯估计取代了T检验(BEST)方法。如果您打算实现池化方法,则应查看该框架。
cwharland 2014年

0

我第二个@MrMeritology的答案。实际上,我想知道MWU测试是否会比独立比例测试更强大,因为我从中学到并曾经教过的教科书说MWU只能应用于序数(或间隔/比率)数据。

但是我的模拟结果(如下图所示)表明,MWU测试实际上比比例测试更强大,同时可以很好地控制I型错误(在组1的人口比例= 0.50时)。

在此处输入图片说明

第2组的人口比例保持在0.50。每个点的迭代次数为10,000。我在没有Yate校正的情况下重复了模拟,但是结果是相同的。

library(reshape)

MakeBinaryData <- function(n1, n2, p1){
  y <- c(rbinom(n1, 1, p1), 
        rbinom(n2, 1, 0.5))
  g_f <- factor(c(rep("g1", n1), rep("g2", n2)))
  d <- data.frame(y, g_f)
  return(d)
}

GetPower <- function(n_iter, n1, n2, p1, alpha=0.05, type="proportion", ...){
  if(type=="proportion") {
    p_v <- replicate(n_iter, prop.test(table(MakeBinaryData(n1, n1, p1)), ...)$p.value)
  }

  if(type=="MWU") {
    p_v <- replicate(n_iter, wilcox.test(y~g_f, data=MakeBinaryData(n1, n1, p1))$p.value)
  }

  empirical_power <- sum(p_v<alpha)/n_iter
  return(empirical_power)
}

p1_v <- seq(0.5, 0.6, 0.01)
set.seed(1)
power_proptest <- sapply(p1_v, function(x) GetPower(10000, 1000, 1000, x))
power_mwu <- sapply(p1_v, function(x) GetPower(10000, 1000, 1000, x, type="MWU"))

您的结果图片全是黑色
Ooker 2015年
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.