1 Introducción

Se realizó un experimento mediante un Diseño Completamente Aleatorizado (DCA), con un número desigual de repeticiones, para comparar el rendimiento de cuatro variedades de aceitunas de mesa, expresado en toneladas por hectárea (tn/ha).

Las variedades estudiadas fueron:

El nivel de significancia utilizado fue de 0.05.

2 Objetivo

Determinar si existen diferencias estadísticamente significativas entre los rendimientos promedio de las cuatro variedades de aceitunas.

3 Identificación de variables

Variable independiente: variedad de aceituna.

Variable dependiente: rendimiento (tn/ha).

Factor experimental: tratamiento.

Número de tratamientos: 4.

Número total de observaciones: 24.

Diseño experimental: completamente aleatorizado (DCA).

4 Instalación de paquetes

El siguiente código instala automáticamente los paquetes que no se encuentren disponibles.

paquetes <- c(
  "dplyr",
  "car",
  "FSA",
  "ggplot2",
  "knitr"
)

for (paquete in paquetes) {

  if (!requireNamespace(paquete, quietly = TRUE)) {

    install.packages(
      paquete,
      repos = "https://cloud.r-project.org"
    )

  }

}

library(dplyr)
library(car)
library(FSA)
library(ggplot2)
library(knitr)

5 Creación del marco de datos

tratamiento <- factor(
  c(
    rep("Sevillana", 6),
    rep("Ascolana", 7),
    rep("Empeltre", 5),
    rep("Ilo", 6)
  ),
  levels = c(
    "Sevillana",
    "Ascolana",
    "Empeltre",
    "Ilo"
  )
)

rendimiento <- c(

  # Sevillana
  4.9, 8.5, 9.4, 9.8, 7.4, 10.5,

  # Ascolana
  8.2, 4.7, 5.6, 6.3, 6.4, 5.2, 4.8,

  # Empeltre
  5.6, 4.9, 5.0, 4.7, 4.3,

  # Ilo
  10.6, 9.6, 8.7, 10.3, 9.9, 8.7

)

datos <- data.frame(
  tratamiento,
  rendimiento
)

knitr::kable(
  datos,
  caption = "Datos originales del experimento"
)
Datos originales del experimento
tratamiento rendimiento
Sevillana 4.9
Sevillana 8.5
Sevillana 9.4
Sevillana 9.8
Sevillana 7.4
Sevillana 10.5
Ascolana 8.2
Ascolana 4.7
Ascolana 5.6
Ascolana 6.3
Ascolana 6.4
Ascolana 5.2
Ascolana 4.8
Empeltre 5.6
Empeltre 4.9
Empeltre 5.0
Empeltre 4.7
Empeltre 4.3
Ilo 10.6
Ilo 9.6
Ilo 8.7
Ilo 10.3
Ilo 9.9
Ilo 8.7

6 Número de repeticiones por tratamiento

repeticiones <- as.data.frame(
  table(datos$tratamiento)
)

names(repeticiones) <- c(
  "Tratamiento",
  "Repeticiones"
)

knitr::kable(
  repeticiones,
  caption = "Número de repeticiones por tratamiento"
)
Número de repeticiones por tratamiento
Tratamiento Repeticiones
Sevillana 6
Ascolana 7
Empeltre 5
Ilo 6

7 Estadísticos descriptivos

Se calcularon la media, mediana, desviación estándar, varianza, mínimo, máximo y coeficiente de variación.

descriptivos <- datos %>%
  group_by(tratamiento) %>%
  summarise(

    n = n(),

    media = mean(rendimiento),

    mediana = median(rendimiento),

    desviacion = sd(rendimiento),

    varianza = var(rendimiento),

    minimo = min(rendimiento),

    maximo = max(rendimiento),

    CV = 100 * sd(rendimiento) / mean(rendimiento),

    .groups = "drop"

  )

knitr::kable(
  descriptivos,
  digits = 3,
  caption = "Estadísticos descriptivos por variedad"
)
Estadísticos descriptivos por variedad
tratamiento n media mediana desviacion varianza minimo maximo CV
Sevillana 6 8.417 8.95 2.031 4.126 4.9 10.5 24.133
Ascolana 7 5.886 5.60 1.220 1.488 4.7 8.2 20.726
Empeltre 5 4.900 4.90 0.474 0.225 4.3 5.6 9.680
Ilo 6 9.633 9.75 0.799 0.639 8.7 10.6 8.296

