Type: Package
Title: Data Visualization and Statistical Tools for Agroindustrial Experiments
Version: 0.3.0
Maintainer: Joaquin Alejandro Salinas Angeles <joaquinsa03@gmail.com>
Description: Set of tools for statistical analysis, visualization, and reporting of agroindustrial and agricultural experiments. The package provides functions to perform one-way and two-way ANOVA with post-hoc tests (Tukey HSD and Duncan MRT), Welch ANOVA for heteroscedastic data, and the Games-Howell post-hoc test as a robust alternative when variance homogeneity fails. Normality of residuals is assessed with the Shapiro-Wilk test and homoscedasticity with the Fligner-Killeen test; the appropriate statistical path is selected automatically based on these diagnostics. Coefficients of variation and statistical power (via one-way ANOVA power analysis) are reported alongside the post-hoc letter display. High-level wrappers allow automated multi-variable analysis with optional clustering by one or two experimental factors, with support for custom level ordering and relabeling. Results are returned as 'ggplot2' boxplots with mean and letter annotations, wide-format summary tables ready for publication or LaTeX rendering, and structured decision summaries for rapid agronomic interpretation. Direct export to Excel spreadsheets and high-resolution image tables is also supported. Functions follow methods widely used in agronomy, field trials, and plant breeding. Key references: Tukey (1949) <doi:10.2307/3001913>; Duncan (1955) <doi:10.2307/3001478>; Welch (1951) <doi:10.2307/2332579>; Games and Howell (1976) <doi:10.2307/2529858>; Shapiro and Wilk (1965) <doi:10.2307/2333709>; Fligner and Killeen (1976) <doi:10.2307/2529096>; Cohen (1988, ISBN:9781138892899); Wickham (2016, ISBN:9783319242750) for 'ggplot2'; see also 'agricolae' https://CRAN.R-project.org/package=agricolae and 'rstatix' https://CRAN.R-project.org/package=rstatix. Version en espanol: Conjunto de herramientas para el analisis estadistico, visualizacion y generacion de reportes en ensayos agroindustriales y agricolas. Incluye ANOVA univariado y bifactorial con pruebas post-hoc (Tukey HSD y Duncan MRT), ANOVA de Welch para datos heterocedasticos y la prueba post-hoc de Games-Howell como alternativa robusta cuando falla la homogeneidad de varianzas. La normalidad de residuos se evalua con la prueba de Shapiro-Wilk y la homogeneidad de varianzas con la prueba de Fligner-Killeen; la ruta estadistica apropiada se selecciona automaticamente segun estos diagnosticos. Se reportan coeficientes de variacion y potencia estadistica junto con las letras de separacion de medias. Los envoltorios de alto nivel permiten analisis multivariable automatizado con agrupamiento opcional por uno o dos factores experimentales, con soporte para orden y etiquetado personalizado de niveles. Los resultados se devuelven como boxplots con anotaciones de medias y letras, tablas resumen en formato ancho listas para publicacion o renderizado en LaTeX, y resumenes de decision para interpretacion agronomica rapida. Tambien se soporta exportacion directa a Excel e imagenes de alta resolucion para informes tecnicos.
License: MIT + file LICENSE
Encoding: UTF-8
Language: en, es
Depends: R (≥ 3.5.0)
Imports: dplyr, ggplot2, tidyr, stringr, agricolae, stats, pwr, rlang, openxlsx, rstatix, multcompView
Suggests: kableExtra, magick, tinytex, cli, testthat (≥ 3.0.0)
Config/testthat/edition: 3
RoxygenNote: 7.3.3
URL: https://github.com/Joa3aquin50/agrobox
BugReports: https://github.com/Joa3aquin50/agrobox/issues
LazyData: true
NeedsCompilation: no
Packaged: 2026-04-13 02:56:50 UTC; JOAQUIN SALINAS
Author: Joaquin Alejandro Salinas Angeles ORCID iD [aut, cre]
Repository: CRAN
Date/Publication: 2026-04-13 05:40:07 UTC

Boxplot con anotaciones post-hoc estadísticas para experimentos agronómicos / Boxplot with Statistical Post-hoc Annotations for Agronomic Experiments

