我有一个80名受试者的列表,他们已经被随机分为4组(1-4)。现在,我想引入一个交叉设计,这样每个受试者最终都会被分到所有4组中。我试图用样本函数来做到这一点,但我需要剩下的3个随机分组的每个可能性的平均分布。
举例来说:受试者A已被随机分配至第1组。现在我需要随机分配其余3组(2、3、4),其余3组的随机分配有6个选项:234 243 324 342 423 432
因此,我需要确保最初分配到第1组(20名受试者)的每个受试者都得到上述6种排列之一的均匀分布。最初分配到第2、3和4组的每个受试者也是如此
我试
#for loop going through each row of the dataframe
for(x in 1:nrow(crossover)) {
#TRIAL 2
#randomly selects an integer between 1 and 4
y<- sample(1:4, 1, replace = TRUE)
#if it equals Assigned.Arm.Index, then randomly select again
while (y == crossover$Assigned.Arm.Index[x]){
y <- sample(1:4, 1, replace = FALSE)
}
#set New.Arm.Index column to y
crossover$Trial_2[x] <- y
字符串
crossover是我的随机数的名字,assigned.arm.index是预先做好的初始随机数。我为剩下的随机数创建了3个新列,我试图填充。
当我就所有受试者的平等随机化问题寻求帮助时,我被告知使用rep函数,类似于:
sample(rep(1:6, 4) , rep= FALSE)
型
但这对我来说并不完全有意义。我是R的新手,感谢任何帮助!
1条答案
按热度按时间yhived7q1#
如果我正确地解释了你的问题,基本上你想要的是一系列随机的拉丁方块,足以让每个主题都有一排4个不同的治疗方法。
magic
包中的rlatin()
函数非常适合你想要的。由于您已经将受试者随机分配到4个组中,因此我们将使用该列作为基础来连接每个受试者的剩余治疗值。在下面的示例中,“treatment1”是包含您已经随机分配的组值的列。
工作流程如下:
1.在df中创建一个“ranjoin”列,并根据您的“treatment1”组添加一个1到20之间的唯一随机值。换句话说,每组中的每个受试者都被分配了一个随机值。“ranjoin”将与“treatment1”一起使用,以连接剩余的治疗组,
1.创建一个80 x 4的随机4 x 4拉丁方块的矩形(df1),第一列对应于df中的“treatment1”
1.如同对df所做的那样,为df1“treatment1”组分配一个随机“ranjoin”值
1.使用DF和DF 1中的“treatment1”和“ranjoin”列完成每例受试者的抽样治疗组
让我们以第1组为例。在df中有20个受试者的“treatment1”值为1,随机唯一“ranjoin”值为1:20。在df 1中也有20个“treatment1”值为1,随机唯一“ranjoin”值为1:20.如果“受试者”1的“治疗1”值为1,“随机连接”值为7,来自df1的相应行被连接到主题“1”的行。这种方法的关键是“ranjoin”列是独立随机的。为了可重复性,我在整个示例中保持
set.seed(1)
相同。在下面的代码块,以确保更多的随机结果。字符串