Я столкнулся с некоторыми странными проблемами при использовании этого кода:
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)
}
Каждая итерация этого цикла for должна вычислять биномиальную вероятность того, что i
количество вхождений события произойдет с заданной частотой. Каждая итерация также подводит итог. Это должно привести к тому, что переменная prob
никогда не превысит 1, но после 7 или около того итераций цикла все пойдет к черту, и prob
превысит 1.
Я подумал, что это может быть вопрос точности цифр, поэтому я попытался использовать Rmpfr, но безрезультатно - та же проблема осталась.
Мне было интересно, есть ли какие-либо советы или пакеты для преодоления этой ситуации, или я застрял с этим.
prob
действительно больше 1, это ненамного.abs(prob - 1) < 1e-10
возвращаетTRUE
. Я могу получить дополнительную цифру, изменив последнюю строку наprob <- prob + exp(log(bin) + log(pow) + log(pow1))
(обратите внимание, что<<-
не требуется, если вы не заключаете это в функцию и не хотитеreturn(prob)
), но если вы хотите большего, просто используйтеpbinom
как предлагает Бен. - person Gregor Thomas   schedule 11.10.2012Rmpfr
, какой уровень точности вы выбрали, и уверены ли вы, что вычислилиfrequency
как отношениеclass:mpfr
чисел? - person Carl Witthoft   schedule 11.10.2012