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

假设我想针对 p=0.5 测试 4/10 成功的样本。
P 值应该是:

P(X =6)
或者
P(X
事实上:

>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 = 103)
或者
P(X
这是
>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,因此存在舍入误差。这就是全部,还是有其他事情发生?

最佳答案

这是在 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 查找 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。

关于R binom.test 舍入误差?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40688943/

10-12 19:19