来自block.random()库的psych是创建分块随机实验设计的一个很好的工具,然而,编写的函数需要在开始之前进行一些计算,并生成一个矩阵,该矩阵只包含实验因素水平的数值索引。
举一个植物生长实验的例子,你通常在开始做实验设计时所知道的信息如下:
使用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很好,但是有两个问题:
我更希望有一些东西,包括我的级别名称,我可以直接打印,以供参考,或快速格式化为一个表格,以纳入报告。
我怎样才能做到这一点?
发布于 2013-01-30 21:19:52
对于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)
https://stackoverflow.com/questions/14614006
复制相似问题