0
binomial <- function(nmax = 100,        
   thr = 0.95,                               
   alpha = 1,
   beta = 1,
   p_true = 0.5,
   p_0 = 0.5){

   for(j in seq.int(nmax, 0)){
      if(pbeta(q = p_0, shape1 = alpha + j, shape2 = beta + nmax - j, lower.tail = FALSE) < thr){
         targetatnmax <- j + 1
    } else {
    print(

         break
      }
   }
result <- list(Success = Success, targeratnmax = targetatnmax)
return(result)
}
res = binomial(nmax,thr,alpha,beta,p_true,p_0)
res

在我的程序中,我试图找到超过 0.95 thr 所需的成功次数。我正在尝试使用带有 if else 语句的 for 循环,但是当我运行它时,我没有得到我需要的值。我知道我的价值应该是 59,但我似乎无法得到这个。我知道代码看起来真的很乱,但这只是因为我已经玩了几个小时了。请提供任何帮助

4

1 回答 1

5

这是清理后的代码:

binomial <- function(nmax = 100,        
                     thr = 0.95,                               
                     alpha = 1,
                     beta = 1,
                     p_true = 0.5,
                     p_0 = 0.5){
  targetatnmax <- 0

  for(j in seq.int(0,nmax)){
    if(pbeta(q = p_0, shape1 = alpha + j, shape2 = beta + nmax - j, lower.tail = FALSE) < thr){
      targetatnmax <- j + 1
    } else {      
        break
    }
  }
  result <- list(targeratnmax = targetatnmax)
  return(result)
}
res = binomial()
res

#$targeratnmax
#[1] 59

主要问题(除了语法错误和不存在的对象)是你的循环从 0 跑到 nmax0 而不是相反。

可能有优化的潜力,但我对统计数据的理解还不足以真正解决这个问题。

于 2013-06-25T12:18:50.877 回答