问题:
我正在尝试使用R生成随机研究设计,其中一半的参与者被随机分配给“治疗1”,另一半的参与者被分配给“治疗2”。但是,由于一半的受试者是男性,一半的受试者是女性,我也想确保每次治疗都接受相同数量的男性和女性,因此应该将一半的男性和女性分配给“治疗1”,其余的一半应分配给“处理2”。
此设计有两个并发症:(1)这项为期一年的研究,必须每天对参与者进行治疗; (2)每位参与者必须在28天内至少接触10次“治疗1”。
这是否有可能在R界面中实现自动化?我以为是这样,但是我认为我作为R程序员的初学者身份使我无法自己寻找解决方案。我已经花了几天的时间来弄清楚如何实现这一点,并且浏览了该站点上许多听起来相像的帖子,但这些帖子在这里未能成功应用。我希望外面的人知道一些技巧,可以帮助我解决这个问题,任何建议将不胜感激!
我尝试过的内容:
特定信息
# There are 16 participants
p <- c("P01", "P02", "P03", "P04", "P05", "P06", "P07", "P08", "P09", "P10", "P11", "P12", "P13", "P14", "P15", "P16")
# Half are male and half are female
g <- c(rep("M", 8), rep("F", 8))
# I make a dataframe but this may not be necessary
df <- cbind.data.frame(p,g)
# There are 365 days in one year
d <- seq(1,365,1)
...不幸的是,我不确定如何从这里继续。
理想结果:
我预想的结果类似于该表:
[基本上,每个参与者都有一列,每天都有一行。与每天相关联的是治疗1(T1)或治疗2(T2)的分配,其中8位男性中的4位和8位女性中的4位被分配给T1,其余部分分配给T2。每天将这些治疗重新分配1年。此图表中未描述每个参与者在28天内至少要暴露于T1的10次。如果还有其他意义,则该表不必看起来像这样!
很好的第一个问题。感谢您的发布。
我对您的限制的理解是,在任何一天,必须有四位男性接受一种治疗,而四位男性必须接受另一种治疗。八名女性也是如此:每次治疗必须有四名女性。实际上,这意味着在任何给定的一天中,您只需要对四个人进行随机抽样,因为其余的人将受到前四个人的约束。男性5-8与男性1-4配对,因此男性1总是与男性5处于相反的待遇,男性2与男性6处于相反的待遇,依此类推。对女性采用相同的模式,因此尽管个人分配是随机的,但在任何给定的日子里,总是有4位女性接受治疗1、4位女性接受治疗2、4位男性接受治疗1和4位男性接受治疗2。
您希望至少有十天的时间,每个人在28天内获得治疗1。这进一步限制了随机化的程度,以至于确保每个28天的疗程总共包含14天的治疗1和14天的治疗2都有意义。
这样,您可以像这样获得分配:
four_cols <- replicate(4, as.vector(replicate(14, sample(rep(1:2, 14))))[1:365]) eight_cols <- cbind(four_cols, 3 - four_cols) sixteen_cols <- cbind(1:365, eight_cols, eight_cols) df <- setNames(as.data.frame(sixteen_cols), c("Day", paste0("M", 1:8), paste0("F", 1:8)))
现在
df
是一个数据表,其布局类似于表。以数字1或2给出治疗,参与者被标记为M1-M8和F1-F8:
df
#> Day M1 M2 M3 M4 M5 M6 M7 M8 F1 F2 F3 F4 F5 F6 F7 F8
#> 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 2 2 2
#> 2 2 2 2 2 2 1 1 1 1 2 2 2 2 1 1 1 1
#> 3 3 2 1 1 2 1 2 2 1 2 1 1 2 1 2 2 1
#> 4 4 2 2 2 1 1 1 1 2 2 2 2 1 1 1 1 2
#> 5 5 1 2 1 1 2 1 2 2 1 2 1 1 2 1 2 2
#> 6 6 2 2 2 2 1 1 1 1 2 2 2 2 1 1 1 1
#> 7 7 1 2 1 1 2 1 2 2 1 2 1 1 2 1 2 2
#> 8 8 1 1 2 2 2 2 1 1 1 1 2 2 2 2 1 1
#> 9 9 2 2 1 2 1 1 2 1 2 2 1 2 1 1 2 1
#> 10 10 2 1 2 2 1 2 1 1 2 1 2 2 1 2 1 1
#> 11 11 1 2 2 2 2 1 1 1 1 2 2 2 2 1 1 1
#> 12 12 2 1 2 1 1 2 1 2 2 1 2 1 1 2 1 2
#> 13 13 1 1 1 1 2 2 2 2 1 1 1 1 2 2 2 2
#> 14 14 2 1 1 1 1 2 2 2 2 1 1 1 1 2 2 2
#> 15 15 1 1 2 1 2 2 1 2 1 1 2 1 2 2 1 2
#> 16 16 1 2 1 1 2 1 2 2 1 2 1 1 2 1 2 2
#> 17 17 2 2 2 2 1 1 1 1 2 2 2 2 1 1 1 1
#> ...
#> 365 365 2 2 2 2 1 1 1 1 2 2 2 2 1 1 1 1
这是我的方法。当然可以优化,但是我想分享我的想法:
考虑用by
按day