R中的精确两个样本比例二项式检验(以及一些奇怪的p值)

机器算法验证 r 假设检验 统计学意义 二项分布 部分
2022-02-08 11:37:07

我正在尝试解决以下问题:

球员 A 在 25 场比赛中赢了 17 场,而球员 B 在 20 场比赛中赢了 8 场——这两个比率之间有显着差异吗?

想到的在 R 中要做的事情如下:

> prop.test(c(17,8),c(25,20),correct=FALSE)

    2-sample test for equality of proportions without continuity correction

data:  c(17, 8) out of c(25, 20)
X-squared = 3.528, df = 1, p-value = 0.06034
alternative hypothesis: two.sided
95 percent confidence interval:
 -0.002016956  0.562016956
sample estimates:
prop 1 prop 2 
  0.68   0.40 

所以这个测试表明在 95% 的置信水平上差异不显着。

因为我们知道这prop.test()只是使用近似值,所以我想通过使用精确的二项式检验来使事情变得更精确 - 我这样做是双向的:

> binom.test(x=17,n=25,p=8/20)

    Exact binomial test

data:  17 and 25
number of successes = 17, number of trials = 25, p-value = 0.006693
alternative hypothesis: true probability of success is not equal to 0.4
95 percent confidence interval:
 0.4649993 0.8505046
sample estimates:
probability of success 
                  0.68 

> binom.test(x=8,n=20,p=17/25)

    Exact binomial test

data:  8 and 20
number of successes = 8, number of trials = 20, p-value = 0.01377
alternative hypothesis: true probability of success is not equal to 0.68
95 percent confidence interval:
 0.1911901 0.6394574
sample estimates:
probability of success 
                   0.4 

现在这很奇怪,不是吗?每次p 值都完全不同!在这两种情况下,现在结果都(非常)显着,但 p 值似乎相当随意地跳跃。

我的问题

  1. 为什么每次的 p 值都不同?
  2. 如何在 R 中正确执行精确的两个样本比例二项式检验?
4个回答

如果您正在寻找两个二项式比例的“精确”检验,我相信您正在寻找Fisher 精确检验在 R 中,它的应用如下:

> fisher.test(matrix(c(17, 25-17, 8, 20-8), ncol=2))
    Fisher's Exact Test for Count Data
data:  matrix(c(17, 25 - 17, 8, 20 - 8), ncol = 2)
p-value = 0.07671
alternative hypothesis: true odds ratio is not equal to 1
95 percent confidence interval:
  0.7990888 13.0020065
sample estimates:
odds ratio 
  3.101466 

fisher.test函数接受“成功”和“失败”两个二项式比例的矩阵对象。但是,如您所见,双边假设仍然不重要,很抱歉。但是,Fisher 精确检验通常仅在细胞计数较低时应用(通常这意味着 5 或更少,但有人说 10),因此您最初使用的prop.test更合适。

关于你的binom.test电话,你误解了电话。当您运行时,binom.test(x=17,n=25,p=8/20)您正在测试比例是否与成功概率为 8/20的人群显着不同。同样,成功binom.test(x=8,n=20,p=17/25)概率是 17/25,这就是这些 p 值不同的原因。因此,您根本没有比较这两个比例。

与已知假设相比,两个样本和一个样本之间存在差异。因此,如果有人抛硬币 100 次,正面朝上 55 次,假设硬币公平,而两个人抛硬币的公平性未知,一个人正面朝上 55 次,另一个人正面 45 次。在前一种情况下,您只是试图确定脚蹼是否似乎在抛硬币。在后者中,您正在查看他们是否正在翻转相同公平的硬币。您可以看到,如果您根据已知概率(45 对 50 和 55 对 50)查看每个玩家与将他们相互比较(45 对 55)有何不同。

的语法是与总体点估计binom.test相比,您在多次试验中取得的成功尽管您将其输入为 p=8/20,但计算结果就像是上帝赐予的绝对真理 0.4,其周围的方差为零。或者,就像您将玩家 A 在 25 场比赛中的 17 场胜利与玩家 B 在 200 亿场比赛中假设的 80 亿场胜利进行比较。但是,将 17/25 的比例及其所有潜在方差与 8/20 的比例及其自身的所有方差进行比较。换句话说,0.7 左右的方差(估计为 17/25)和 0.4 左右的方差可能会相互渗透,结果 p=0.06。prop.test

首先,我建议您进行连续性校正,因为您正在估计具有连续(卡方)分布的离散分布。

其次,重要的是要清楚“实验”是如何进行的,如果你愿意的话。每个人玩的游戏数量是预先确定的(或者用行业术语来说,是设计固定的)吗?如果是这样,并且进一步假设每个玩家的结果相互独立,那么您将处理 2 个二项式分布的乘积。相反,如果游戏数量可以自由变化(例如,每个人玩的游戏数量是可变的,基于每个人能够在固定时间范围内完成的游戏数量),那么您正在处理多项式或泊松分布。

在第二种情况下,卡方检验(或相同的东西,比例差异的 z 检验)是合适的,但在前一种情况下则不是。在第一种情况下,您确实需要计算每个玩家每个可能的二项式结果的精确乘积,并将所有等于或小于观察到的结果的联合二项式概率的所有事件的概率相加(这很简单两个二项式的乘积,因为每个玩家的结果都独立于其他玩家的结果)。

首先要认识到,任何假设检验的中心目的是计算与所有其他可能结果相比,您观察到的特定结果有多“罕见”或不寻常。这是通过计算您观察到的结果的概率来计算的 - 假设原假设为真 - 将所有其他可能的结果与相等或较低概率的结果相加。

现在重复一遍,我们所说的“多么罕见”是指“与所有其他可能的结果相比,观察到的结果的概率有多低?” 嗯,我们观察到的具体结果的概率是 0.0679 * 0.0793 = 0.005115。现在考虑一个特定的替代结果:玩家 A 可能赢得 20 场比赛中的 7 场,而球员 B 可能赢得 25 场比赛中的 13 场。这个结果的概率是 0.004959。请注意,这低于我们观察到的结果的概率,因此它应该包含在 p 值中。但是再看一遍:如果您正在根据我们观察到的结果中的比例差异是否超过比例差异来决定将哪些结果包含在总和中,那么这个概率将被排除在外!为什么?因为这个特定结果的比例差异小于我们观察到的结果的比例差异。但这不是正确的焦点——我们必须关注这个特定结果的概率,以及它是否等于或小于我们观察到的结果的概率!

可以在这里找到一个很好的正式解释:

http://data.princeton.edu/wws509/notes/c5.pdf

请特别注意第 9 页上的声明,“如果行边距是固定的并且抽样方案是二项式的,那么我们必须使用乘积二项式模型,因为如果没有进一步的信息,我们无法估计两个变量的联合分布。”