【问题标题】:R binom.test roundoff error?R binom.test 舍入错误?
【发布时间】:2017-04-03 00:06:57
【问题描述】:

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

【问题讨论】:

  • 我想说是时候深入研究代码了...

标签: r floating-accuracy binomial-cdf


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多