首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在实验设计中,为什么格拉科拉丁广场不能计算特定的治疗长度?

在实验设计中,为什么格拉科拉丁广场不能计算特定的治疗长度?
EN

Stack Overflow用户
提问于 2021-06-10 10:23:58
回答 1查看 54关注 0票数 0

在实验设计中,我试图设计一个Graeco Latin-Square,我相信这是一个扩展版的Latin Square设计,有更多的因素。但是,我发现它的行为很奇怪,下面是一些使用处理1和2模拟,长度为1-26的代码片段。

代码语言:javascript
复制
graeco_design_possibility <- function(test_until=20){
  library(agricolae)
  k_graeco <- seq(2,test_until,1)
  bool_possibility <- c()
  for(n in 2:test_until){
    b <- design.graeco(LETTERS[1:n], 1:n)
    if(is.null(b)){
      bool_possibility <- c(bool_possibility, FALSE)
    }else{
      bool_possibility <- c(bool_possibility, TRUE)
    }
  }
  simulation_graeco <- data.frame(number_k = k_graeco, success_run=bool_possibility)
  return(simulation_graeco)
}

当我对此进行测试时,模拟结果如下所示:(注意:k=26之后会发生更多奇怪的bug)

代码语言:javascript
复制
g <- graeco_design_possibility(26)
g
   number_k success_run
1         2        TRUE
2         3        TRUE
3         4        TRUE
4         5        TRUE
5         6       FALSE
6         7        TRUE
7         8        TRUE
8         9        TRUE
9        10        TRUE
10       11        TRUE
11       12        TRUE
12       13        TRUE
13       14       FALSE
14       15        TRUE
15       16       FALSE
16       17        TRUE
17       18       FALSE
18       19        TRUE
19       20       FALSE
20       21        TRUE
21       22       FALSE
22       23        TRUE
23       24       FALSE
24       25        TRUE
25       26       FALSE

是这样的,我看了文档,它说,函数只适用于奇数和偶数的平方(4,8,10和12),我不太理解这个解释,因为模拟结果和解释有点矛盾: 6,14,16是偶数,对吗?那么,为什么这个问题会这样持续下去呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-06-11 04:31:56

我删除了开发人员应该在design.graeco()函数中限制的限制,我真的不知道为什么在治疗上应该限制特定的长度,这是对Graeco拉丁广场设计没有限制的最终结果

代码语言:javascript
复制
design_graeco_custom <- function(trt1, trt2, serie = 2, seed = 0, kinds = "Super-Duper", randomization = TRUE){
  number <- 10
  if (serie > 0) 
    number <- 10^serie
  r <- length(trt1)
  if (seed == 0) {
    genera <- runif(1)
    seed <- .Random.seed[3]
  }
  set.seed(seed, kinds)
  parameters <- list(design = "graeco", trt1 = trt1, 
                     trt2 = trt2, r = r, serie = serie, seed = seed, kinds = kinds, 
                     randomization)
  col <- rep(gl(r, 1), r)
  fila <- gl(r, r)
  fila <- as.character(fila)
  fila <- as.numeric(fila)
  plots <- fila * number + (1:r)
  C1 <- data.frame(plots, row = factor(fila), col)
  
  C2 <- C1
  a <- 1:(r * r)
  dim(a) <- c(r, r)
  for (i in 1:r) {
    for (j in 1:r) {
      k <- i + j - 1
      if (k > r) 
        k <- i + j - r - 1
      a[i, j] <- k
    }
  }
  m <- trt1
  if (randomization) 
    m <- sample(trt1, r)
  C1 <- data.frame(C1, m[a])
  m <- trt2
  if (randomization) 
    m <- sample(trt2, r)
  C2 <- data.frame(C2, m[a])
  ntr <- length(trt1)
  C1 <- data.frame(C1, B = 0)
  for (k in 1:r) {
    x <- C1[k, 4]
    i <- 1
    for (j in 1:(r^2)) {
      y <- C2[(k - 1) * r + i, 4]
      if (C1[j, 4] == x) {
        C1[j, 5] <- y
        i <- i + 1
      }
    }
  }
  
  C1[, 4] <- as.factor(C1[, 4])
  C1[, 5] <- as.factor(C1[, 5])
  names(C1)[4] <- c(paste(deparse(substitute(trt1))))
  names(C1)[5] <- c(paste(deparse(substitute(trt2))))
  outdesign <- list(parameters = parameters, 
                    sketch = matrix(paste(C1[,4], C1[,5]), 
                                    byrow = TRUE, ncol = r), book = C1)
  return(outdesign)
}

我还发现,当治疗超过26岁时,我决定使用额外的助手函数来生成可能的字母:

代码语言:javascript
复制
letters_construction <- function(n=27, format_letter="upper"){
  if(n > 26 && n <= 702){
    letter_result <- NULL
    letter_comb <- NULL
    if(format_letter=="upper"){
      letter_result <- LETTERS[1:26]
      letter_comb <- expand.grid(LETTERS[1:26], LETTERS[1:26])
    }else if(format_letter=="lower"){
      letter_result <- letters[1:26]
      letter_comb <- expand.grid(letters[1:26], letters[1:26])
    }
    letter_comb$comb <- paste0(letter_comb$Var2, letter_comb$Var1)
    letter_finalcomb <- as.character(letter_comb$comb)
    n_remainder <- n-26
    letter_result <- c(letter_result, letter_finalcomb[1:n_remainder])
    return(letter_result)
  }
}

所以我可以像这样实现大格拉科拉丁广场的设计:

代码语言:javascript
复制
b <- letters_construction(30)
design_graeco_custom(b, 1:30)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67919290

复制
相关文章

相似问题

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