AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / coding / Perguntas / 79584196
Accepted
Indy
Indy
Asked: 2025-04-21 15:27:34 +0800 CST2025-04-21 15:27:34 +0800 CST 2025-04-21 15:27:34 +0800 CST

Com agricolae, como adicionar restrições espaciais em delineamentos experimentais para evitar tratamentos adjacentes?

  • 772

Atualmente, estou usando o pacote agricolae em R para gerar delineamentos em blocos casualizados completos (DBCC) com seis tratamentos e quatro repetições. Embora a randomização funcione conforme o esperado, notei que, às vezes, o mesmo tratamento aparece adjacente a si mesmo em diferentes blocos (por exemplo, o mesmo tratamento em parcelas vizinhas). Em nossos testes de campo, a empresa prefere evitar tais situações devido a potenciais efeitos de vizinhança (por exemplo, deriva, interferência de raízes).

Minhas perguntas são: É possível evitar essa adjacência diretamente dentro de agricolae, impondo restrições espaciais no projeto?

Caso contrário, a melhor abordagem seria repetir as randomizações até que um layout espacialmente aceitável seja encontrado?

Existem outros pacotes ou estratégias que você recomendaria que permitissem mais controle sobre o layout do tratamento, mas ainda fossem compatíveis com agricolae?

Abaixo, um exemplo prático mínimo mostrando como eu gero o design e o ploto. Sugestões sobre como adicionar restrições espaciais serão muito apreciadas!

# Install agricolae and agricolaeplotr if needed
install.packages("agricolae")
install.packages("agricolaeplotr")

library(tidyverse)
library(agricolae)
library(agricolaeplotr) # for plot_rcbd()

# Define treatment names
fertilizers <- c("Growth2000",
                "Starter50",
                "WellGrown",
                "MaxDev",
                "SuperBoost",
                "NatFertilizer")

# Generate a randomized complete block design (RCBD)
RCBD <- design.rcbd(trt = treatments,
                    r = 4,
                    seed = 2025)

# Plot the field layout
plot_rcbd(design = RCBD,
          factor_name = "fertilizers",      # Column containing the treatment levels
          treatment_label = "fertilizers",  # Display treatment names in the plot
          width = 2,   # Width of each plot (in meters)
          height = 1)  # Height of each block (in meters)

Este gráfico mostra um exemplo do que eu gostaria de evitar: o tratamento Growth2000 aparece em gráficos adjacentes nos blocos 3 e 4, primeira coluna.

design exp com efeito vizinho

Agradecemos antecipadamente seu feedback e quaisquer ideias que você possa ter para controlar a adjacência do tratamento no layout do campo.

Atenciosamente.

  • 1 1 respostas
  • 34 Views

