首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何生成具有命名因子级的block.random实验设计

如何生成具有命名因子级的block.random实验设计
EN

Stack Overflow用户
提问于 2013-01-30 21:19:52
回答 1查看 2.6K关注 0票数 0

来自block.random()库的psych是创建分块随机实验设计的一个很好的工具,然而,编写的函数需要在开始之前进行一些计算,并生成一个矩阵,该矩阵只包含实验因素水平的数值索引。

举一个植物生长实验的例子,你通常在开始做实验设计时所知道的信息如下:

  • 两个实验因素,比如肥料和阳光。
  • 三种肥料水平(5ml/d,10 5mL/d,20 5mL/d)
  • 两层阳光(直射阳光,阴影)
  • 你的能力分析告诉你每组需要15个样本。

使用block.random的方式如下:

代码语言:javascript
复制
> 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/天,10 5mL/天,20 5mL/日)和(阳光直射,遮阳)联系起来。

我更希望有一些东西,包括我的级别名称,我可以直接打印,以供参考,或快速格式化为一个表格,以纳入报告。

我怎样才能做到这一点?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-30 21:19:52

对于block.random()有一个简单的包装器函数,所有这些都是可能的。

代码语言:javascript
复制
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)
}

用法如下:

代码语言:javascript
复制
> 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)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14614006

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档