R 中的实验设计:块随机化

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

大家早上好, 我正在努力(甚至使用 ChatGPT 的帮助)为我的实验设计创建随机块设计。

简而言之,我有:

  • 3 种治疗方法(A、B、C)
  • 3 叶子去除(No、75、81)
  • 9 种组合各重复 4 次

样本大小 = 9 x 4 = 36

现在,我想随机化这个“数据集”,考虑 3 行 x 12 列矩阵中的 4 个块。问题是我还希望在每个块中,所有 9 种处理都应该出现,这意味着 9 种处理在一个块中只能出现一次。

我尝试过不同的软件包,例如

agricolae
psych
...但没有一个效果很好。

 # Define symbols (treatments) 
symbols <- c("CN", "CGP","CV", "KN","KGP","KV","ZN","ZGP","ZV")

 # Function to generate a Williamson square 
generate_williamson_square <- function(symbols) 
{ n <- length(symbols) square <- matrix("", nrow = n, ncol = n) for (i in 1:n)
 { for (j in 1:n) { square[i, j] <- symbols[(i + j - 2) %% n + 1] } } return(square) } 

# Generate Williamson square 
williamson_square <- generate_williamson_square(symbols)

# Assuming you have already generated the Williamson square 
matrix (williamson_square) 

# Extract the first 4 rows of the Williamson square 
data_set <- williamson_square[1:4, ] 

# Shuffle the columns to create different positions 
matrix_4x9 <- matrix(data = data_set, ncol = 9, nrow = 4) 

symbol_colors <- c("CN" = "darkgreen","CGP" = "lightgreen", "CV" = "green2", 
"KN" = "darkblue", "KGP" = "lightblue", "KV" = "cyan2", "ZN" = "red4", 
"ZGP" = "#FE6F5E","ZV" = "red2") 

# Plot treatments 
plot(0, 0, type = "n", xlab = "Plot", ylab = "Row", xlim = c(0, 9), ylim = c(0, 4), xaxt = "n", yaxt= "n") 
axis(1, at = 1:9, labels = FALSE, tcl = -1.0, line = +0.0) axis(2, at = 1:4, labels = FALSE, tcl = -1.0, line = +0.0) 
for (i in 1:ncol(data_set)) { for (j in 1:nrow(data_set)) { text(i - 0.5, j - 0.5, data_set[j, i], cex = 1.2, col = symbol_colors[match(data_set[j, i], symbols)]) } } # X axis labels text(1:6 - 0.5, -0.5, 1:6, xpd = TRUE, adj = 1) # Y-axis labels for(j in 1:6) { text(-0.35, 6.5 - j, j, xpd = T, adj = 4) # Corrected the indexing here } 

# Title 
title("Randomization of Pinot Noir open field") # Print the plot print() 

这是我尝试在 4 x 9 矩阵中执行的代码,执行威廉姆森平方但无法随机化它。最后我想要得到的是这个情节:我需要的情节提前感谢您的帮助。

r
1个回答
0
投票

我认为您的设计最好使用

agricolae
包生成。您想要一个双因素设计,可以通过预先组合处理来实现。下面是一些执行此操作的代码。如果您更改
seed=
,您每次都会得到不同的随机化。这种设计的唯一缺点是处理方法没有空间平衡。我不知道公共存储库上有任何 R 包可以做到这一点。

library(agricolae)

trts <- c("A_0","B_0","C_0","A_75","B_75","C_75","A_81","B_81","C_81")

outdesign <- design.rcbd(trt=trts, r=4, serie=2, seed=999, continue=TRUE)

str(outdesign)
#> List of 3
#>  $ parameters:List of 7
#>   ..$ design: chr "rcbd"
#>   ..$ trt   : chr [1:9] "A_0" "B_0" "C_0" "A_75" ...
#>   ..$ r     : num 4
#>   ..$ serie : num 2
#>   ..$ seed  : num 999
#>   ..$ kinds : chr "Super-Duper"
#>   ..$       : logi TRUE
#>  $ sketch    : chr [1:4, 1:9] "A_75" "B_81" "A_81" "A_0" ...
#>  $ book      :'data.frame':  36 obs. of  3 variables:
#>   ..$ plots: num [1:36] 101 102 103 104 105 106 107 108 109 110 ...
#>   ..$ block: Factor w/ 4 levels "1","2","3","4": 1 1 1 1 1 1 1 1 1 2 ...
#>   ..$ trts : Factor w/ 9 levels "A_0","A_75","A_81",..: 2 5 9 4 3 8 1 6 7 6 ...

