Release R version R-CMD-check Codecov test coverage pkgdown documentation License Shiny GUI Engines
🌱 agriDesignR agriDesignR Hex Logo
Motor Asistido de Decisión, Diagnóstico y Modelos Mixtos para Ciencias Agronómicas y Biológicas
agriDesignR es un paquete de R diseñado para resolver una necesidad crítica en la investigación agrícola, biotecnología vegetal y biología experimental: cerrar la brecha entre el diseño experimental sobre el papel y la parametrización estadística rigurosa.
Documentación: guías pkgdown · planificación · modelos mixtos · diagnósticos y remedios · aplicación Shiny · contribuir · reportar un error
A diferencia de paquetes que asumen que el usuario ya conoce de antemano la parametrización matemática exacta (lme4, glmmTMB, aov), agriDesignR actúa como un árbitro metodológico y motor de decisión asistido integral:
- Antes de Sembrar (Pre-Ensayo): Diagnostica gradientes ambientales en invernaderos/campos, recomienda el diseño óptimo (DCA, DBCA, Factorial, Split-Plot, Split-Split-Plot, Cuadro Latino), calcula réplicas mínimas para garantizar poder estadístico, dibuja el croquis espacial 2D de las mesas con unidades experimentales (macetas) y genera la plantilla CSV lista para fenotipar.
- Después de Cosechar (Post-Ensayo): Audita supuestos, ajusta tanto ANOVA Clásico Tradicional (
aov/lm) como Modelos Lineales Mixtos (LMM / GLMM) con grados de libertad Kenward-Roger / Satterthwaite, descompone interacciones en efectos simples, aplica remedios automáticos (Box-Cox /varIdent), evalúa la Eficiencia Relativa del Bloqueo (Cochran & Cox) y genera figuras vectoriales estilo Nature e informes doctorales en Markdown. - Interfaz Interactiva: Incluye una aplicación web completa en Bootstrap 5 (
launch_app()).
agriDesignR incorpora reglas de decisión metodológicas estrictas para prevenir malas prácticas (como confundir factoriales con parcelas divididas o crear bloques innecesarios):
¿Existe heterogeneidad espacial o temporal?
│
┌────────────────────────┴────────────────────────┐
NO SÍ
│ │
¿Ambiente 100% homogéneo? ¿Cuántos gradientes existen?
(Cámara de cultivo, in vitro, sustrato uniforme) │
│ ┌────────────────┴────────────────┐
🌿 DCA / CRD 1 GRADIENTE 2 GRADIENTES
(Completamente al Azar) (Mesas de invernadero, pendiente) (Luz + Ventilación)
Modelo: lm(y ~ Tratamiento) │ │
¿Hay restricción física 🏛️ CUADRO LATINO
al aplicar un factor? Modelo: lm(y ~ Fila + Col + Trt)
│
┌───────────────┴───────────────┐
NO SÍ (Macro-factor: temperatura de
│ cámara, riego por inundación)
🌾 DBCA / RCBD │
(Bloques Completos al Azar) 🌱 SPLIT-PLOT
Modelo: lm(y ~ Bloque + Trt) (Parcelas Divididas)
o lm(y ~ Bloque + FactorA * FactorB) Error A: (1 | Bloque:FactorA)
Error B: Residual
- DCA (Completamente al Azar / CRD): Usar únicamente cuando el ambiente es 100% homogéneo (cámaras de cultivo, fitotrones, placas Petri in vitro). Si no hay gradiente, bloquear reduce grados de libertad del error residual y disminuye el poder estadístico.
- DBCA (Bloques Completos al Azar / RCBD): Usar cuando existe un gradiente (ej: mesas de invernadero, gradiente de luz o pendiente de campo). Todos los tratamientos deben poder aleatorizarse de forma independiente dentro de cada mesa/bloque.
- Split-Plot (Parcelas Divididas): Usar ESTRICTAMENTE cuando existe una restricción física en la aleatorización (ej: la temperatura se aplica a la mesa completa y los genotipos se aleatorizan dentro de cada mesa). NUNCA usar Split-Plot solo por tener 2 factores. Si ambos factores se pueden aleatorizar maceta por maceta, se DEBE usar un DBCA Factorial.
- Split-Split-Plot (Parcelas Sub-Subdivididas): Cuando existen dos niveles jerárquicos de restricción física (3 factores).
- Cuadro Latino (Latin Square): Cuando existen dos gradientes perpendiculares (ej: Filas en sentido de la luz y Columnas en sentido de los extractores de aire).
-
Medidas Repetidas (Repeated Measures): Cuando la misma maceta/planta se evalúa a lo largo del tiempo (
$T_1, T_2, \dots, T_k$ ).
generate_layout() y plot(layout) generan el croquis espacial de siembra detallando cada Mesa / Bloque, Posición de Maceta y Código Único de Unidad Experimental (Plot_ID):
Croquis 2D Invernadero Split-Plot
agriDesignR ofrece soporte de primer nivel para ambas aproximaciones estadísticas:
| Característica | 🏛️ ANOVA Clásico Tradicional (aov / lm) |
🚀 Modelos Lineales Mixtos (lme4 / glmmTMB) |
|---|---|---|
| Cuándo Elegirlo | Diseños perfectamente balanceados, bloques fijos de invernadero, tablas estándar para tesis de pregrado/magíster. | Datos desbalanceados, macetas/plantas perdidas, estructuras jerárquicas reales (Split-Plot), bloques como muestra aleatoria. |
| Pruebas de Hipótesis | Pruebas F exactas (Sumas de Cuadrados Tipo I, II, III). | Pruebas F con corrección de Kenward-Roger o Satterthwaite. |
| Comparaciones Múltiples | TukeyHSD(), Fisher LSD, Duncan, Scheffé. |
emmeans con ajuste Tukey, descomposición en efectos simples (by = ...). |
| Sintaxis R | aov(Y ~ Bloque + FactorA * FactorB, data) |
lmer(Y ~ FactorA * FactorB + (1|Bloque), data) |
Puedes instalar la versión oficial de desarrollo directamente desde GitHub con remotes:
# Instalar remotes si no lo tienes instalado if (!requireNamespace("remotes", quietly = TRUE)) { install.packages("remotes") } # Instalar agriDesignR remotes::install_github("PALP31/agriDesignR")
library(agriDesignR) # Diagnosticar si necesitas DCA, DBCA o Split-Plot para tu invernadero plan <- plan_experiment( setting = "greenhouse", treatments = list( temperature = c("22C", "36C"), genotype = paste0("G", 1:5) ), whole_plot_factor = "temperature", sub_plot_factor = "genotype", spatial_gradients = "table_to_table" ) print(plan) # Generar el croquis aleatorizado de las mesas y exportar plantilla CSV para fenotipar layout_siembra <- generate_layout( design = "Split-Plot", treatments = list(temperature = c("22C", "36C"), genotype = paste0("G", 1:5)), replications = 4, seed = 123, output_csv = "plantilla_siembra_invernadero.csv" ) # Dibujar el mapa 2D de las mesas y macetas plot(layout_siembra)
# Cargar datos de trigo data("wheat_splitplot") # 1. Sugerencia de sintaxis para ANOVA y Modelos Mixtos diag <- check_design(wheat_splitplot, response = "grain_yield", main_plot = "temperature", sub_plot = "genotype", block = "block") sugg <- suggest_model(diag) print(sugg) # 2. Ajuste mediante ANOVA clásico fit_aov <- aov(grain_yield ~ block + temperature * genotype, data = wheat_splitplot) summary(fit_aov) # 3. Comparaciones múltiples estándar de Tukey TukeyHSD(fit_aov, "genotype")
# 1. Ajuste con grados de libertad Kenward-Roger y semáforo de supuestos fit_lmm <- fit_experiment( data = wheat_splitplot, response = "grain_yield", main_plot = "temperature", sub_plot = "genotype", block = "block" ) print(fit_lmm) # 2. Descomposición en Efectos Simples (Genotipos dentro de cada Temperatura) post_simples <- agri_posthoc(fit_lmm, trt = "genotype", by = "temperature", method = "tukey") print(post_simples) # 3. Remedios automáticos ante heterocedasticidad (Box-Cox / varIdent) rem <- remedy(fit_lmm, method = "auto") print(rem) # 4. Eficiencia Relativa del Bloqueo (Cochran & Cox / Kempthorne) eff <- calc_design_efficiency(fit_lmm) print(eff) # 5. Ranking Biológico y Tamaños de Efecto (Cohen's d vs Control G1) rnk <- agri_ranking(fit_lmm, trt = "genotype", control = "G1") print(rnk)
La decisión sobre el bloque es explícita e independiente del motor:
block_as = "auto" conserva el comportamiento histórico, "fixed" incluye
block como efecto fijo y "random" usa (1 | block) con lme4, nlme o
glmmTMB. Cuando se grafican dos tratamientos, plot_publication() compara por
defecto los niveles de group_var dentro de cada nivel de x_var; use trt y
by para definir otra familia de comparaciones.
# Generar figura de barras con letras de significancia y paleta académica p <- plot_publication( fit_lmm, type = "bar", error_bar = "se", palette = "forest", title = "Durum Wheat Grain Yield under Heat Stress", ylab = "Grain Yield (g / plant ± SE)" ) print(p) # ggplot2::ggsave("figura_trigo_publicacion.pdf", p, width = 8, height = 5)
# Genera un reporte doctoral completo con metodología, supuestos y tablas informe <- experiment_report(fit_lmm, output_file = "informe_cientifico_trigo.md") print(informe)
Para investigadores o estudiantes que prefieran una interfaz visual:
library(agriDesignR)
launch_app()-
wheat_splitplot: Ensayo Split-Plot de estrés por calor (Control vs 36°C) en 5 genotipos de trigo duro (Triticum durum) con 4 bloques. -
maize_3way_factorial: Ensayo trifactorial (Temperatura$\times$ Riego$\times$ Genotipo) en maíz evaluando biomasa y SPAD. -
tomato_rcbd: Ensayo DBCA de fertilización nitrogenada en tomate con unidades perdidas y covariable de densidad de plantas. -
maize_repeated: Medidas repetidas longitudinales de biomasa en maíz bajo 3 regímenes de riego a lo largo de 5 semanas. -
fungicide_crd: Ensayo DCA con variable discreta (conteos) para modelos Poisson y pruebas no paramétricas (Kruskal-Wallis / Dunn).
Las decisiones estadísticas deben seguir el diseño y el estimando del estudio.
agriDesignR ofrece automatización auditable, no reemplaza la revisión
metodológica. Referencias completas están en inst/REFERENCES.bib:
- Box y Cox, 1964, An Analysis of Transformations — transformaciones Box-Cox.
- Kenward y Roger, 1997, Small Sample Inference for Fixed Effects from Restricted Maximum Likelihood — inferencia de muestra pequeña.
- Satterthwaite, 1946, An Approximate Distribution of Estimates of Variance Components — grados de libertad aproximados.
- Cochran y Cox, 1957, Experimental Designs, 2nd ed. — diseños bloqueados y eficiencia relativa.
- Bates et al., 2015, Fitting Linear Mixed-Effects Models Using lme4 — modelos lineales mixtos.
- Bolker et al., 2009, Generalized Linear Mixed Models: A Practical Guide for Ecology and Evolution — modelos mixtos generalizados.
- Autor: Paul Lopez (Estudiante del Doctorado en Biotecnología Vegetal | Profesor Universitario de Aplicaciones Estadísticas (Pregrado))
- Afiliación: Pontificia Universidad Católica de Chile
- GitHub: @PALP31
- Licencia: MIT License (2026)