如何在R中的blockrand()中定义组的不平等分配

问题描述 投票:0回答:1

我想使用 R v.4.0.3 和 blockrand 包设计一项随机临床试验。 以下是我的代码:

library(blockrand)
library(writexl)
library(openxlsx)

set.seed(101)
Mos1<-blockrand(n=295, id.prefix= 'Mos -', block.prefix='B', block.sizes =1:2, stratum='XX-Y1')
set.seed(10)
Mos2<-blockrand(n=295, id.prefix= 'Mos -', block.prefix='B', block.sizes =1:2, stratum='XX-Y2')
set.seed(5)
Mos3<-blockrand(n=295, id.prefix= 'Mos -', block.prefix='B', block.sizes =1:2, stratum='XX-Y3')
set.seed(70)
Mos4<-blockrand(n=295, id.prefix= 'Mos -', block.prefix='B', block.sizes =1:2, stratum='NONXX-Y1')
set.seed(43)
Mos5<-blockrand(n=295, id.prefix= 'Mos -', block.prefix='B', block.sizes =1:2, stratum='NONXX-Y2')
set.seed(87)
Mos6<-blockrand(n=295, id.prefix= 'Mos -', block.prefix='B', block.sizes =1:2, stratum='NONXX-Y3')

dataset_names <- list('XX-Y1' = Mos1, 'XX-Y2' = Mos2,
                      'XX-Y3' = Mos3, 'NONXX-Y1' = Mos4,
                      'NONXX-Y2' = Mos5,'NONXX-Y3' = Mos6)

正如你所看到的,函数中的 block.size 被定义为“1:2”,并且由于治疗组的数量是 2(没有写,这是默认的),所以这段代码产生的实际块大小为 2 和4(相乘)。 但我希望生成的块大小为 3 和 6,而组数仍为 2。这意味着,例如在 3 个块中,我们将有两个 A 组和一个 B 组(总计 = 3)。 但我不知道这是如何实现的,因为当我设置“block.size=3:1.5”时,生成的块大小是 6 和 4。而且它永远不会变成 6 和 3。 有人可以帮忙吗?

r random block allocation
1个回答
0
投票

一种方法:

library(blockrand)

创建一个查找向量,将

stratum
名称与要生成的块项的名称相关联:

stratum_lookup <- setNames(
  c(paste0('XX-Y', 1:3), paste0('NONXX-Y', 1:3)),
  paste0('Mos', 1:6)
)

## > stratum_lookup
##       Mos1       Mos2       Mos3       Mos4       Mos5       Mos6 
##    "XX-Y1"    "XX-Y2"    "XX-Y3" "NONXX-Y1" "NONXX-Y2" "NONXX-Y3" 

  • Map
    根据您的规格创建的块的未来项目名称:
block_collection <- 
  names(stratum_lookup) |>
  Map(f = \(object_name){blockrand(n = 295, 
                                   num.levels = 2, 
                                   block.sizes = c(3, 6), ## (1)
                                   block.prefix = 'B',
                                   id.prefix = 'Mos-',
                                   stratum = stratum_lookup[object_name] ## (2)
                                  )
  })
  1. 使用块大小向量,而不是连续范围(如
    3:6
    将返回)
  2. 查找商品名称的层标签

block_collection
是随机块设计的列表。选择这样的一个:

block_collection[['Mos1']]

## > block_collection[['Mos1']]
##        id stratum block.id block.size treatment
## 1  Mos-01   XX-Y1       B1         12         B
## 2  Mos-02   XX-Y1       B1         12         B
## 3  Mos-03   XX-Y1       B1         12         A
## 4  Mos-04   XX-Y1       B1         12         A
## 5  Mos-05   XX-Y1       B1         12         A
## ...

您可以将列表项作为单独的对象移动到工作区,如下所示:

list2env(block_collection)

但是,这只会让您的工作空间变得混乱,而没有明显的好处。例如,要将每个块导出为电子表格,请将必要的语句包装在

Map
中,如上所述。

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