Description

Genera boxplots con puntos jitter, etiquetas de medias y letras de comparación múltiple para experimentos agronómicos. Soporta facetas con hasta dos variables de agrupación y selecciona automáticamente el método estadístico en función de la normalidad (Shapiro-Wilk) y la homogeneidad de varianzas (Fligner-Killeen).

Usage

agrobox(
  data,
  test = c("Duncan", "Tukey"),
  var.equal = TRUE,
  factor,
  factor2 = NULL,
  orden_factor = NULL,
  grupo1_orden = NULL,
  grupo2_orden = NULL,
  bloque = NULL,
  variable,
  titulo = NULL,
  estructura = NULL,
  lim_sup = NULL,
  lim_inf = NULL,
  colores = NULL
)

Arguments

data

Data frame con los datos experimentales / A data frame containing the experimental data.

test

Método post-hoc: "Duncan" (default) o "Tukey" / Post-hoc test: "Duncan" (default) or "Tukey".

var.equal

Si TRUE usa ANOVA clásico; si FALSE activa Welch / Logical. If TRUE uses classic ANOVA; if FALSE enables Welch path.

factor

Nombre de la variable categórica principal / Name of the main categorical variable (treatment).

factor2

Segundo factor opcional para interacción / Optional second factor for interaction.

orden_factor

Vector para ordenar/renombrar tratamientos / Vector to reorder/relabel factor levels.

grupo1_orden

Igual que orden_factor pero para filas de facetas / Same as orden_factor for row facets.

grupo2_orden

Igual que orden_factor pero para columnas de facetas / Same as orden_factor for column facets.

bloque

Variable de bloque opcional / Optional blocking variable.

variable

Variable numérica de respuesta / Numeric response variable.

titulo

Etiqueta del eje Y / Y-axis label.

estructura

Especificación de facetas ("fila~columna") / Faceting structure ("row~col").

lim_sup

Límite superior del eje Y / Upper y-axis limit.

lim_inf

Límite inferior del eje Y / Lower y-axis limit.

colores

Vector de colores / Color vector for factor levels.

Details

Generates boxplots with jittered points, mean labels, and post-hoc letter annotations for agronomic experiments. Supports faceting by up to two grouping variables and automatic selection of the statistical method based on normality (Shapiro-Wilk) and homoscedasticity (Fligner-Killeen) tests.

La función aplica la siguiente lógica de decisión para cada panel (cluster):

The function applies the following decision logic for each facet panel (cluster):

  1. Prueba de Shapiro-Wilk sobre los residuos del ANOVA. Si la normalidad falla (p <= 0.05), solo se muestran las medias sin letras.

    Shapiro-Wilk test on ANOVA residuals. If normality fails (p <= 0.05), only means are shown with no letters.

  2. Si var.equal = TRUE (ANOVA clásico): se aplica la prueba de Fligner-Killeen. Si falla la homogeneidad, solo se muestran medias. Si pasa, se usa ANOVA + post-hoc Duncan o Tukey.

    If var.equal = TRUE (classic ANOVA path): Fligner-Killeen test is applied. If homoscedasticity fails, only means are shown. Otherwise, ANOVA + Duncan or Tukey post-hoc is used.

  3. Si var.equal = FALSE (ruta Welch):

    • Si Fligner pasa (p > 0.05): se usa ANOVA estándar + Duncan o Tukey.

    • Si Fligner falla: se usa Welch + Games-Howell.

    • CV y Power solo se reportan cuando ff_p > 0.01.

    • Si alguna comparación tiene p-valor NA o falta algún grupo en las letras, se eliminan las letras para todo el cluster.

    If var.equal = FALSE (Welch path):

    • If Fligner passes (p > 0.05): standard ANOVA + Duncan or Tukey is used.

    • If Fligner fails: Welch test + Games-Howell post-hoc is used.

    • CV and Power are reported only when ff_p > 0.01.

    • If any pairwise comparison has NA p-value or any group is missing from the letter display, letters are suppressed for the entire cluster.

Los argumentos orden_factor, grupo1_orden y grupo2_orden aceptan vectores nombrados o no:

