1

这是我之前提出的问题的临时解决方案。它似乎有效,但是当我看到洗牌时,ddply我想知道它是否实际上是随机的。一些分裂似乎很不幸,就像BAAAAB在第 4 块中一样。我曾考虑过反复改组使用ddply,但有兴趣看到其他潜在的解决方案。

#### Load packages ####

require(plyr)

#### Create randomization ####

set.seed(1984)
nBlocks <- 1:9
sBlocks <- c( sample( c(rep(3,4), rep(6,3)) ), sample( c(3,6) ) )
trtGroup <- c("A","B")
trtRatio <- 2:1
rand <- data.frame( block=rep(nBlocks, sBlocks), treatment=rep(trtGroup, trtRatio) )
rand <- ddply(rand[sample(row.names(rand)), ], .(block))
rand

问题:

我最近学习了如何使用 SAS 计划程序执行具有不同块大小的置换块随机化。我一直试图弄清楚如何使用 R 来做同样的事情。 Theblockrandexperiment包不允许跨治疗组的患者数量不等。

假设我想以 2:1 的比例将 30 名患者随机分配到实验组和对照组(即实验组 N=20,对照组 N=10)。进一步假设我想要 3 个 6 名患者的区块和 4 个 3 名患者的区块,并且我想随机改变区块大小。我如何使用 R 来做到这一点?

4

2 回答 2

0

关于什么:

set.seed(12345)
allocation <- NULL  
block <- sample(c(rep(1,4),rep(2,3)),7)
for(i in 1:7){ 
  tallocation <- sample(c(rep(0,block[i]),rep(1,block[i]*2)), 3*block[i]) 
  allocation <- c(allocation, tallocation)
}
于 2014-03-17T10:46:41.447 回答
0

这很容易randomizr

install.packages("randomizr")
library(randomizr)
block <- c(rep(1:3, each = 6), rep(4:7, each = 3))
Z <- block_ra(block, prob = 2/3)
table(block, Z)

Z是一个长度为 30 的向量。您可以看到治疗的分布:

> table(block, Z)
     Z
block 0 1
    1 2 4
    2 2 4
    3 2 4
    4 1 2
    5 1 2
    6 1 2
    7 1 2
于 2017-06-21T21:24:45.997 回答