2013-06-07 2 views
0

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

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 
+1

Это не совсем понятно, о чем вы просите здесь. Кроме того, это немного напоминает домашнюю проблему. – Thomas

+0

Мне нужно создать цикл, который продолжает запускать программу, пока я не получу достаточно высокое значение образца n.2, которое превышает пороговое значение, а затем закончит программу. Кроме того, это не вопрос домашней работы, его часть проекта, над которым я работаю. Я попытался использовать команду повтора, но безрезультатно. Мне нужно запустить цикл, но увеличивать его на единицу каждый раз, когда он не удовлетворяет условию. –

+0

Полезно знать. Не совсем понятно, зачем вам нужен цикл, потому что ваш цикл просто хранит информацию, на самом деле это не динамически не вычисляет ничего. Если у вас есть входы и формула, то функция может быть просто формулой, и вы можете использовать что-то из семейства функций '* apply' для генерации выходов на ряде входов. Если ваша цель состоит в том, чтобы вместо этого выполнить что-то, что действительно выполняется до тех пор, пока не будет достигнут порог, вы можете попробовать цикл while, или продолжить использование 'for', но включить оператор' break'. – Thomas

ответ

0

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

Базовая стратегия с для петли:

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

Базовая стратегия с временной петлей:

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