The orden_factor, grupo1_orden, and grupo2_orden arguments accept either unnamed or named vectors:

Para vectores nombrados, el nombre corresponde al nivel original y el valor es la etiqueta mostrada. Elementos sin nombre conservan su valor original.

For named vectors, names correspond to original levels and values to display labels. Elements without a name keep their original value.

Si algún tratamiento tiene todas sus observaciones como NA dentro de un cluster, la función se detiene mostrando un error informativo.

If any treatment has all observations as NA within any cluster, the function stops with an informative error.

Value

Lista con cuatro elementos / A list with four elements:

plot

Objeto ggplot2 con boxplots y anotaciones / ggplot2 object with boxplots and annotations

tabla

Tabla resumen con medias, letras, ANOVA, CV y Power / Summary table with means, letters, ANOVA, CV and Power

levels

Niveles del factor mostrados / Displayed factor levels

data

Datos procesados usados en el análisis / Processed data used in the analysis

#'

Examples

library(dplyr)

# Example 1: Single panel, classic ANOVA with Duncan test
set.seed(42)
df1 <- data.frame(
  trat = rep(c("T0", "T1", "T2", "T3"), each = 5),
  resp = c(
    rnorm(5, 10, 1),
    rnorm(5, 14, 1),
    rnorm(5, 18, 1),
    rnorm(5, 22, 1)
  )
)

result1 <- agrobox(
  data         = df1,
  factor       = "trat",
  variable     = "resp",
  titulo       = "Response variable",
  orden_factor = c("T0" = "Control", "T1" = "Low",
                   "T2" = "Medium",  "T3" = "High"),
  var.equal    = TRUE,
  test         = "Duncan"
)
result1$plot
result1$tabla

# Example 2: One grouping variable (column facets), Welch + Games-Howell
set.seed(99)
df2 <- data.frame(
  trat  = rep(c("A", "B", "C", "D"), each = 12),
  epoca = rep(rep(c("Dry", "Rainy", "Transition"), each = 4), 4),
  resp  = c(
    rnorm(12, 5,  0.3),
    rnorm(12, 9,  3.5),
    rnorm(12, 7,  2.0),
    rnorm(12, 12, 4.8)
  )
)

result2 <- agrobox(
  data         = df2,
  factor       = "trat",
  variable     = "resp",
  estructura   = "~epoca",
  titulo       = "Response by season",
  grupo2_orden = c("Dry", "Transition", "Rainy"),
  orden_factor = c("A" = "Control",     "B" = "Treatment 1",
                   "C" = "Treatment 2", "D" = "Treatment 3"),
  var.equal    = FALSE,
  colores      = c("gray40", "steelblue", "orange", "red3")
)
result2$plot
result2$tabla

# Example 3: Two grouping variables (row x column facets), with NAs
set.seed(7)
df3 <- expand.grid(
  trat  = c("T1", "T2", "T3"),
  suelo = c("Clay", "Sand"),
  riego = c("Drip", "Sprinkler", "Rainfed"),
  rep   = 1:5
)
df3$yield <- with(df3, {
  base  <- c(T1 = 8,    T2 = 14,   T3 = 20)[as.character(trat)]
  s     <- c(Clay = 0,  Sand = 3)[as.character(suelo)]
  r     <- c(Drip = 2,  Sprinkler = 0, Rainfed = -4)[as.character(riego)]
  rnorm(nrow(df3), base + s + r, 2)
})
set.seed(15)
df3$yield[sample(nrow(df3), size = round(nrow(df3) * 0.08))] <- NA

result3 <- agrobox(
  data         = df3,
  factor       = "trat",
  variable     = "yield",
  estructura   = "suelo~riego",
  titulo       = "Yield (t/ha)",
  orden_factor = c("T1" = "Variety 1", "T2" = "Variety 2",
                   "T3" = "Variety 3"),
  grupo1_orden = c("Clay" = "Clay soil", "Sand" = "Sandy soil"),
  grupo2_orden = c("Rainfed", "Drip", "Sprinkler"),
  var.equal    = FALSE,
  colores      = c("darkgreen", "royalblue", "firebrick")
)
result3$plot
result3$tabla
result3$data

