1 1. Introducción

Se evaluó el efecto de cuatro bioinsumos sobre el rendimiento del cultivo de fríjol (Phaseolus vulgaris), utilizando un diseño de bloques completos al azar (DBCA) con cuatro bloques. El objetivo es identificar diferencias entre bioinsumos y determinar cuál presenta el mayor rendimiento promedio.

2 2. Carga y preparación de los datos

Guarde Datos_frijol_bioinsumos.csv en la misma carpeta que este archivo R Markdown. El archivo está separado por punto y coma.

datos <- read.csv("Datos_frijol_bioinsumos.csv", header = TRUE, sep = ";", dec = ".")

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 ...
head(datos)
##   Tratamiento Bioinsumo Bloque Rendimiento
## 1          T1        B1      1         2.2
## 2          T1        B1      2         1.7
## 3          T1        B1      3         2.5
## 4          T1        B1      4         1.9
## 5          T2        B2      1         2.4
## 6          T2        B2      2         2.6
datos$Bioinsumo <- as.factor(datos$Bioinsumo)
datos$Bloque <- as.factor(datos$Bloque)

# Comprobar que se cuenta con las 16 observaciones esperadas
nrow(datos)
## [1] 16
table(datos$Bioinsumo, datos$Bloque)
##     
##      1 2 3 4
##   B1 1 1 1 1
##   B2 1 1 1 1
##   B3 1 1 1 1
##   B4 1 1 1 1

El conjunto contiene 16 observaciones, correspondientes a cuatro bioinsumos evaluados en cuatro bloques. La variable respuesta es Rendimiento, expresada en kg/parcela.

3 3. Análisis exploratorio

3.1 3.1. Gráfico de cajas

boxplot(Rendimiento ~ Bioinsumo, data = datos,
        xlab = "Bioinsumo",
        ylab = "Rendimiento (kg/parcela)",
        main = "Rendimiento por bioinsumo",
        col = "lightgreen")

El diagrama de cajas permite comparar la distribución y la variabilidad del rendimiento observado para cada bioinsumo.

3.2 3.2. Tabla de medias

medias <- aggregate(Rendimiento ~ Bioinsumo, data = datos, FUN = mean)
names(medias)[2] <- "Media_kg_parcela"
medias <- medias[order(-medias$Media_kg_parcela), ]
medias
##   Bioinsumo Media_kg_parcela
## 4        B4            3.175
## 3        B3            2.875
## 2        B2            2.575
## 1        B1            2.075

4 4. Modelo y análisis de varianza

Se ajusta un modelo de bloques completos al azar, considerando el bioinsumo y el bloque como factores:

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

La hipótesis nula para bioinsumo establece que los cuatro rendimientos medios son iguales. Si el valor p es menor que 0,05, se rechaza la hipótesis nula y se concluye que existe evidencia de diferencias entre al menos dos bioinsumos.

5 5. Verificación de supuestos

5.1 5.1. Normalidad de los residuales

shapiro.test(residuals(modelo))
## 
##  Shapiro-Wilk normality test
## 
## data:  residuals(modelo)
## W = 0.89968, p-value = 0.07942

Si el valor p es mayor que 0,05, no se rechaza la hipótesis de normalidad de los residuales.

5.2 5.2. 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

Si el valor p es mayor que 0,05, no se rechaza la hipótesis de igualdad de varianzas entre los grupos.

5.3 5.3. Gráficos de diagnóstico

par(mfrow = c(2, 2))
plot(modelo)

par(mfrow = c(1, 1))

Los gráficos permiten revisar patrones en los residuales, posibles valores atípicos y la adecuación general del modelo.

6 6. Comparación de medias

Se utiliza la prueba de Tukey con un nivel de significancia del 5 %. El paquete agricolae presenta las agrupaciones por letras.

if (!requireNamespace("agricolae", quietly = TRUE)) {
  install.packages("agricolae", repos = "https://cloud.r-project.org")
}
library(agricolae)

