4

我对 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。

我能猜到的唯一解释是,由于 0.66 的不精确表示导致 R 错过 X=103,因此存在舍入误差。这就是全部,还是有其他事情发生?

4

1 回答 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 中的 fudge 因子。因此,他们没有说 p 是“至少远离预期值”的概率,而是说 p 是概率至少与您获得的值一样小的概率。

在这种情况下,

dbinom(95,n,p)

是 0.05334916。因此,binom.test 查找 x 的值,使得 dbinom(x,n,p) 小于 0.05334916。事实证明,它们是 0:95 和 104:150。所以,binom.test 返回的值

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

这是 0.4914044。

于 2016-11-19T05:24:41.310 回答