1 respostas

  • Voted
  1. Best Answer
    Edward
    2025-04-21T16:58:23+08:002025-04-21T16:58:23+08:00

    Dei uma olhada rápida no agricolaepacote, mas não vi nenhum design que atendesse às suas necessidades, então modifiquei a design.rcbdfunção para que ela verifique a atribuição anterior e reamostre até que os gráficos fiquem todos diferentes. Fiz apenas seis modificações (indicadas pelas linhas com #).

    design.rcbd2 <- function(trt, r, serie = 2, seed = 0, kinds = "Super-Duper", 
                             first = TRUE, continue = FALSE, randomization = TRUE) {
      number <- 10
      if (serie > 0) 
        number <- 10^serie
      ntr <- length(trt)
      if (seed == 0) {
        genera <- runif(1)
        seed <- .Random.seed[3]
      }
      set.seed(seed, kinds)
      parameters <- list(design = "rcbd", trt = trt, r = r, serie = serie, 
                         seed = seed, kinds = kinds, randomization)
      # mtr <- trt
      mtr <- vector(mode="list", length=r)  ### Modify above line
      if (randomization) 
        # mtr <- sample(trt, ntr, replace = FALSE)
        mtr[[1]] <- sample(trt, ntr, replace = FALSE)  ### Modify
      block <- c(rep(1, ntr))
      for (y in 2:r) {
        block <- c(block, rep(y, ntr))
        mtr[[y]] <- sample(trt, ntr, replace = FALSE)  ### Insert
        while(any(mtr[[y]]==mtr[[y-1]])) {   # Insert
          if (randomization) 
            # mtr <- c(mtr, sample(trt, ntr, replace = FALSE))
            mtr[[y]] <- sample(trt, ntr, replace = FALSE)  ### Modify above line
        }
      }
      mtr <- unlist(mtr)   # Insert
      plots <- block * number + (1:ntr)
      book <- data.frame(plots, block = as.factor(block), trt = as.factor(mtr))
      names(book)[3] <- c(paste(deparse(substitute(trt))))
      names(book)[3] <- c(paste(deparse(substitute(trt))))
      if (continue) {
        start0 <- 10^serie
        if (serie == 0) 
          start0 <- 0
        book$plots <- start0 + 1:nrow(book)
      }
      outdesign <- list(parameters = parameters, sketch = matrix(book[, 3], byrow = TRUE, ncol = ntr), book = book)
      return(outdesign)
    }
    

    Teste:

    RCBD2 <- design.rcbd2(trt = fertilizers,
                 r = 4,
                 randomization=TRUE,
                 seed = 2025)
    
    plot_rcbd(design = RCBD2,
              factor_name = "fertilizers",      # Column containing the treatment levels
              treatment_label = "fertilizers",  # Display treatment names in the plot
              width = 2,   # Width of each plot (in meters)
              height = 1)  # Height of each block (in meters)
    

    insira a descrição da imagem aqui

    • 1

relate perguntas

  • Adicionar número de série para atividade de cópia ao blob

  • A fonte dinâmica do empacotador duplica artefatos

  • Selecione linhas por grupo com 1s consecutivos

  • Lista de chamada de API de gráfico subscritoSkus estados Privilégios insuficientes enquanto os privilégios são concedidos

  • Função para criar DFs separados com base no valor da coluna

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Reformatar números, inserindo separadores em posições fixas

    • 6 respostas
  • Marko Smith

    Por que os conceitos do C++20 causam erros de restrição cíclica, enquanto o SFINAE antigo não?

    • 2 respostas
  • Marko Smith

    Problema com extensão desinstalada automaticamente do VScode (tema Material)

    • 2 respostas
  • Marko Smith

    Vue 3: Erro na criação "Identificador esperado, mas encontrado 'import'" [duplicado]

    • 1 respostas
  • Marko Smith

    Qual é o propósito de `enum class` com um tipo subjacente especificado, mas sem enumeradores?

    • 1 respostas
  • Marko Smith

    Como faço para corrigir um erro MODULE_NOT_FOUND para um módulo que não importei manualmente?

    • 6 respostas
  • Marko Smith

    `(expression, lvalue) = rvalue` é uma atribuição válida em C ou C++? Por que alguns compiladores aceitam/rejeitam isso?

    • 3 respostas
  • Marko Smith

    Um programa vazio que não faz nada em C++ precisa de um heap de 204 KB, mas não em C

    • 1 respostas
  • Marko Smith

    PowerBI atualmente quebrado com BigQuery: problema de driver Simba com atualização do Windows

    • 2 respostas
  • Marko Smith

    AdMob: MobileAds.initialize() - "java.lang.Integer não pode ser convertido em java.lang.String" para alguns dispositivos

    • 1 respostas
  • Martin Hope
    Fantastic Mr Fox Somente o tipo copiável não é aceito na implementação std::vector do MSVC 2025-04-23 06:40:49 +0800 CST
  • Martin Hope
    Howard Hinnant Encontre o próximo dia da semana usando o cronógrafo 2025-04-21 08:30:25 +0800 CST
  • Martin Hope
    Fedor O inicializador de membro do construtor pode incluir a inicialização de outro membro? 2025-04-15 01:01:44 +0800 CST
  • Martin Hope
    Petr Filipský Por que os conceitos do C++20 causam erros de restrição cíclica, enquanto o SFINAE antigo não? 2025-03-23 21:39:40 +0800 CST
  • Martin Hope
    Catskul O C++20 mudou para permitir a conversão de `type(&)[N]` de matriz de limites conhecidos para `type(&)[]` de matriz de limites desconhecidos? 2025-03-04 06:57:53 +0800 CST
  • Martin Hope
    Stefan Pochmann Como/por que {2,3,10} e {x,3,10} com x=2 são ordenados de forma diferente? 2025-01-13 23:24:07 +0800 CST
  • Martin Hope
    Chad Feller O ponto e vírgula agora é opcional em condicionais bash com [[ .. ]] na versão 5.2? 2024-10-21 05:50:33 +0800 CST
  • Martin Hope
    Wrench Por que um traço duplo (--) faz com que esta cláusula MariaDB seja avaliada como verdadeira? 2024-05-05 13:37:20 +0800 CST
  • Martin Hope
    Waket Zheng Por que `dict(id=1, **{'id': 2})` às vezes gera `KeyError: 'id'` em vez de um TypeError? 2024-05-04 14:19:19 +0800 CST
  • Martin Hope
    user924 AdMob: MobileAds.initialize() - "java.lang.Integer não pode ser convertido em java.lang.String" para alguns dispositivos 2024-03-20 03:12:31 +0800 CST

Hot tag

python javascript c++ c# java typescript sql reactjs html

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve