大家早上好, 我正在努力(甚至使用 ChatGPT 的帮助)为我的实验设计创建随机块设计。
简而言之,我有:
样本大小 = 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 矩阵中执行的代码,执行威廉姆森平方但无法随机化它。最后我想要得到的是这个情节:我需要的情节提前感谢您的帮助。
我认为您的设计最好使用
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