Zelen's Play获胜者规则随机分配方案

时间:2019-10-14 18:06:27

标签: r random simulation

有人知道如何在R中实现此算法吗?我共有100名患者需要随机分组,我想知道大于55%-45%的分裂机会是什么(即,将45个或更少的受试者分配为一种治疗方法,将55个或更多的受试者分配为一种治疗方法)其他治疗)?假设治疗A和B的缓解率分别为0.6和0.5。我需要根据Zelen的“打赢者规则”进行1000次模拟。

Zelen规则背后的关键思想是,您需要知道先前患者的结局才能分配下一位患者,因此基本上我们会有这样的事情:

对于第一个患者,我们使用rbinom(1,1,1 / 2)(将他分配给具有相等概率的A或B),然后对于A组,我们知道响应率是0.6,因此rbinom(1,1 ,0.6)查看患者是否有反应;如果他回答,我们将下一位患者分配给A,否则将其分配给B

类似地,对于B组,我们知道响应率是0.5,所以rbinom(1,1,0.5)可以查看患者是否响应。如果他回答,那么下一位病人将被分配到B;否则为A。

如果拆分大于55-45%,则计为1;否则为0。最后,模拟1000次以计算大于55-45的拆分次数,然后计算发生此事件的概率:n / 1000

1 个答案:

答案 0 :(得分:0)

任何现实主义者或质量专家必须熟悉模仿现实生活行为的试验设计:

#play the winner

nsamples <- 1000
sample.size <- 100
split <- 0

for (i in 1:nsamples) {
  a <- rbinom(sample.size,1,0.6)
  b <- rbinom(sample.size,1,0.5)
  df <- data.frame (a,b)
  alt <- c(2,1)

  y = sample(c(1,2),1)
  tx <- NULL

    for (j in 1:sample.size) {
      tx[j] <- y
      x <- df[j,y]
      if (x == 1) {
        next 
        } 
          y <<-  alt[y]
      }

  split[i] <- sum(tx == 1)/sample.size
}

split.45.55 <- sum(split < 0.45 | split > 0.55)/nsamples
hist(split)
split.45.55

enter image description here