# Example 4: Real Data nitrogeno_liberacion
data(nitrogeno_liberacion)

agrobox(
data = nitrogeno_liberacion,
test = "Tukey",
factor = "trata",
variable = "nh4_mg_lt",
orden_factor = c( "T1" = "Fertilizante (14-4-4)",
                  "T2" = "Pellet (14-4-4)",
                  "T3" = "Fertilizante (7-7-19)",
                  "T4" = "Pellet (7-7-19)"),
grupo1_orden = c("14.4.4" = "Ley 14 N - 4 P2O5 - 4 K2O",
                 "7.7.19" = "Ley 7 N - 7 P2O5 - 19 K2O"),
grupo2_orden = c("0" = "Día 0",
                 "1" = "Día 1",
                 "8" = "Día 8",
                 "16" = "Día 16",
                 "41" = "Día 41"),
estructura = "formu~dias",
colores = c("purple3", "green4","black", "red3")
)


# Example 5: Real Data pimiento_hibridacion

data(pimiento_hibridacion)


agrobox(
data = pimiento_hibridacion,
test = "Tukey",
factor = "trata",
bloque = "bloque",
variable = "g_pla",
titulo = "Rendimiento (g/pla)",
orden_factor = c( "T1" = "5",
                  "T2" = "4",
                  "T3" = "3"),
grupo2_orden = c("1" = "Día 0",
                 "4"= "Día 4",
                 "8" = "Día 8",
                 "12" = "Día 12",
                 "16" = "Día 16",
                 "20" = "Día 20"),
estructura = "~dia",
colores = c("purple3", "green4","black", "red3")
)$plot +
  ggplot2::labs(col = "Semanas de hibridación")



Exporta tablas agrobox o agrosintesis a Excel

Description

Escribe una tabla individual o una lista de tablas en un archivo Excel (.xlsx). Cuando se trata de una lista, cada elemento se exporta como una hoja distinta.

Usage

agroexcel(x, file = "resultados_agro.xlsx")

Arguments

x

data.frame o lista de data.frames.

file

nombre del archivo Excel de salida.

Value

Invisiblemente TRUE si el archivo se genera correctamente.

Examples

## Not run: 
# Ejemplo 1: tabla simple desde agrobox
aa <- agrobox(
  data = antigua2,
  variable = "harvwt",
  factor = "trt",
  test = "Duncan"
)

write_agro_excel(aa$tabla, file = "tabla_simple.xlsx")

# Ejemplo 2: lista de tablas desde agrosintesis
res <- agrosintesis(
  data = df_multi,
  variables = c("tn_ha", "peso_fruto"),
  estructura = "Variedad~Localidad",
  factor = "Fertilizante",
  factor2 = "Dosis",
  bloque = "Bloque",
  test = "Tukey"
)

write_agro_excel(res, file = "resultados_clusters.xlsx")

## End(Not run)


Sintetiza resultados estadisticos para multiples variables

Description

Aplica agrobox() a una o varias variables y consolida las tablas resumen. Genera ademas una sintesis decisional orientada a interpretacion rapida.

Usage

agrosintesis(
  data,
  variables,
  estructura = NULL,
  verbose = FALSE,
  report = TRUE,
  color = TRUE,
  ...
)

Arguments

data

data.frame con los datos experimentales.

variables

vector de nombres de variables respuesta.

estructura

formula en texto tipo "Factor1~Factor2" para clusters.

verbose

Logical. If TRUE, prints progress messages.

report

logical, imprime reporte ejecutivo en consola.

color

logical, usa color en el reporte (si esta disponible).

...

argumentos adicionales pasados a agrobox().

Value

- Sin clusters: lista con tabla y decision - Con clusters: lista de dichas listas por cluster


Exporta tablas de resultados a PNG via LaTeX (modo rapido)

Description

Genera una imagen PNG de alta calidad a partir de una tabla (data.frame) o una lista de tablas (por ejemplo salida de agrosintesis()), utilizando LaTeX para el renderizado y convirtiendo el PDF resultante en imagen.

