R binom.test 舍入误差?

R binom.test roundoff error?

我对binom.test的操作一头雾水。

假设我想针对 p=0.5 测试 4/10 成功的样本。 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

但现在我想针对 p=0.66 测试一个 95/150 的样本 这里,期望值为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,因此存在舍入误差。就这些了,还是有别的事情发生了?

这是计算 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 是得到 "at least that far away from the expected value" 的概率,而是说 p 是概率至少和你得到的值一样小的概率。

在这种情况下,

dbinom(95,n,p)

是 0.05334916。因此,binom.test 查找使 dbinom(x,n,p) 小于 0.05334916 的 x 值。结果是 0:95 和 104:150。所以,binom.test returns

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

即 0.4914044。