Diseño en Bloques Completos al Azar (DBCA)
#-----------------------------------------------------------
# Instalación de paquetes
#-----------------------------------------------------------
paquetes <- c(
"readxl",
"dplyr",
"ggplot2",
"agricolae",
"knitr"
)
instalar <- paquetes[!(paquetes %in% installed.packages()[,"Package"])]
if(length(instalar)>0){
install.packages(instalar)
}
lapply(paquetes, library, character.only=TRUE)## [[1]]
## [1] "readxl" "stats" "graphics" "grDevices" "utils" "datasets"
## [7] "methods" "base"
##
## [[2]]
## [1] "dplyr" "readxl" "stats" "graphics" "grDevices" "utils"
## [7] "datasets" "methods" "base"
##
## [[3]]
## [1] "ggplot2" "dplyr" "readxl" "stats" "graphics" "grDevices"
## [7] "utils" "datasets" "methods" "base"
##
## [[4]]
## [1] "agricolae" "ggplot2" "dplyr" "readxl" "stats" "graphics"
## [7] "grDevices" "utils" "datasets" "methods" "base"
##
## [[5]]
## [1] "knitr" "agricolae" "ggplot2" "dplyr" "readxl" "stats"
## [7] "graphics" "grDevices" "utils" "datasets" "methods" "base"
Figura 1. Cultivo de arveja durante el experimento.
Figura 1. Cultivo de arveja durante el experimento.
#-----------------------------------------------------------
# Lectura del archivo de Excel
#-----------------------------------------------------------
datos <- read_excel("Experimento arveja(1).xlsx")
head(datos)## # A tibble: 6 × 6
## Bloque Humedad Variedad Planta Tratamiento Peso
## <dbl> <chr> <chr> <dbl> <chr> <dbl>
## 1 1 Media Pisum sativum 4 C 31.3
## 2 1 Media Pisum sativum 5 C 31.9
## 3 1 Media Pisum sativum 6 C 6.34
## 4 1 Media Pisum sativum 10 T1 28.6
## 5 1 Media Pisum sativum 11 T1 54.6
## 6 1 Media Pisum sativum 12 T1 34.2
## tibble [36 × 6] (S3: tbl_df/tbl/data.frame)
## $ Bloque : num [1:36] 1 1 1 1 1 1 1 1 1 2 ...
## $ Humedad : chr [1:36] "Media" "Media" "Media" "Media" ...
## $ Variedad : chr [1:36] "Pisum sativum" "Pisum sativum" "Pisum sativum" "Pisum sativum" ...
## $ Planta : num [1:36] 4 5 6 10 11 12 16 17 18 7 ...
## $ Tratamiento: chr [1:36] "C" "C" "C" "T1" ...
## $ Peso : num [1:36] 31.33 31.93 6.34 28.63 54.57 ...
#-----------------------------------------------------------
# Conversión de variables a factores
#-----------------------------------------------------------
datos$Bloque <- as.factor(datos$Bloque)
datos$Tratamiento <- as.factor(datos$Tratamiento)
datos$Variedad <- as.factor(datos$Variedad)
datos$Planta <- as.factor(datos$Planta)
summary(datos)## Bloque Humedad Variedad Planta Tratamiento
## 1:9 Length:36 Pisum sativum:36 1 : 1 C :12
## 2:9 Class :character 2 : 1 T1:12
## 3:9 Mode :character 3 : 1 T2:12
## 4:9 4 : 1
## 5 : 1
## 6 : 1
## (Other):30
## Peso
## Min. : 3.08
## 1st Qu.:13.03
## Median :26.84
## Mean :26.53
## 3rd Qu.:33.52
## Max. :77.07
##
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 3.08 13.03 26.84 26.53 33.52 77.07
## Número de observaciones: 36
## Media: 26.53028
## Mediana: 26.845
## Desviación estándar: 17.90754
## Coeficiente de variación: 67.4985 %
## Mínimo: 3.08
## Máximo: 77.07
descriptivos_trat <- datos %>%
group_by(Tratamiento) %>%
summarise(
n=n(),
Media=mean(Peso),
Mediana=median(Peso),
DE=sd(Peso),
CV=100*sd(Peso)/mean(Peso),
Min=min(Peso),
Max=max(Peso)
)
kable(descriptivos_trat,
digits=2,
caption="Estadísticos descriptivos por tratamiento")| Tratamiento | n | Media | Mediana | DE | CV | Min | Max |
|---|---|---|---|---|---|---|---|
| C | 12 | 24.30 | 19.65 | 18.68 | 76.86 | 6.34 | 77.07 |
| T1 | 12 | 28.28 | 28.43 | 16.46 | 58.20 | 3.49 | 54.57 |
| T2 | 12 | 27.01 | 26.99 | 19.79 | 73.26 | 3.08 | 72.41 |
descriptivos_bloque <- datos %>%
group_by(Bloque) %>%
summarise(
n=n(),
Media=mean(Peso),
Mediana=median(Peso),
DE=sd(Peso),
CV=100*sd(Peso)/mean(Peso),
Min=min(Peso),
Max=max(Peso)
)
kable(descriptivos_bloque,
digits=2,
caption="Estadísticos descriptivos por bloque")| Bloque | n | Media | Mediana | DE | CV | Min | Max |
|---|---|---|---|---|---|---|---|
| 1 | 9 | 26.34 | 29.13 | 15.19 | 57.67 | 6.34 | 54.57 |
| 2 | 9 | 28.86 | 18.80 | 21.64 | 74.98 | 9.78 | 72.41 |
| 3 | 9 | 13.01 | 11.77 | 7.95 | 61.12 | 3.08 | 27.46 |
| 4 | 9 | 37.91 | 33.29 | 16.83 | 44.40 | 21.15 | 77.07 |
ggplot(datos,
aes(Tratamiento,
Peso,
fill=Tratamiento))+
geom_boxplot(alpha=0.75)+
theme_bw()+
labs(
title="Peso por tratamiento",
x="Tratamiento",
y="Peso"
)+
theme(legend.position="none")ggplot(datos,
aes(Bloque,
Peso,
fill=Bloque))+
geom_boxplot(alpha=0.75)+
theme_bw()+
labs(
title="Peso por bloque",
x="Bloque",
y="Peso"
)+
theme(legend.position="none")ggplot(datos,
aes(Peso))+
geom_histogram(
bins=10,
color="black",
fill="steelblue"
)+
theme_bw()+
labs(
title="Distribución del peso",
x="Peso",
y="Frecuencia"
)#-----------------------------------------------------------
# Media general del experimento
#-----------------------------------------------------------
media_general <- mean(datos$Peso)
cat("Media general del experimento:", round(media_general,2))## Media general del experimento: 26.53
#-----------------------------------------------------------
# Medias por tratamiento
#-----------------------------------------------------------
medias_trat <- datos %>%
group_by(Tratamiento) %>%
summarise(
Media = mean(Peso)
)
kable(
medias_trat,
digits = 2,
caption = "Media del rendimiento por tratamiento"
)| Tratamiento | Media |
|---|---|
| C | 24.30 |
| T1 | 28.28 |
| T2 | 27.01 |
#-----------------------------------------------------------
# Efecto = Media del tratamiento - Media general
#-----------------------------------------------------------
efectos_trat <- medias_trat %>%
mutate(
Efecto = Media - media_general
)
kable(
efectos_trat,
digits = 3,
caption = "Efectos estimados de los tratamientos"
)| Tratamiento | Media | Efecto |
|---|---|---|
| C | 24.303 | -2.227 |
| T1 | 28.276 | 1.746 |
| T2 | 27.012 | 0.481 |
#-----------------------------------------------------------
# Medias por bloque
#-----------------------------------------------------------
medias_bloque <- datos %>%
group_by(Bloque) %>%
summarise(
Media = mean(Peso)
)
kable(
medias_bloque,
digits = 2,
caption = "Media del rendimiento por bloque"
)| Bloque | Media |
|---|---|
| 1 | 26.34 |
| 2 | 28.86 |
| 3 | 13.01 |
| 4 | 37.91 |
#-----------------------------------------------------------
# Efecto = Media del bloque - Media general
#-----------------------------------------------------------
efectos_bloque <- medias_bloque %>%
mutate(
Efecto = Media - media_general
)
kable(
efectos_bloque,
digits = 3,
caption = "Efectos estimados de los bloques"
)| Bloque | Media | Efecto |
|---|---|---|
| 1 | 26.342 | -0.188 |
| 2 | 28.861 | 2.331 |
| 3 | 13.012 | -13.518 |
| 4 | 37.906 | 11.375 |
ggplot(efectos_bloque,
aes(x = Bloque,
y = Media,
fill = Bloque)) +
geom_col(width = 0.7) +
geom_hline(yintercept = media_general,
linetype = 2,
colour = "red") +
theme_bw() +
labs(
title = "Media del rendimiento por bloque",
x = "Bloque",
y = "Peso promedio"
) +
theme(
legend.position = "none"
)## Interpretación:
cat("• Un efecto positivo indica que el tratamiento produjo un rendimiento superior a la media general.\n")## • Un efecto positivo indica que el tratamiento produjo un rendimiento superior a la media general.
cat("• Un efecto negativo indica que el tratamiento produjo un rendimiento inferior a la media general.\n")## • Un efecto negativo indica que el tratamiento produjo un rendimiento inferior a la media general.
cat("• Para los bloques, un efecto positivo indica que el bloque presentó un rendimiento promedio superior al promedio general del experimento.\n")## • Para los bloques, un efecto positivo indica que el bloque presentó un rendimiento promedio superior al promedio general del experimento.
#-----------------------------------------------------------
# Tabla ANOVA
#-----------------------------------------------------------
anova_resultados <- summary(modelo)
anova_resultados## Df Sum Sq Mean Sq F value Pr(>F)
## Tratamiento 2 99 49.4 0.179 0.8367
## Bloque 3 2858 952.8 3.458 0.0286 *
## Residuals 30 8267 275.6
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#-----------------------------------------------------------
# Interpretación automática
#-----------------------------------------------------------
p_trat <- anova_resultados[[1]]$`Pr(>F)`[1]
if(p_trat < 0.05){
cat("Conclusión:\n\n")
cat("Se rechaza H0.\n")
cat("Existen diferencias significativas entre tratamientos.\n")
cat("Se procede con la prueba de Tukey.\n")
}else{
cat("Conclusión:\n\n")
cat("No se rechaza H0.\n")
cat("No existen diferencias significativas entre tratamientos.\n")
}## Conclusión:
##
## No se rechaza H0.
## No existen diferencias significativas entre tratamientos.
#-----------------------------------------------------------
# Comparación múltiple
#-----------------------------------------------------------
tukey <- TukeyHSD(modelo,
which = "Tratamiento")
tukey## Tukey multiple comparisons of means
## 95% family-wise confidence level
##
## Fit: aov(formula = Peso ~ Tratamiento + Bloque, data = datos)
##
## $Tratamiento
## diff lwr upr p adj
## T1-C 3.972500 -12.73416 20.67916 0.8285165
## T2-C 2.708333 -13.99833 19.41500 0.9159729
## T2-T1 -1.264167 -17.97083 15.44250 0.9810110
## diff lwr upr p adj
## T1-C 3.972500 -12.73416 20.67916 0.8285165
## T2-C 2.708333 -13.99833 19.41500 0.9159729
## T2-T1 -1.264167 -17.97083 15.44250 0.9810110
## # A tibble: 3 × 2
## Tratamiento Media
## <fct> <dbl>
## 1 C 24.3
## 2 T1 28.3
## 3 T2 27.0
## Interpretación:
## Cada fila representa la comparación entre dos tratamientos.
## La columna 'diff' corresponde a la diferencia entre medias.
## La columna 'p adj' representa el valor-p ajustado mediante el método de Tukey.
## Cuando p adj < 0.05, las medias de esos tratamientos son significativamente diferentes.
``` r
# Verificación de supuestos
## Extracción de residuos
Hipótesis
#-----------------------------------------------------------
# Prueba de Shapiro-Wilk
#-----------------------------------------------------------
shapiro.test(residuos)##
## Shapiro-Wilk normality test
##
## data: residuos
## W = 0.8957, p-value = 0.002608
Hipótesis
#-----------------------------------------------------------
# Bartlett
#-----------------------------------------------------------
bartlett.test(Peso ~ Tratamiento,
data = datos)##
## Bartlett test of homogeneity of variances
##
## data: Peso by Tratamiento
## Bartlett's K-squared = 0.36666, df = 2, p-value = 0.8325
## =========================================
## RESUMEN DEL ANÁLISIS ESTADÍSTICO
## =========================================
#-----------------------------------------
# ANOVA
#-----------------------------------------
p_trat <- anova_resultados[[1]]$`Pr(>F)`[1]
if(p_trat < 0.05){
cat("ANOVA:\n")
cat("- Se detectaron diferencias significativas entre tratamientos.\n")
cat("- Se recomienda interpretar la prueba de Tukey.\n\n")
}else{
cat("ANOVA:\n")
cat("- No se detectaron diferencias significativas entre tratamientos.\n\n")
}## ANOVA:
## - No se detectaron diferencias significativas entre tratamientos.
#-----------------------------------------
# Shapiro
#-----------------------------------------
p_shapiro <- shapiro.test(residuos)$p.value
if(p_shapiro > 0.05){
cat("Normalidad:\n")
cat("- Los residuos presentan distribución normal.\n\n")
}else{
cat("Normalidad:\n")
cat("- Los residuos no presentan distribución normal.\n\n")
}## Normalidad:
## - Los residuos no presentan distribución normal.
#-----------------------------------------
# Bartlett
#-----------------------------------------
p_bartlett <- bartlett.test(Peso ~ Tratamiento,
data = datos)$p.value
if(p_bartlett > 0.05){
cat("Homogeneidad:\n")
cat("- Se cumple el supuesto de igualdad de varianzas.\n\n")
}else{
cat("Homogeneidad:\n")
cat("- No se cumple el supuesto de igualdad de varianzas.\n\n")
}## Homogeneidad:
## - Se cumple el supuesto de igualdad de varianzas.