8 Gráfico de cajas y bigotes

El diagrama de cajas permite visualizar las diferencias en la distribución y dispersión del rendimiento.

ggplot(
  datos,
  aes(
    x = tratamiento,
    y = rendimiento,
    fill = tratamiento
  )
) +

  geom_boxplot(
    alpha = 0.6,
    width = 0.55
  ) +

  geom_jitter(
    width = 0.10,
    size = 2
  ) +

  labs(
    title = "Rendimiento por variedad de aceituna",
    x = "Variedad",
    y = "Rendimiento (tn/ha)"
  ) +

  theme_minimal() +

  theme(
    legend.position = "none"
  )

9 Análisis de varianza (ANOVA)

9.1 Hipótesis

Hipótesis nula (H0):

Las cuatro variedades presentan el mismo rendimiento medio.

Hipótesis alternativa (H1):

Al menos una variedad presenta un rendimiento medio diferente.

9.2 Modelo estadístico

El modelo del Diseño Completamente Aleatorizado es:

\[ Y_{ij} = \mu + \tau_i + \varepsilon_{ij} \]

Donde:

  • \(Y_{ij}\): rendimiento observado.
  • \(\mu\): media general.
  • \(\tau_i\): efecto del tratamiento.
  • \(\varepsilon_{ij}\): error experimental.

9.3 Resultados del ANOVA

modelo <- aov(
  rendimiento ~ tratamiento,
  data = datos
)

resultado_anova <- summary(modelo)

print(resultado_anova)
##             Df Sum Sq Mean Sq F value   Pr(>F)    
## tratamiento  3  82.89  27.630   16.42 1.28e-05 ***
## Residuals   20  33.65   1.683                     
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
p_anova <- resultado_anova[[1]][["Pr(>F)"]][1]

9.4 Interpretación del ANOVA

cat("Valor p del ANOVA:", p_anova, "\n\n")

Valor p del ANOVA: 1.279899e-05

if (p_anova < alpha) {

  cat(
    "**Conclusión:** Se rechaza H0. ",
    "Existen diferencias estadísticamente significativas ",
    "entre los rendimientos medios de las variedades.\n"
  )

} else {

  cat(
    "**Conclusión:** No se rechaza H0. ",
    "No existe evidencia suficiente de diferencias ",
    "entre los rendimientos medios.\n"
  )

}

Conclusión: Se rechaza H0. Existen diferencias estadísticamente significativas entre los rendimientos medios de las variedades.

10 Evaluación de los supuestos del ANOVA

10.1 Normalidad de los residuos: Shapiro-Wilk

La normalidad se evalúa utilizando los residuos del modelo ANOVA.

H0: Los residuos siguen una distribución normal.

H1: Los residuos no siguen una distribución normal.

residuos <- residuals(modelo)

resultado_shapiro <- shapiro.test(residuos)

print(resultado_shapiro)
## 
##  Shapiro-Wilk normality test
## 
## data:  residuos
## W = 0.94672, p-value = 0.2299
p_shapiro <- resultado_shapiro$p.value

10.2 Interpretación de Shapiro-Wilk

cat("Valor p:", p_shapiro, "\n\n")

Valor p: 0.2298559

if (p_shapiro >= alpha) {

  cat(
    "**Conclusión:** No se rechaza H0. ",
    "No se detectan desviaciones significativas ",
    "de la normalidad en los residuos.\n"
  )

} else {

  cat(
    "**Conclusión:** Se rechaza H0. ",
    "Se detectan desviaciones significativas ",
    "de la normalidad.\n"
  )

}

Conclusión: No se rechaza H0. No se detectan desviaciones significativas de la normalidad en los residuos.

10.3 Gráfico Q-Q de normalidad

qqnorm(
  residuos,
  main = "Gráfico Q-Q de los residuos"
)

qqline(
  residuos,
  col = "red",
  lwd = 2
)

10.4 Histograma de residuos

hist(
  residuos,
  main = "Distribución de los residuos",
  xlab = "Residuos",
  col = "lightblue",
  border = "white"
)

11 Homocedasticidad: prueba de Levene

La prueba de Levene evalúa la igualdad de las varianzas entre los tratamientos.

Se utiliza la versión centrada en la mediana (Brown-Forsythe).

H0: Las varianzas de los tratamientos son iguales.

H1: Al menos una varianza es diferente.

