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

主な問題 (構文エラーと存在しないオブジェクト以外) は、ループが nmax逆ではなく 0 から実行されたことです。

おそらく最適化の可能性はありますが、統計に関する私の理解は、実際にそれに取り組むには十分ではありません.

于 2013-06-25T12:18:50.877 に答える