【问题标题】:Random assignment of treatments to half of a group将治疗随机分配到一组中的一半
【发布时间】:2020-08-19 07:59:45
【问题描述】:

我正在为一项实验随机分配处理方法。我有四个站点(站点 1,...站点 4),其中 12 个实验单元(例如,1 ... 12)被复制四次(例如,1 ... 4)。对于每个重复,我随机分配了三种处理方法之一(例如,trt1 ...trt3)。

我现在需要为我的每个站点的复制中的每个处理分配 SecondTreatment(是或否)。 trt2 应始终为“y”,而我想将“y”随机分配给 trt1 的一半,将“n”分配给 trt1 的另一半,然后对 trt3 执行相同的操作。每个 Replicate 都应该给我:trt2 有 4 个“y”,trt1 有 2 个“n”,trt3 有 3 个“n”。

我的数据如下所示:

Site      Experimental unit     Replicate   Treatment        SecondTreatmentAssign (y/n)
Site1              1                1         trt1  
Site1              2                1         trt2  
Site1              3                1         trt3  
Site1              4                1         trt3  
Site1              5                1         trt1  
Site1              6                1         trt2  
Site1              7                1         trt3  
Site1              8                1         trt2  
Site1              9                1         trt1  
Site1              10               1         trt1  
Site1              11               1         trt3  
Site1              12               1         trt2  
Site1              1                2         trt2  
Site1              2                2         trt3  
Site1              3                2         trt1  
Site1              4                2         trt2  
Site1              5                2         trt1  
Site1              6                2         trt3  
Site1              7                2         trt2  
Site1              8                2         trt2         
Site1              9                2         trt1  
Site1              10               2         trt2  
Site1              11               2         trt1  
Site1              12               2         trt3      
Site1              1                3         trt2  
Site1              2                3         trt1  
Site1              3                3         trt3  
Site1              4                3         trt3  
Site1              5                3         trt2  
Site1              6                3         trt1  
Site1              7                3         trt3  
Site1              8                3         trt2  
Site1              9                3         trt1  
Site1              10               3         trt1  
Site1              11               3         trt3  
Site1              12               3         trt2  
Site1              1                4         trt3  
Site1              2                4         trt2  
Site1              3                4         trt1  
Site1              4                4         trt3  
Site1              5                4         trt2  
Site1              6                4         trt1  
Site1              7                4         trt3  
Site1              8                4         trt1  
Site1              9                4         trt2  
Site1              10               4         trt1  
Site1              11               4         trt2  
Site1              12               4         trt3
  .                .                .           .
  .                .                .           .
  .                .                .           .
Site4              12               4         trt1  

我希望能够以一种无需手动移动任何东西的方式将这些分配重新放入数据框中。我还是个编程新手,不知道如何实现。

谢谢!

【问题讨论】:

    标签: r random experimental-design


    【解决方案1】:

    我会这样做:

    library(dplyr) 
    data %>% 
      arrange(runif(n())) %>% # randomize the order
      group_by(Site, Replicate, Treatment) %>% # group
      mutate(
        Treat_2 = case_when(
          Treatment == "trt2" ~ "y", # trt2 gets 'y'
          row_number() <= n() / 2 ~ "y", # others in the first half get "y"
          TRUE ~ "n" # others in the second half get "n"
      )) %>%
      arrange(Site, Replicate, `Experimental unit`) ## return to original order
    

    【讨论】:

    • 我没有时间对此进行测试,但是看着您的回答让我想知道我在问题中的某些语言是否不准确。对于 trt 1 和 trt 3,我想将“y”和“n”分配给该 trt 组中的一半项目,不一定将某些内容分配给前半部分,然后分配给后半部分。此代码是否以这种方式工作(即,将“y”分配给 trt 组的前半部分,然后将“n”分配给 trt 组的后半部分),还是会在其中随机分配“y”和“n”组?
    • arrange(runif(n)) 行完全随机化了顺序。所以分配的一半是随机的,因为顺序是随机的。然后,正如评论所说,最终的arrange() 将其恢复为原始顺序。
    • 这段代码大部分都有效,但并不能完全解决问题。所有的 trt2 都按预期分配了“y”,但是“y”和“n”的分配 trt1 和 trt3 不正确。 trt1 和 trt2 各有 2 个“n”和 2 个“y”,而是每个有 1 个“y”和 3 个“n”。我对这里发生的事情的最佳理解是,在总共 12 行中,每次复制只有两个“y”分配给 trt1 和 trt3,因为 4 个“y”已经分配给 trt2,使得 4 + 2 = 6“ y”,导致分配了 6 个“n”,而不是预期的“4”。有什么建议可以解决这个问题吗?
    • 这是一个愚蠢的错误——我使用了row_number &lt; n() / 2,但我应该使用&lt;=。所做的编辑。您提到的“已分配”位不是问题,因为 group_by--所有事情都发生在 Site Replicate Treatment 子组中。
    • 别担心,我在语法上很挣扎,而且我还是 dplyer 的初学者,所以我不会知道!这解决了这个问题,我接受了你的回答。
    猜你喜欢
    • 1970-01-01
    • 2022-05-06
    • 2013-04-24
    • 1970-01-01
    • 2018-03-14
    • 1970-01-01
    • 1970-01-01
    • 2018-03-15
    • 1970-01-01
    相关资源
    最近更新 更多