2016-11-19 22 views
4

私はbinom.testの操作について混乱しています。R binom.test丸め誤差?

pay = 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に対して150分の95のサンプルをテストしたいですここで、期待値は99であるので、P値は

P(X < = 95)+ P(X> = 103) 又は P(X < = 95)+ 1-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 

二Pvとの差である< = 102)

正確にはdbinom(103,150,.66)です。だから、RはX = 103を含んでいないようだ。

私はこれについて推測できる唯一の説明は、.66の不正確な表現のために丸め誤差があり、RがX = 103をちょうど見逃してしまうことです。これはすべてそれですか、それとも何か他のことが起こっていますか?ここ

+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の成功を得る確率が正確にx成功を得る可能性、relErrのファッジファクターまで、最初の整数Cを探します。したがって、pは「少なくとも期待値から遠くに」なる確率であると言っているが、pは確率が取得した値と少なくとも同じくらい小さい確率であると言う。この場合

dbinom(95,n,p) 

が0.05334916です。したがって、binom.testはdbinom(x、n、p)が0.05334916より小さいxの値を探します。それらは0:95と104:150であることが判明しました。したがって、binom.testは、

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

の値を返します。これは0.4914044です。