Клинические испытания кода R

Это мой код для проведения клинического испытания, чтобы показать вероятность того, что испытание было успешным. Моя проблема в том, что мне нужно показать, что, вводя второй набор выборок (n.2), сколько выборок требуется для получения значения выше порога 90%. Любая помощь, пожалуйста, я знаю, что мне нужно зациклить код, который у меня есть, но у меня проблемы с этим.

calc.quant = function( n, X.1, a, b, n.2, nsim, thr, p1=0.025, p2=0.975 )
{   
  a.star = a + n
  b.star = b + n - X.1
  theta = rbeta( nsim, a.star, b.star 
  X.2 = rbinom( nsim, n.2, theta )

  theta.p1p2 = matrix( 0, nrow=nsim, ncol=2 )
  for( j in 1:nsim ) {
    theta.p1p2[j,] = qbeta( c( p1, p2 ), a.star + X.2[j], b.star + n.2 - X.2[j] )
  }

  return( theta.p1p2 )
}

n = 117
X.1 = 110
a = 1
b = 1
n.2 = 50
nsim = 1000
thr = .90

res = calc.quant( n, X.1, a, b, n.2, nsim, thr )

sum( res[,1] > thr ) / nsim

person David Flanagan    schedule 07.06.2013    source источник
comment
Не совсем понятно, что вы здесь просите. Кроме того, это немного похоже на домашнее задание.   -  person Thomas    schedule 07.06.2013
comment
Мне нужно создать цикл, который продолжает выполнять программу до тех пор, пока я не получу достаточно высокое значение выборки n.2, превышающее пороговое значение, а затем завершу программу. Также это не вопрос домашнего задания, это часть проекта, над которым я работаю. Я пробовал использовать команду повтора, но безрезультатно. Мне нужно запустить цикл, но увеличивать его на единицу каждый раз, когда он не удовлетворяет условию.   -  person David Flanagan    schedule 08.06.2013
comment
Хорошо знать. Однако не совсем понятно, зачем вам нужен цикл, потому что ваш цикл просто хранит информацию, он на самом деле ничего не вычисляет динамически. Если у вас есть входные данные и формула, то функция может быть просто формулой, и вы можете использовать что-то из семейства функций *apply для создания выходных данных для диапазона входных данных. Если ваша цель состоит в том, чтобы вместо этого сделать что-то, что действительно работает до достижения порога, вы можете попробовать цикл while ИЛИ продолжить использование for, но включить оператор break.   -  person Thomas    schedule 08.06.2013
comment
Спасибо за ответ, уже пытался, но до сих пор без радости, в любом случае спасибо за помощь.   -  person David Flanagan    schedule 10.06.2013
comment
Я только что добавил (неполный) ответ с двумя описанными мной основными стратегиями. Любая из них, кажется, то, что вы собираетесь?   -  person Thomas    schedule 10.06.2013


Ответы (1)


[Это не полный ответ, а просто для того, чтобы получить разъяснения о том, к чему стремится ОП.]

Базовая стратегия с циклом for:

threshold <- somevalue
for(i in someseq){
    output <- somefunction(...)
    if(output > threshold)
        break
}
output

Базовая стратегия с циклом while:

threshold <- somevalue
below.threshold <- TRUE
while(below.threshold){
    output <- somefunction(...)
    if(output > threshold)
        below.threshold <- FALSE
}
person Thomas    schedule 10.06.2013