R binom.test舍入错误?

时间:2016-11-19 03:30:32

标签: r floating-accuracy binomial-cdf

我对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,因此存在舍入误差。这就是全部,还是有其他事情发生?

1 个答案:

答案 0 :(得分:4)

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

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。