resultado_levene <- car::leveneTest(
  rendimiento ~ tratamiento,
  data = datos,
  center = median
)

print(resultado_levene)
## Levene's Test for Homogeneity of Variance (center = median)
##       Df F value Pr(>F)
## group  3   1.899 0.1623
##       20
p_levene <- resultado_levene[1, "Pr(>F)"]

11.1 Interpretación de Levene

cat("Valor p:", p_levene, "\n\n")

Valor p: 0.1623126

if (p_levene >= alpha) {

  cat(
    "**Conclusión:** No se rechaza H0. ",
    "No se detectan diferencias significativas ",
    "entre las varianzas de los tratamientos.\n"
  )

} else {

  cat(
    "**Conclusión:** Se rechaza H0. ",
    "Existen diferencias significativas ",
    "entre las varianzas.\n"
  )

}

Conclusión: No se rechaza H0. No se detectan diferencias significativas entre las varianzas de los tratamientos.

12 Diagnóstico de residuos

Se representa la relación entre los residuos y los valores ajustados del modelo.

plot(
  fitted(modelo),
  residuos,
  pch = 19,
  col = "blue",
  main = "Residuos frente a valores ajustados",
  xlab = "Valores ajustados",
  ylab = "Residuos"
)

abline(
  h = 0,
  col = "red",
  lty = 2
)

13 Comparaciones múltiples: Tukey

La prueba de Tukey permite identificar entre cuáles variedades existen diferencias estadísticamente significativas.

resultado_tukey <- TukeyHSD(modelo)

print(resultado_tukey)
##   Tukey multiple comparisons of means
##     95% family-wise confidence level
## 
## Fit: aov(formula = rendimiento ~ tratamiento, data = datos)
## 
## $tratamiento
##                          diff        lwr        upr     p adj
## Ascolana-Sevillana -2.5309524 -4.5508023 -0.5111025 0.0109566
## Empeltre-Sevillana -3.5166667 -5.7150721 -1.3182613 0.0012178
## Ilo-Sevillana       1.2166667 -0.8794306  3.3127640 0.3880384
## Empeltre-Ascolana  -0.9857143 -3.1115449  1.1401164 0.5748123
## Ilo-Ascolana        3.7476190  1.7277692  5.7674689 0.0002396
## Ilo-Empeltre        4.7333333  2.5349279  6.9317387 0.0000378

13.1 Gráfico de Tukey

plot(resultado_tukey)

14 Prueba no paramétrica de Kruskal-Wallis

Esta prueba permite comparar las distribuciones de rendimiento mediante rangos.

H0: Las distribuciones son iguales entre tratamientos.

H1: Al menos una distribución es diferente.

resultado_kw <- kruskal.test(
  rendimiento ~ tratamiento,
  data = datos
)

print(resultado_kw)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  rendimiento by tratamiento
## Kruskal-Wallis chi-squared = 15.23, df = 3, p-value = 0.00163
p_kw <- resultado_kw$p.value

14.1 Interpretación de Kruskal-Wallis

cat("Valor p:", p_kw, "\n\n")

Valor p: 0.001630476

if (p_kw < alpha) {

  cat(
    "**Conclusión:** Se rechaza H0. ",
    "Existen diferencias estadísticamente significativas ",
    "entre las distribuciones de rendimiento.\n"
  )

} else {

  cat(
    "**Conclusión:** No se rechaza H0. ",
    "No se detectan diferencias estadísticamente ",
    "significativas entre las distribuciones.\n"
  )

}

Conclusión: Se rechaza H0. Existen diferencias estadísticamente significativas entre las distribuciones de rendimiento.

15 Comparaciones múltiples: prueba de Dunn

Se aplica la prueba de Dunn con ajuste de Holm para identificar diferencias entre tratamientos.

resultado_dunn <- FSA::dunnTest(
  rendimiento ~ tratamiento,
  data = datos,
  method = "holm"
)

knitr::kable(
  resultado_dunn$res,
  digits = 4,
  caption = "Comparaciones múltiples de Dunn"
)
Comparaciones múltiples de Dunn
Comparison Z P.unadj P.adj
Sevillana - Ascolana 1.7900 0.0735 0.2204
Sevillana - Empeltre 2.4895 0.0128 0.0512
Ascolana - Empeltre 0.8737 0.3823 0.3823
Sevillana - Ilo -1.0011 0.3168 0.6336
Ascolana - Ilo -2.8289 0.0047 0.0234
Empeltre - Ilo -3.4440 0.0006 0.0034

