R中的二项式检验会出现舍入误差吗?

4

我对binom.test的操作感到困惑。

比如说我想要测试一个样本,成功率为4/10,检验值为p=0.5。 P值应该是:

P(X <= 4) + P(X >=6) 或 P(X <= 4) + 1-P(X <= 5)

实际上:

>pbinom(4,10,p=0.5) + 1-pbinom(5,10,0.5)
[1] 0.7539063

或者:

>binom.test(4,10,p=0.5)

Exact binomial test

data:  4 and 10
number of successes = 4, number of trials = 10, p-value = 0.7539

现在我想测试一个样本的95/150与p=0.66的比较。在这里,期望值为99,所以P值应该是

P(X <= 95) + P(X >= 103) 或者 P(X <= 95) + 1-P(X <= 102)

>pbinom(95,150,.66) + 1-pbinom(102,150,.66)
[1] 0.5464849

但是
>binom.test(95,150,.66)

    Exact binomial test

data:  95 and 150
number of successes = 95, number of trials = 150, p-value = 0.4914

事实上,两个P值之间的差异正好是dbinom(103,150,.66)。因此,看起来R未能包括X=103。
我唯一能猜测的解释是,由于.66的不精确表示导致的四舍五入误差使R刚好错过了X=103。这就是全部吗?还是还有其他事情发生了?

我会说现在是深入代码的时候了... - Ben Bolker
1个回答

4

这里是计算binom.test(x = 95, n = 150, p= 0.66)的p值的代码

relErr <- 1 + 1e-07
d <- dbinom(x, n, p)
m <- n * p
i <- seq.int(from = ceiling(m), to = n)
y <- sum(dbinom(i, n, p) <= d * relErr)
pbinom(x, n, p) + pbinom(n - y, n, p, lower.tail = FALSE)

因此,binom.test 看起来并不关于期望值对称。它寻找第一个整数 C,使得 C 大于或等于期望值且获得恰好 C 次成功的概率小于或等于获得恰好 x 次成功的概率,以 relErr 中的调整因子为上限。因此,他们并没有说 p 是获得“远离期望值的概率”,而是说 p 是获得的概率至少与你得到的值一样小。

在这种情况下,

dbinom(95,n,p)

该值为0.05334916。因此,binom.test查找使dbinom(x,n,p)小于0.05334916的x值。结果发现这些值为0:95和104:150。因此,binom.test返回的值为

sum(dbinom(0:95,n,p)) + sum(dbinom(104:150,n,p))

这个数值是0.4914044。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接