# Examine the blocks in the desired field layout grid (3 x 12)
print(matrix(outdesign$book$plots, byrow=FALSE, ncol=12))
#>      [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12]
#> [1,]  101  104  107  110  113  116  119  122  125   128   131   134
#> [2,]  102  105  108  111  114  117  120  123  126   129   132   135
#> [3,]  103  106  109  112  115  118  121  124  127   130   133   136
print(matrix(outdesign$book$trts, byrow=FALSE, ncol=12))
#>      [,1]   [,2]   [,3]   [,4]   [,5]   [,6]   [,7]   [,8]   [,9]   [,10] 
#> [1,] "A_75" "B_0"  "A_0"  "B_81" "C_75" "A_81" "A_81" "B_0"  "B_75" "A_0" 
#> [2,] "B_75" "A_81" "B_81" "A_75" "C_0"  "B_0"  "C_0"  "A_75" "A_0"  "C_75"
#> [3,] "C_81" "C_75" "C_0"  "C_81" "A_0"  "B_75" "C_81" "B_81" "C_75" "B_0" 
#>      [,11]  [,12] 
#> [1,] "A_75" "C_0" 
#> [2,] "B_75" "B_81"
#> [3,] "A_81" "C_81"
print(matrix(outdesign$book$block, byrow=FALSE, ncol=12))
#>      [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12]
#> [1,] "1"  "1"  "1"  "2"  "2"  "2"  "3"  "3"  "3"  "4"   "4"   "4"  
#> [2,] "1"  "1"  "1"  "2"  "2"  "2"  "3"  "3"  "3"  "4"   "4"   "4"  
#> [3,] "1"  "1"  "1"  "2"  "2"  "2"  "3"  "3"  "3"  "4"   "4"   "4"

# Add row and col factors to the design dataframe
full.des <- outdesign$book
full.des$rows <- rep(1:3, times=12)
full.des$cols <- rep(1:12, each=3)

# Double-check everything!
full.des
#>    plots block trts rows cols
#> 1    101     1 A_75    1    1
#> 2    102     1 B_75    2    1
#> 3    103     1 C_81    3    1
#> 4    104     1  B_0    1    2
#> 5    105     1 A_81    2    2
#> 6    106     1 C_75    3    2
#> 7    107     1  A_0    1    3
#> 8    108     1 B_81    2    3
#> 9    109     1  C_0    3    3
#> 10   110     2 B_81    1    4
#> 11   111     2 A_75    2    4
#> 12   112     2 C_81    3    4
#> 13   113     2 C_75    1    5
#> 14   114     2  C_0    2    5
#> 15   115     2  A_0    3    5
#> 16   116     2 A_81    1    6
#> 17   117     2  B_0    2    6
#> 18   118     2 B_75    3    6
#> 19   119     3 A_81    1    7
#> 20   120     3  C_0    2    7
#> 21   121     3 C_81    3    7
#> 22   122     3  B_0    1    8
#> 23   123     3 A_75    2    8
#> 24   124     3 B_81    3    8
#> 25   125     3 B_75    1    9
#> 26   126     3  A_0    2    9
#> 27   127     3 C_75    3    9
#> 28   128     4  A_0    1   10
#> 29   129     4 C_75    2   10
#> 30   130     4  B_0    3   10
#> 31   131     4 A_75    1   11
#> 32   132     4 B_75    2   11
#> 33   133     4 A_81    3   11
#> 34   134     4  C_0    1   12
#> 35   135     4 B_81    2   12
#> 36   136     4 C_81    3   12

# Save design ready for experiment and data collection
library(writexl)
write_xlsx(full.des, path="my_design.xlsx")

创建于 2024-05-15,使用 reprex v2.1.0

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