计算累积二项概率时R中的奇怪精度问题
在使用此代码时,我遇到了一些奇怪的问题:计算累积二项概率时R中的奇怪精度问题,r,arbitrary-precision,binomial-coefficients,R,Arbitrary Precision,Binomial Coefficients,在使用此代码时,我遇到了一些奇怪的问题: 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)
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
循环
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
prob遵循Ben Bolker的建议查看?pbinom
pbinom(q = occurencies, size = positions, prob = frequency, lower.tail = FALSE)
我复制/粘贴了您的代码,虽然prob
最终确实大于1,但这并不重要<代码>abs(prob-1)<1e-10
返回TRUE
。通过将最后一行更改为prob-Side-issue,我可以得到一个额外的数字:当您使用Rmpfr
时,您选择了什么精度级别,并且您是否确保您计算了频率作为类:mpfr
数字的比率?@shujaa:确实,它最多不超过1,但困扰我的是,在for循环的特定周期数之后,即使添加了一些内容,“prob”仍然保持不变:尝试从0到accurrences-3运行for循环,以检查这是真的。至于次要问题:我没有这样做,频率实际上是一个Rmpfr数字,源自2个正常数字的比率。我会尽量和你保持联系。这正是我想要避免的。我不知道cumsum函数,我欢迎这个提示;然而,我试图计算概率,给定频率,事件发生的次数少于“发生”的次数,所以这永远不应该是1。我真正需要的是事件发生“发生”或更多次的概率,但是计算这些数字太疯狂了,所以我选择了计算倒数。@user1738815听起来你想要的是pbinom(q=occurrences,size=positions,prob=frequency,lower.tail=FALSE)
非常感谢@shujaa!这正是我需要的!我如何选择您的答案作为正确答案?我只能说我会把它作为一个答案,然后它会被接受。但它真的只是在呼应本·博尔克。为了将来的参考,我们只能在你在上面的评论中告诉我们“我真正需要什么”时帮助你。我会记住这一点,以备将来的问题。再次感谢你。