# =====================================================================
# 1. INSTALACIÓN Y CARGA DE PAQUETES NECESARIOS
# =====================================================================

library(ggplot2)
library(car)
## Cargando paquete requerido: carData
# =====================================================================
# 2. CREACIÓN DEL DATA FRAME CON LOS DATOS DEL EXPERIMENTO
# =====================================================================
# Datos basados en el DCA con desigual número de repeticiones[cite: 1]
aceituna <- rep(c("Sevillana", "Scalona", "Empeltre", "Ilo"), 
                times = c(6, 7, 5, 6))

rendimiento <- c(
  4.9, 8.5, 9.4, 9.8, 7.4, 10.5,  # Sevillana[cite: 1]
  8.2, 4.7, 5.6, 6.3, 6.4, 5.2, 4.8, # Scalona[cite: 1]
  5.6, 4.9, 5.0, 4.7, 4.3,         # Empeltre[cite: 1]
  10.6, 9.6, 8.7, 10.3, 9.9, 8.7   # Ilo[cite: 1]
)

datos <- data.frame(aceituna = as.factor(aceituna), rendimiento = rendimiento)

# Ver la estructura de los datos
print(datos)
##     aceituna rendimiento
## 1  Sevillana         4.9
## 2  Sevillana         8.5
## 3  Sevillana         9.4
## 4  Sevillana         9.8
## 5  Sevillana         7.4
## 6  Sevillana        10.5
## 7    Scalona         8.2
## 8    Scalona         4.7
## 9    Scalona         5.6
## 10   Scalona         6.3
## 11   Scalona         6.4
## 12   Scalona         5.2
## 13   Scalona         4.8
## 14  Empeltre         5.6
## 15  Empeltre         4.9
## 16  Empeltre         5.0
## 17  Empeltre         4.7
## 18  Empeltre         4.3
## 19       Ilo        10.6
## 20       Ilo         9.6
## 21       Ilo         8.7
## 22       Ilo        10.3
## 23       Ilo         9.9
## 24       Ilo         8.7
# =====================================================================
# 3. ANÁLISIS DE VARIANZA (ANOVA) Y SUS SUPUESTOS
# =====================================================================

# Ajuste del modelo ANOVA
modelo_anova <- aov(rendimiento ~ aceituna, data = datos)
cat("\n--- RESULTADOS ANOVA ---\n")
## 
## --- RESULTADOS ANOVA ---
print(summary(modelo_anova))
##             Df Sum Sq Mean Sq F value   Pr(>F)    
## aceituna     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
# --- Evaluación de Supuestos para ANOVA ---
cat("\n--- SUPUESTOS DE ANOVA ---\n")
## 
## --- SUPUESTOS DE ANOVA ---
# A) Normalidad de los residuos (Prueba de Shapiro-Wilk)
# H0: Los residuos se distribuyen normalmente (p > 0.05 deseado)
shapiro_anova <- shapiro.test(residuals(modelo_anova))
print(shapiro_anova)
## 
##  Shapiro-Wilk normality test
## 
## data:  residuals(modelo_anova)
## W = 0.94672, p-value = 0.2299
# B) Homocedasticidad / Homogeneidad de varianzas (Prueba de Levene)
# H0: Las varianzas entre grupos son iguales (p > 0.05 deseado)
levene_anova <- leveneTest(rendimiento ~ aceituna, data = datos)
print(levene_anova)
## Levene's Test for Homogeneity of Variance (center = median)
##       Df F value Pr(>F)
## group  3   1.899 0.1623
##       20
# =====================================================================
# 4. PRUEBA DE KRUSKAL-WALLIS Y SUS SUPUESTOS
# =====================================================================

# Prueba no paramétrica de Kruskal-Wallis
kruskal_result <- kruskal.test(rendimiento ~ aceituna, data = datos)
cat("\n--- RESULTADOS KRUSKAL-WALLIS ---\n")
## 
## --- RESULTADOS KRUSKAL-WALLIS ---
print(kruskal_result)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  rendimiento by aceituna
## Kruskal-Wallis chi-squared = 15.23, df = 3, p-value = 0.00163
# --- Evaluación de Supuestos para Kruskal-Wallis ---
cat("\n--- SUPUESTOS DE KRUSKAL-WALLIS ---\n")
## 
## --- SUPUESTOS DE KRUSKAL-WALLIS ---
# Nota: Kruskal-Wallis no exige normalidad, pero asume que las distribuciones 
# tienen formas similares y evalúa la homocedasticidad (homogeneidad de varianzas).

# A) Homocedasticidad mediante la prueba de Fligner-Killeen (no paramétrica)
fligner_kruskal <- fligner.test(rendimiento ~ aceituna, data = datos)
print(fligner_kruskal)
## 
##  Fligner-Killeen test of homogeneity of variances
## 
## data:  rendimiento by aceituna
## Fligner-Killeen:med chi-squared = 5.8551, df = 3, p-value = 0.1189
# B) Normalidad por cada grupo de tratamiento (Shapiro-Wilk por variedad)
cat("\nNormalidad por cada grupo (Shapiro-Wilk):\n")
## 
## Normalidad por cada grupo (Shapiro-Wilk):
normality_by_group <- tapply(datos$rendimiento, datos$aceituna, function(x) {
  res <- shapiro.test(x)
  return(c(W = res$statistic, p_value = res$p.value))
})
print(do.call(rbind, normality_by_group))
##                 W.W   p_value
## Empeltre  0.9743534 0.9023875
## Ilo       0.9020966 0.3864710
## Scalona   0.8912659 0.2813322
## Sevillana 0.9188995 0.4974706
# =====================================================================
# 5. GRÁFICO DE CAJA (BOXPLOT) CON GGPLOT2
# =====================================================================
ggplot(datos, aes(x = aceituna, y = rendimiento, fill = aceituna)) +
  geom_boxplot(alpha = 0.7, outlier.color = "red", outlier.shape = 16, outlier.size = 2) +
  geom_jitter(width = 0.15, size = 1.8, color = "black", alpha = 0.6) +
  labs(
    title = "Comparación del Rendimiento por Variedad de Aceituna",
    subtitle = "Diseño Completamente al Azar (DCA)",
    x = "Variedad de Aceituna",
    y = "Rendimiento (tn/ha)"
  ) +
  theme_minimal() +
  theme(
    legend.position = "none",
    plot.title = element_text(face = "bold", size = 14),
    axis.title = element_text(face = "bold")
  )