Un semillero evalúa el efecto de 4 bioinsumos (B1 = testigo sin aplicar, B2, B3, B4) sobre el rendimiento de fríjol (kg/parcela). Como el lote presenta un gradiente de humedad, se usaron 4 bloques. Diseño: bloques completos al azar (DBCA) con 16 parcelas.
Modelo: \(Y_{ij} = \mu + \tau_i + \beta_j + \varepsilon_{ij}\), donde \(\tau_i\) es el efecto del bioinsumo i y \(\beta_j\) el efecto del bloque j.
Hipótesis para bioinsumos: \(H_0: \tau_1 = \tau_2 = \tau_3 = \tau_4 = 0\) vs. \(H_1:\) al menos un \(\tau_i \neq 0\).
datos <- read.csv("Datos_frijol_bioinsumos.csv", sep = ";", header = TRUE)
str(datos)
## 'data.frame': 16 obs. of 4 variables:
## $ Tratamiento: chr "T1" "T1" "T1" "T1" ...
## $ Bioinsumo : chr "B1" "B1" "B1" "B1" ...
## $ Bloque : int 1 2 3 4 1 2 3 4 1 2 ...
## $ Rendimiento: num 2.2 1.7 2.5 1.9 2.4 2.6 3 2.3 3.1 2.5 ...
datos$Bioinsumo <- as.factor(datos$Bioinsumo)
datos$Bloque <- as.factor(datos$Bloque)
str(datos)
## 'data.frame': 16 obs. of 4 variables:
## $ Tratamiento: chr "T1" "T1" "T1" "T1" ...
## $ Bioinsumo : Factor w/ 4 levels "B1","B2","B3",..: 1 1 1 1 2 2 2 2 3 3 ...
## $ Bloque : Factor w/ 4 levels "1","2","3","4": 1 2 3 4 1 2 3 4 1 2 ...
## $ Rendimiento: num 2.2 1.7 2.5 1.9 2.4 2.6 3 2.3 3.1 2.5 ...
kable(datos, caption = "Datos del ensayo")
| Tratamiento | Bioinsumo | Bloque | Rendimiento |
|---|---|---|---|
| T1 | B1 | 1 | 2.2 |
| T1 | B1 | 2 | 1.7 |
| T1 | B1 | 3 | 2.5 |
| T1 | B1 | 4 | 1.9 |
| T2 | B2 | 1 | 2.4 |
| T2 | B2 | 2 | 2.6 |
| T2 | B2 | 3 | 3.0 |
| T2 | B2 | 4 | 2.3 |
| T3 | B3 | 1 | 3.1 |
| T3 | B3 | 2 | 2.5 |
| T3 | B3 | 3 | 3.0 |
| T3 | B3 | 4 | 2.9 |
| T4 | B4 | 1 | 3.0 |
| T4 | B4 | 2 | 3.1 |
| T4 | B4 | 3 | 3.6 |
| T4 | B4 | 4 | 3.0 |
Bloque venía como entero (int); se convierte a factor
para que R lo trate como factor de bloqueo y no como covariable
continua.
tabla_medias <- datos %>%
group_by(Bioinsumo) %>%
summarise(n = n(),
Media = mean(Rendimiento),
DE = sd(Rendimiento),
Min = min(Rendimiento),
Max = max(Rendimiento))
kable(tabla_medias, digits = 3, caption = "Rendimiento (kg/parcela) por bioinsumo")
| Bioinsumo | n | Media | DE | Min | Max |
|---|---|---|---|---|---|
| B1 | 4 | 2.075 | 0.350 | 1.7 | 2.5 |
| B2 | 4 | 2.575 | 0.310 | 2.3 | 3.0 |
| B3 | 4 | 2.875 | 0.263 | 2.5 | 3.1 |
| B4 | 4 | 3.175 | 0.287 | 3.0 | 3.6 |
kable(datos %>% group_by(Bloque) %>% summarise(Media = mean(Rendimiento)),
digits = 3, caption = "Rendimiento medio por bloque")
| Bloque | Media |
|---|---|
| 1 | 2.675 |
| 2 | 2.475 |
| 3 | 3.025 |
| 4 | 2.525 |
ggplot(datos, aes(x = Bioinsumo, y = Rendimiento, fill = Bioinsumo)) +
geom_boxplot(alpha = 0.7) +
geom_jitter(width = 0.08, size = 2) +
stat_summary(fun = mean, geom = "point", shape = 18, size = 4, color = "red") +
labs(title = "Rendimiento de fríjol por bioinsumo",
x = "Bioinsumo", y = "Rendimiento (kg/parcela)") +
theme_minimal() + theme(legend.position = "none")
ggplot(datos, aes(x = Bloque, y = Rendimiento, group = Bioinsumo, color = Bioinsumo)) +
geom_line() + geom_point(size = 2) +
labs(title = "Rendimiento por bloque y bioinsumo", y = "Rendimiento (kg/parcela)") +
theme_minimal()
Se observa una tendencia creciente B1 < B2 < B3 < B4, con el testigo (B1) como el de menor rendimiento. El bloque 3 presenta los rendimientos más altos en casi todos los tratamientos, lo que sugiere un efecto del gradiente de humedad.
modelo <- aov(Rendimiento ~ Bloque + Bioinsumo, data = datos)
summary(modelo)
## Df Sum Sq Mean Sq F value Pr(>F)
## Bloque 3 0.74 0.2467 6.00 0.015716 *
## Bioinsumo 3 2.64 0.8800 21.41 0.000196 ***
## Residuals 9 0.37 0.0411
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
cv.model(modelo) # coeficiente de variación (%)
## [1] 7.579766
Lectura de la tabla ANOVA (α = 0.05):
residuos <- residuals(modelo)
# Normalidad
shapiro.test(residuos)
##
## Shapiro-Wilk normality test
##
## data: residuos
## W = 0.89968, p-value = 0.07942
# Homogeneidad de varianzas
bartlett.test(Rendimiento ~ Bioinsumo, data = datos)
##
## Bartlett test of homogeneity of variances
##
## data: Rendimiento by Bioinsumo
## Bartlett's K-squared = 0.2339, df = 3, p-value = 0.9719
leveneTest(Rendimiento ~ Bioinsumo, data = datos)
## Levene's Test for Homogeneity of Variance (center = median)
## Df F value Pr(>F)
## group 3 0.234 0.8709
## 12
par(mfrow = c(1, 2))
qqnorm(residuos, main = "Q-Q de residuales"); qqline(residuos, col = "red")
plot(fitted(modelo), residuos, xlab = "Valores ajustados", ylab = "Residuales",
main = "Residuales vs ajustados"); abline(h = 0, col = "red", lty = 2)
par(mfrow = c(1, 1))
Interpretación:
tukey <- HSD.test(modelo, "Bioinsumo", group = TRUE, console = TRUE)
##
## Study: modelo ~ "Bioinsumo"
##
## HSD Test for Rendimiento
##
## Mean Square Error: 0.04111111
##
## Bioinsumo, means
##
## Rendimiento std r se Min Max Q25 Q50 Q75
## B1 2.075 0.3500000 4 0.1013794 1.7 2.5 1.850 2.05 2.275
## B2 2.575 0.3095696 4 0.1013794 2.3 3.0 2.375 2.50 2.700
## B3 2.875 0.2629956 4 0.1013794 2.5 3.1 2.800 2.95 3.025
## B4 3.175 0.2872281 4 0.1013794 3.0 3.6 3.000 3.05 3.225
##
## Alpha: 0.05 ; DF Error: 9
## Critical Value of Studentized Range: 4.41489
##
## Minimun Significant Difference: 0.4475788
##
## Treatments with the same letter are not significantly different.
##
## Rendimiento groups
## B4 3.175 a
## B3 2.875 ab
## B2 2.575 b
## B1 2.075 c
kable(tukey$groups, digits = 3, caption = "Agrupación de medias por Tukey (α = 0.05)")
| Rendimiento | groups | |
|---|---|---|
| B4 | 3.175 | a |
| B3 | 2.875 | ab |
| B2 | 2.575 | b |
| B1 | 2.075 | c |
grupos <- data.frame(Bioinsumo = rownames(tukey$groups),
Media = tukey$groups$Rendimiento,
Letra = tukey$groups$groups)
grupos <- merge(grupos, tukey$means[, c("Rendimiento", "std")],
by.x = "Media", by.y = "Rendimiento")
ggplot(grupos, aes(x = reorder(Bioinsumo, -Media), y = Media, fill = Bioinsumo)) +
geom_col(alpha = 0.8, width = 0.6) +
geom_errorbar(aes(ymin = Media - std, ymax = Media + std), width = 0.15) +
geom_text(aes(label = Letra, y = Media + std + 0.12), size = 6, fontface = "bold") +
labs(title = "Rendimiento medio por bioinsumo - Tukey (α = 0.05)",
x = "Bioinsumo", y = "Rendimiento medio (kg/parcela)",
caption = "Medias con la misma letra no difieren significativamente") +
theme_minimal() + theme(legend.position = "none")
# Gráfico base de agricolae
bar.group(tukey$groups, ylim = c(0, 4), col = "lightgreen",
main = "Tukey: rendimiento por bioinsumo", ylab = "kg/parcela")
Resultado (DMS de Tukey ≈ 0.45 kg/parcela):
| Bioinsumo | Media (kg/parcela) | Grupo |
|---|---|---|
| B4 | 3.175 | a |
| B3 | 2.875 | ab |
| B2 | 2.575 | b |
| B1 (testigo) | 2.075 | c |
B4 y B3 no difieren entre sí; B3 y B2 tampoco. B4 supera significativamente a B2 y a B1, y todos los bioinsumos superan al testigo B1.