0

block.random()来自psych库的工具是创建块随机实验设计的好工具,但是,所编写的函数要求您在开始之前进行一些计算,并生成一个仅包含实验因素水平的数字索引的矩阵。

一个植物生长实验示例,其中包含您在着手进行实验设计时通常知道的信息:

  • 两个实验因素,比如肥料和阳光
  • 三级肥料(5mL/天、10mL/天、20mL/天)
  • 两级阳光(直射阳光,阴影)
  • 您的功效分析告诉您每组需要 15 个样本

您可以通过以下方式使用 block.random:

> plan=block.random(n=90,c(fertilizer=3,sunlight=2))
> headtail(plan)
    blocks fertilizer sunlight
S1       1          3        2
S2       1          2        1
S3       1          3        1
S4       1          1        1
...    ...        ...      ...
S87     15          3        2
S88     15          2        1
S89     15          1        1
S90     15          1        2

好的很好,但有两个问题:

  • 您必须意识到在使用该功能之前您需要总共 90 个样本(每组 15 个,乘以 3 级肥料,乘以 2 级阳光)这是一个很容易解决的问题
  • 您不必直接使用输出,因为您必须将因子的数值水平(肥料 1:3,阳光 1:2)与实际水平(5mL/天、10mL/天、20mL /天施肥)和(阳光直射,阳光遮荫)

我宁愿有一些东西,包括我的级别名称,我可以直接打印以供参考或快速格式化为表格以包含在报告中。

我怎样才能做到这一点?

4

1 回答 1

1

使用一个简单的包装函数 for block.random(),以上所有操作都是可能的。

create.randomization.plan <- function(n.per.group, factors, seed=NULL){
  factor.lengths <- sapply(factors,length)
  if(!is.null(seed)){
    set.seed(seed)
  }
  plan <- as.data.frame(block.random(n.per.group*prod(factor.lengths),
                                     factor.lengths))
  for(i in 1:length(factors)){
    plan[,colnames(plan)==names(factors)[i]] <-
      factor(plan[,colnames(plan)==names(factors)[i]])
    levels(plan[,colnames(plan)==names(factors)[i]]) <- factors[[i]]
  }
  return(plan)
}

用法是这样的:

> factors <- list(fertilizer=c("5mL/day", "10mL/day", "20mL/day"),
+                 sunlight=c("direct sun", "shade"))
> 
> plan <- create.randomization.plan(15, factors)
> headtail(plan)
    blocks fertilizer   sunlight
S1       1   10mL/day      shade
S2       1   20mL/day direct sun
S3       1   20mL/day      shade
S4       1    5mL/day direct sun
...    ...       <NA>       <NA>
S87     15   10mL/day      shade
S88     15    5mL/day direct sun
S89     15   10mL/day direct sun
S90     15   20mL/day direct sun

您还可以设置可重复性的种子:create.randomization.plan(15, factors, seed=123)

于 2013-01-30T21:19:52.157 回答