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.
Determinar si existen diferencias estadísticamente significativas entre los rendimientos promedio de las cuatro variedades de aceitunas.
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).
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)
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"
)
| 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 |
repeticiones <- as.data.frame(
table(datos$tratamiento)
)
names(repeticiones) <- c(
"Tratamiento",
"Repeticiones"
)
knitr::kable(
repeticiones,
caption = "Número de repeticiones por tratamiento"
)
| Tratamiento | Repeticiones |
|---|---|
| Sevillana | 6 |
| Ascolana | 7 |
| Empeltre | 5 |
| Ilo | 6 |
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"
)
| 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 |
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"
)
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.
El modelo del Diseño Completamente Aleatorizado es:
\[ Y_{ij} = \mu + \tau_i + \varepsilon_{ij} \]
Donde:
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]
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.
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
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.
qqnorm(
residuos,
main = "Gráfico Q-Q de los residuos"
)
qqline(
residuos,
col = "red",
lwd = 2
)
hist(
residuos,
main = "Distribución de los residuos",
xlab = "Residuos",
col = "lightblue",
border = "white"
)
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)"]
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.
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
)
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
plot(resultado_tukey)
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
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.
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"
)
| 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 |
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"
)
| 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 |
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.
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.
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.