Usage

agrotabla(x, out_dir = getwd(), file_stub = "TABLA", dpi = 600)

Arguments

x

data.frame o lista de data.frames. Puede ser aa$tabla o una lista producida por agrosintesis().

out_dir

directorio donde se guardaran los archivos generados.

file_stub

nombre base del archivo cuando x es una tabla unica.

dpi

resolucion en puntos por pulgada usada al convertir PDF a PNG.

Details

Esta funcion esta pensada para generar reportes rapidos y elegantes. Debido a que crea archivos PDF y PNG, sus ejemplos no se ejecutan automaticamente durante los checks de CRAN.

Los nombres de archivos se sanitizan automaticamente para ser compatibles con Windows, LaTeX y sistemas de archivos estandar. Los guiones bajos en los encabezados de columnas se escapan para evitar errores de compilacion LaTeX.

Value

Invisiblemente TRUE si la exportacion se realiza correctamente.

Examples

## Not run: 
# Ejemplo 1: tabla individual desde agrobox
aa <- agrobox(
  data = antigua2,
  variable = "harvwt",
  factor = "trt",
  test = "Duncan"
)

write_rapido(
  aa$tabla,
  out_dir = "reportes_png",
  file_stub = "Rendimiento_site"
)

# Ejemplo 2: multiples tablas desde agrosintesis
res <- agrosintesis(
  data = df_multi,
  variables = c("tn_ha", "peso_fruto"),
  estructura = "Variedad~Localidad",
  factor = "Fertilizante",
  factor2 = "Dosis",
  bloque = "Bloque",
  test = "Tukey"
)

write_rapido(
  res,
  out_dir = "png_clusters"
)

## End(Not run)



Curva de liberacion de nitrogeno

Description

Datos experimentales de liberación de nitrógeno (NH4, NO3 y K) en función del tiempo bajo diferentes formulaciones y estados (fertilizante vs pellet).

Usage

nitrogeno_liberacion

Format

A data frame with 60 rows and 13 variables:

formu

Formulacion (ej. "14.4.4", "7.7.19")

estado

Tipo de producto (fertilizante o pellet)

trata

Tratamiento experimental (T1–T4)

fecha

Fecha de evaluacion

dias

Dias desde el inicio del experimento

rep

Repeticion

vol_extractante

Volumen del extractante (mL)

ml_lixiviado

Volumen lixiviado (mL)

ph_lixiviado

pH del lixiviado

ce_lixiviado

Conductividad electrica del lixiviado

nh4_mg_lt

Amonio (mg/L)

no3_mg_lt

Nitrato (mg/L)

k_mg_lt

Potasio (mg/L)

Details

Experimental data of nitrogen release (NH4, NO3 and K) over time under different formulations and physical states (fertilizer vs pellet).

Source

Datos de tesis del autor


Datos de hibridación en pimiento / Pepper hybridization dataset

Description

Datos experimentales del proceso de hibridación en pimiento, comparando tres calendarios de hibridación (3, 4 y 5 semanas). El dataset registra la producción de flores, frutos y semilla por días efectivos de hibridación en un diseño con bloques.

Usage

pimiento_hibridacion

Format

A data frame with 232 rows and 10 variables:

trata

Tratamiento experimental

bloque

Bloque experimental

descripcion

Duración del periodo de hibridación (3, 4 o 5 semanas)

dia

Día efectivo de hibridación

g_semilla

Producción de semilla (g)

n_frutos

Número de frutos

n_flores

Número de flores emasculadas

n_plantas

Número de plantas por parcela

g_pla

Gramos de semilla por planta

g_fru

Gramos de semilla por fruto

Details

Experimental dataset from a pepper hybridization process, comparing three hybridization schedules (3, 4 and 5 weeks). The data include flower production, fruit set and seed yield across effective hybridization days under a block design.

Los datos muestran que la mayor acumulación de rendimiento ocurre en los primeros días de hibridación, disminuyendo progresivamente en evaluaciones posteriores.

The data show that most yield accumulation occurs during the first hybridization days, followed by a gradual decline over time.

Source

Datos experimentales del autor / Author's experimental data