# =====================================================================
# 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")
)
