3

このコードを使用すると、いくつかの奇妙な問題が発生しました。

positions<-c(58256)
occurrencies<-c(30)
frequency<-c(11/5531777)
length<-c(4)

prob<-c(0)
for(i in 0:(occurrencies-1))
{
  pow<-frequency^i
  pow1<-(1-frequency)^(positions-i)
  bin<-choose(positions, i)
  prob<<-prob+(bin*pow*pow1)
}

iこのforループを繰り返すたびに、頻度を指定してイベントの発生数が発生する二項確率を計算する必要があります。各反復はまた、結果を合計します。これにより、prob変数が1を超えることはありませんが、ループの反復が7程度になると、すべてが地獄にprob落ちて1を超えます。

正確な数字の問題かもしれないと思ったので、Rmpfrを使ってみましたが、役に立たなかったのですが、同じ問題が解決しませんでした。

この状況を克服するためのヒントやパッケージがあるのか​​、それとも私がこれに固執しているのか疑問に思いました。

4

2 に答える 2

3

あなたはすることによってあなたのforループを避けることができます

prob<-0
i    <- 0:(occurrencies-1)
pow  <- frequency^i
pow1 <- (1-frequency)^(positions-i)
bin  <- choose(positions, i)
prob <- cumsum(prob+(bin*pow*pow1))
[1] 0.8906152 0.9937867 0.9997624 0.9999932 0.9999998 1.0000000 1.0000000 1.0000000 1.0000000
[10] 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000
[19] 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000
[28] 1.0000000 1.0000000 1.0000000

これが望ましい結果であるかどうかはわかりませんが、forループがこのようになるのを確実に回避できます。

@Ben Bolkerのコメントを参照し、pbinom関数を見てください。

于 2012-10-11T17:00:24.500 に答える
2

ベン・ボルカーのアドバイスに従って?pbinom

pbinom(q = occurencies, size = positions, prob = frequency, lower.tail = FALSE)
于 2012-10-12T17:24:34.157 に答える