3

我的问题是,是否有任何 R 包提供功能,使得随机化可能涉及交叉因素、嵌套和/或阻塞的标准实验设计相当容易。

具体而言,具体向我展示如何生成作为nlmeOats中的数据集提供的实验的新随机化。

> data(Oats, package="nlme")
> summary(Oats)
 Block           Variety       nitro          yield      
 VI :12   Golden Rain:24   Min.   :0.00   Min.   : 53.0  
 V  :12   Marvellous :24   1st Qu.:0.15   1st Qu.: 86.0  
 III:12   Victory    :24   Median :0.30   Median :102.5  
 IV :12                    Mean   :0.30   Mean   :104.0  
 II :12                    3rd Qu.:0.45   3rd Qu.:121.2  
 I  :12                    Max.   :0.60   Max.   :174.0 

在那个实验中,有六个块。每个区块分为三个小区,随机分配给品种(每个区块每个品种一个小区,每个区块单独随机)。每个小区细分为 4 个子小区,并随机分配到四种氮量(0、0.2、0.4 和 0.6),每个小区中每个硝基水平单独随机分配一个子小区。在数据集中,这些图可识别为 和 的Block组合Variety。(响应变量是yield,因此这并不是治疗设计的真正部分。)

第二个问题:如果你可以随机化Oats,你能否使用相同的包轻松随机化其他经典设计,例如三因素 CRD、嵌套设计、三期交叉设计或 5x5 希腊拉丁方?

我实际上已经知道如何使用 R 语言中的基本函数来做到这一点。所以我对看到程序化答案并不是特别感兴趣。我想知道是否有任何现有的软件包使这变得容易。我可以确定一些可能有帮助的软件包,例如randomizeRrandomizr,但是快速阅读这些文档仍然不能让(对我)很明显如何做到这一点。

我拥有几年前为我的学生开发的通用随机包的材料,我正在尝试决定是否进一步开发它以在 CRAN 上发布。

4

1 回答 1

2

这是我的做法randomizr

data(Oats, package="nlme")

# get the latest version from github      
install.packages("devtools")
devtools::install_github("DeclareDesign/randomizr")

library(randomizr)
Oats <- within(Oats,{
  Variety_new <- block_ra(block_var = Block, 
                          condition_names = c("Golden Rain", "Marvellous", "Victory"))
  nitro_new <- block_ra(block_var = paste0(Block, Variety_new), 
                        condition_names = c(0, 0.2, 0.4, 0.6))
  })

# Original Random Assignment
with(Oats, table(Block, Variety))
with(Oats, table(Block, nitro))
with(Oats, table(Block, nitro, Variety))

# New Random Assignment
with(Oats, table(Block, Variety_new))
with(Oats, table(Block, nitro_new))
with(Oats, table(Block, nitro_new, Variety_new))

关键是要意识到您需要同时阻止品种和块以将子图随机化为硝基条件。(这就是为什么我们需要调用paste0)。

编辑

这是另一种方法(见评论)

library(randomizr) 
des <- rev(expand.grid(subplot=1:4, wholeplot=1:3, block=1:6)) 
des <- within(des,{ 
   plot_id <- paste0(block, "_", wholeplot) 
   Variety <- block_and_cluster_ra(
                block_var = block, 
                clust_var = plot_id, 
                condition_names = c("Golden Rain", "Marvellous", "Victory")) 
   nitro <- block_ra(block_var = plot_id, 
                     condition_names = c(0, 0.2, 0.4, 0.6)) 
}) 

with(des, table(Variety, block)) 
with(des, table(Variety, nitro)) 
with(des, table(Variety, nitro, block)) 
于 2017-05-01T15:47:59.967 回答