16 Comparación de las pruebas estadísticas

resumen <- data.frame(

  Prueba = c(
    "Shapiro-Wilk",
    "Levene",
    "ANOVA",
    "Kruskal-Wallis"
  ),

  Valor_p = c(
    p_shapiro,
    p_levene,
    p_anova,
    p_kw
  )

)

resumen$Decision <- ifelse(
  resumen$Valor_p < alpha,
  "Rechazar H0",
  "No rechazar H0"
)

knitr::kable(
  resumen,
  digits = 6,
  caption = "Resumen de pruebas estadísticas"
)
Resumen de pruebas estadísticas
Prueba Valor_p Decision
Shapiro-Wilk 0.229856 No rechazar H0
Levene 0.162313 No rechazar H0
ANOVA 0.000013 Rechazar H0
Kruskal-Wallis 0.001630 Rechazar H0

17 Evaluación general de los supuestos

if (p_shapiro >= alpha && p_levene >= alpha) {

  cat(
    "Los resultados de Shapiro-Wilk y Levene ",
    "son compatibles con los supuestos de normalidad ",
    "y homogeneidad de varianzas del ANOVA.\n\n",
    "El ANOVA es una opción apropiada, ",
    "siempre que se cumpla la independencia ",
    "de las observaciones."
  )

} else {

  cat(
    "Se detectó evidencia de incumplimiento ",
    "de al menos uno de los supuestos evaluados.\n\n",
    "Se recomienda revisar los gráficos diagnósticos ",
    "y considerar alternativas apropiadas, ",
    "como ANOVA de Welch o Kruskal-Wallis."
  )

}

Los resultados de Shapiro-Wilk y Levene son compatibles con los supuestos de normalidad y homogeneidad de varianzas del ANOVA.

El ANOVA es una opción apropiada, siempre que se cumpla la independencia de las observaciones.

18 Conclusiones generales

cat("**Resultados principales del estudio:**\n\n")

Resultados principales del estudio:

cat(
  "- Valor p de Shapiro-Wilk:",
  signif(p_shapiro, 4),
  "\n"
)
cat(
  "- Valor p de Levene:",
  signif(p_levene, 4),
  "\n"
)
cat(
  "- Valor p de ANOVA:",
  signif(p_anova, 4),
  "\n"
)
cat(
  "- Valor p de Kruskal-Wallis:",
  signif(p_kw, 4),
  "\n\n"
)
if (p_anova < alpha) {

  cat(
    "El análisis de varianza identificó diferencias ",
    "estadísticamente significativas entre los ",
    "rendimientos medios de las variedades.\n\n"
  )

} else {

  cat(
    "El análisis de varianza no identificó ",
    "diferencias estadísticamente significativas ",
    "entre los rendimientos medios.\n\n"
  )

}

El análisis de varianza identificó diferencias estadísticamente significativas entre los rendimientos medios de las variedades.

if (p_kw < alpha) {

  cat(
    "La prueba de Kruskal-Wallis también detectó ",
    "diferencias significativas entre las ",
    "distribuciones de rendimiento.\n\n"
  )

}

La prueba de Kruskal-Wallis también detectó diferencias significativas entre las distribuciones de rendimiento.

mejor <- descriptivos$tratamiento[
  which.max(descriptivos$media)
]

cat(
  "La variedad con mayor rendimiento promedio fue:",
  as.character(mejor),
  ".\n\n"
)

La variedad con mayor rendimiento promedio fue: Ilo .

cat(
  "Los resultados deben interpretarse considerando ",
  "los supuestos estadísticos y la independencia ",
  "de las unidades experimentales."
)

Los resultados deben interpretarse considerando los supuestos estadísticos y la independencia de las unidades experimentales.

19 Consideraciones finales

El análisis corresponde a un Diseño Completamente Aleatorizado con número desigual de repeticiones.

La selección de ANOVA se fundamenta en la evaluación de normalidad de residuos, homogeneidad de varianzas e independencia de observaciones.

Las pruebas de Shapiro-Wilk y Levene no demuestran por sí solas que los supuestos se cumplan perfectamente.

La independencia debe garantizarse mediante el diseño y la ejecución del experimento.

Las comparaciones múltiples permiten identificar los tratamientos responsables de las diferencias estadísticamente significativas.