使用R随机分配参加者的日常治疗

问题描述 投票:8回答:3

问题:

我正在尝试使用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次。如果还有其他意义,则该表不必看起来像这样!

r for-loop random dplyr sampling
3个回答
2
投票

很好的第一个问题。感谢您的发布。

我对您的限制的理解是,在任何一天,必须有四位男性接受一种治疗,而四位男性必须接受另一种治疗。八名女性也是如此:每次治疗必须有四名女性。实际上,这意味着在任何给定的一天中,您只需要对四个人进行随机抽样,因为其余的人将受到前四个人的约束。男性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

0
投票

这是我的方法。当然可以优化,但是我想分享我的想法:


0
投票

考虑用byday

© www.soinside.com 2019 - 2024. All rights reserved.