Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
计算累积二项概率时R中的奇怪精度问题_R_Arbitrary Precision_Binomial Coefficients - Fatal编程技术网

计算累积二项概率时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!这正是我需要的!我如何选择您的答案作为正确答案?我只能说我会把它作为一个答案,然后它会被接受。但它真的只是在呼应本·博尔克。为了将来的参考,我们只能在你在上面的评论中告诉我们“我真正需要什么”时帮助你。我会记住这一点,以备将来的问题。再次感谢你。