comparacion <- 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
comparacion$groups
##    Rendimiento groups
## B4       3.175      a
## B3       2.875     ab
## B2       2.575      b
## B1       2.075      c

Las medias que comparten una letra no presentan diferencias estadísticamente significativas según Tukey al 5 %.

6.1 6.1. Gráfico de medias con agrupación por letras

grupos <- comparacion$groups
grupos$Bioinsumo <- rownames(grupos)
rownames(grupos) <- NULL

# Ordenar las barras por el nombre del bioinsumo
grupos <- grupos[match(levels(datos$Bioinsumo), grupos$Bioinsumo), ]

bp <- barplot(grupos$Rendimiento,
              names.arg = grupos$Bioinsumo,
              xlab = "Bioinsumo",
              ylab = "Rendimiento medio (kg/parcela)",
              main = "Comparación de medias por Tukey",
              ylim = c(0, max(grupos$Rendimiento) * 1.2),
              col = "lightgreen")

text(bp, grupos$Rendimiento + max(grupos$Rendimiento) * 0.05,
     labels = grupos$groups, cex = 1.1)

7 7. Conclusiones agronómicas

tabla_medias <- aggregate(Rendimiento ~ Bioinsumo, data = datos, FUN = mean)
mejor <- tabla_medias[which.max(tabla_medias$Rendimiento), ]

anova_tabla <- summary(modelo)[[1]]
p_bio <- anova_tabla["Bioinsumo", "Pr(>F)"]
p_bloque <- anova_tabla["Bloque", "Pr(>F)"]

cat(sprintf("El mayor rendimiento promedio observado corresponde a %s, con %.3f kg/parcela. ",
            as.character(mejor$Bioinsumo), mejor$Rendimiento))

El mayor rendimiento promedio observado corresponde a B4, con 3.175 kg/parcela.

if (p_bio < 0.05) {
  cat(sprintf("El ANOVA detectó diferencias estadísticamente significativas entre bioinsumos (p = %.4f). La recomendación debe considerar la agrupación de Tukey: se prefiere el bioinsumo con mayor media siempre que su rendimiento sea estadísticamente distinguible y la decisión sea agronómica y económicamente viable.\\n\\n", p_bio))
} else {
  cat(sprintf("El ANOVA no detectó diferencias estadísticamente significativas entre bioinsumos (p = %.4f). Por tanto, no se puede afirmar que el de mayor media sea superior estadísticamente.\\n\\n", p_bio))
}

El ANOVA detectó diferencias estadísticamente significativas entre bioinsumos (p = 0.0002). La recomendación debe considerar la agrupación de Tukey: se prefiere el bioinsumo con mayor media siempre que su rendimiento sea estadísticamente distinguible y la decisión sea agronómica y económicamente viable.

if (p_bloque < 0.05) {
  cat(sprintf("El efecto de bloque fue significativo (p = %.4f), lo que indica que hubo variación entre bloques. Por ello, el bloqueo resultó útil para controlar parte de la variabilidad del lote.\\n", p_bloque))
} else {
  cat(sprintf("El efecto de bloque no fue significativo (p = %.4f); en este ensayo no se detectaron diferencias estadísticamente significativas entre bloques.\\n", p_bloque))
}

El efecto de bloque fue significativo (p = 0.0157), lo que indica que hubo variación entre bloques. Por ello, el bloqueo resultó útil para controlar parte de la variabilidad del lote.

La recomendación final también debe considerar el costo de cada bioinsumo, su disponibilidad, facilidad de aplicación y posibles efectos sobre el suelo y el cultivo. Estos aspectos no se miden directamente en este ensayo.

8 8. Referencias técnicas

  • R Core Team. R: A Language and Environment for Statistical Computing.
  • Paquete agricolae: procedimientos para análisis de experimentos agrícolas.