# ============================================================
# DISEÑOS EXPERIMENTALES APLICADOS A PRODUCCIÓN DE FRUTO EN CAFÉ
# Finca El Guayabo, vereda El Coral, La Plata, Huila
# Variable respuesta: Produccion_fruto_g
# ============================================================
# ============================================================
# 0. LIMPIAR AMBIENTE
# ============================================================
rm(list = ls())
# ============================================================
# 1. INSTALAR Y CARGAR PAQUETES
# ============================================================
paquetes <- c(
"readxl",
"dplyr",
"ggplot2",
"writexl",
"car",
"agricolae",
"emmeans",
"broom"
)
for (p in paquetes) {
if (!requireNamespace(p, quietly = TRUE)) {
install.packages(p)
}
}
library(readxl)
library(dplyr)
##
## Adjuntando el paquete: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(ggplot2)
library(writexl)
library(car)
## Cargando paquete requerido: carData
##
## Adjuntando el paquete: 'car'
## The following object is masked from 'package:dplyr':
##
## recode
library(agricolae)
library(emmeans)
## Welcome to emmeans.
## Caution: You lose important information if you filter this package's results.
## See '? untidy'
library(broom)
# ============================================================
# 2. RUTA DEL ARCHIVO
# ============================================================
ruta_cafe <- "C:/Users/Nina Sanchez/Documents/ACER -LENOVO-NINA 2019-20/1. USCO/ESTADISTICA/2026_Estadistica/EXPERIMENTAL/Base_disenos_cafe_produccion_fruto.xlsx"
# Revisar hojas disponibles
readxl::excel_sheets(ruta_cafe)
## [1] "README" "DCA" "BCA"
## [4] "Cuadrado_Latino" "Factorial" "Anidado"
## [7] "Superficie_Respuesta" "Codigo_R" "Diccionario"
# ============================================================
# 3. CARGAR HOJAS DEL ARCHIVO
# ============================================================
# IMPORTANTE:
# Se usa skip = 2 porque las hojas tienen filas iniciales de título.
# Los encabezados reales de las variables empiezan después de esas filas.
DCA <- readxl::read_excel(ruta_cafe, sheet = "DCA", skip = 2)
BCA <- readxl::read_excel(ruta_cafe, sheet = "BCA", skip = 2)
Cuadrado_Latino <- readxl::read_excel(ruta_cafe, sheet = "Cuadrado_Latino", skip = 2)
Factorial <- readxl::read_excel(ruta_cafe, sheet = "Factorial", skip = 2)
Anidado <- readxl::read_excel(ruta_cafe, sheet = "Anidado", skip = 2)
Superficie_Respuesta <- readxl::read_excel(ruta_cafe, sheet = "Superficie_Respuesta", skip = 2)
# ============================================================
# 4. LIMPIAR NOMBRES DE COLUMNAS
# ============================================================
# Se eliminan espacios antes o después de los nombres de columnas.
names(DCA) <- trimws(names(DCA))
names(BCA) <- trimws(names(BCA))
names(Cuadrado_Latino) <- trimws(names(Cuadrado_Latino))
names(Factorial) <- trimws(names(Factorial))
names(Anidado) <- trimws(names(Anidado))
names(Superficie_Respuesta) <- trimws(names(Superficie_Respuesta))
# ============================================================
# 5. REVISAR NOMBRES DE COLUMNAS
# ============================================================
names(DCA)
## [1] "Planta" "Tratamiento" "Altura_cm"
## [4] "pH_suelo" "Humedad_suelo_pct" "Produccion_fruto_g"
names(BCA)
## [1] "Planta" "Bloque_sector" "Tratamiento"
## [4] "Repeticion" "Altura_cm" "pH_suelo"
## [7] "Humedad_suelo_pct" "Produccion_fruto_g"
names(Cuadrado_Latino)
## [1] "Unidad" "Fila_pendiente" "Columna_exposicion"
## [4] "Tratamiento" "Efecto_fila" "Efecto_columna"
## [7] "Produccion_fruto_g"
names(Factorial)
## [1] "Planta" "Factor_A_Fertilizacion" "Factor_B_Riego"
## [4] "Repeticion" "Humedad_suelo_pct" "Produccion_fruto_g"
names(Anidado)
## [1] "Observacion" "Sector" "Parcela_anidada"
## [4] "Planta_en_parcela" "pH_suelo" "Humedad_suelo_pct"
## [7] "Produccion_fruto_g"
names(Superficie_Respuesta)
## [1] "Corrida" "x1_Fertilizante_cod"
## [3] "x2_Riego_cod" "Dosis_fertilizante_g_planta"
## [5] "Riego_L_semana" "Produccion_fruto_g"
# ============================================================
# 6. CONVERTIR VARIABLES CATEGÓRICAS A FACTOR
# ============================================================
# Diseño completamente al azar
DCA$Tratamiento <- as.factor(DCA$Tratamiento)
# Bloques completos al azar
BCA$Bloque_sector <- as.factor(BCA$Bloque_sector)
BCA$Tratamiento <- as.factor(BCA$Tratamiento)
# Cuadrado latino
Cuadrado_Latino$Fila_pendiente <- as.factor(Cuadrado_Latino$Fila_pendiente)
Cuadrado_Latino$Columna_exposicion <- as.factor(Cuadrado_Latino$Columna_exposicion)
Cuadrado_Latino$Tratamiento <- as.factor(Cuadrado_Latino$Tratamiento)
# Diseño factorial completo
Factorial$Factor_A_Fertilizacion <- as.factor(Factorial$Factor_A_Fertilizacion)
Factorial$Factor_B_Riego <- as.factor(Factorial$Factor_B_Riego)
# Diseño anidado
Anidado$Sector <- as.factor(Anidado$Sector)
Anidado$Parcela_anidada <- as.factor(Anidado$Parcela_anidada)
# ============================================================
# 7. REVISIÓN GENERAL DE LAS BASES
# ============================================================
str(DCA)
## tibble [33 × 6] (S3: tbl_df/tbl/data.frame)
## $ Planta : num [1:33] 1 2 3 4 5 6 7 8 9 10 ...
## $ Tratamiento : Factor w/ 3 levels "Biofertilizante",..: 2 3 3 1 3 2 3 2 1 3 ...
## $ Altura_cm : num [1:33] 104.5 112.3 97.7 126.5 97.4 ...
## $ pH_suelo : num [1:33] 5.1 5.93 5.41 5.74 5.33 5.47 5.96 5.65 5.6 5.59 ...
## $ Humedad_suelo_pct : num [1:33] 65.8 73.1 60.9 49.5 52.3 55.3 60.3 57.4 58.7 46.6 ...
## $ Produccion_fruto_g: num [1:33] 514 638 517 486 516 ...
str(BCA)
## tibble [36 × 8] (S3: tbl_df/tbl/data.frame)
## $ Planta : num [1:36] 1 2 3 4 5 6 7 8 9 10 ...
## $ Bloque_sector : Factor w/ 3 levels "Zona_alta","Zona_baja",..: 1 1 1 1 1 1 1 1 1 1 ...
## $ Tratamiento : Factor w/ 3 levels "Biofertilizante",..: 2 2 2 2 1 1 1 1 3 3 ...
## $ Repeticion : num [1:36] 1 2 3 4 1 2 3 4 1 2 ...
## $ Altura_cm : num [1:36] 110 109 110 122 139 ...
## $ pH_suelo : num [1:36] 5.59 5.57 5.96 5.47 5.39 5.69 5.25 5.86 5.75 5.72 ...
## $ Humedad_suelo_pct : num [1:36] 55.7 54.1 53.4 57.6 64.6 47.1 58.2 43.2 64.4 57.7 ...
## $ Produccion_fruto_g: num [1:36] 488 472 432 458 561 ...
str(Cuadrado_Latino)
## tibble [16 × 7] (S3: tbl_df/tbl/data.frame)
## $ Unidad : num [1:16] 1 2 3 4 5 6 7 8 9 10 ...
## $ Fila_pendiente : Factor w/ 4 levels "Fila_1","Fila_2",..: 1 1 1 1 2 2 2 2 3 3 ...
## $ Columna_exposicion: Factor w/ 4 levels "Columna_1","Columna_2",..: 1 2 3 4 1 2 3 4 1 2 ...
## $ Tratamiento : Factor w/ 4 levels "Biofertilizante",..: 2 1 3 4 1 3 4 2 3 4 ...
## $ Efecto_fila : num [1:16] 20 20 20 20 5 5 5 5 -5 -5 ...
## $ Efecto_columna : num [1:16] -15 0 10 20 -15 0 10 20 -15 0 ...
## $ Produccion_fruto_g: num [1:16] 444 526 625 533 455 ...
str(Factorial)
## tibble [30 × 6] (S3: tbl_df/tbl/data.frame)
## $ Planta : num [1:30] 1 2 3 4 5 6 7 8 9 10 ...
## $ Factor_A_Fertilizacion: Factor w/ 2 levels "Con_fertilizacion",..: 2 2 2 2 2 2 2 2 2 2 ...
## $ Factor_B_Riego : Factor w/ 3 levels "Alto","Bajo",..: 2 2 2 2 2 3 3 3 3 3 ...
## $ Repeticion : num [1:30] 1 2 3 4 5 1 2 3 4 5 ...
## $ Humedad_suelo_pct : num [1:30] 53.3 50.9 46.4 54.9 54.9 62.6 61.7 68.2 66.6 61.3 ...
## $ Produccion_fruto_g : num [1:30] 446 395 403 389 407 ...
str(Anidado)
## tibble [36 × 7] (S3: tbl_df/tbl/data.frame)
## $ Observacion : num [1:36] 1 2 3 4 5 6 7 8 9 10 ...
## $ Sector : Factor w/ 3 levels "Zona_alta","Zona_baja",..: 1 1 1 1 1 1 1 1 1 1 ...
## $ Parcela_anidada : Factor w/ 9 levels "Zona_alta_Parcela_1",..: 1 1 1 1 2 2 2 2 3 3 ...
## $ Planta_en_parcela : num [1:36] 1 2 3 4 1 2 3 4 1 2 ...
## $ pH_suelo : num [1:36] 5.39 5.5 5.27 5.39 5.08 5.12 5.59 5.86 5.66 5.96 ...
## $ Humedad_suelo_pct : num [1:36] 60.7 57.8 52.7 56.8 59.7 50.8 54 47.6 55.3 48.8 ...
## $ Produccion_fruto_g: num [1:36] 539 542 532 513 514 ...
str(Superficie_Respuesta)
## tibble [17 × 6] (S3: tbl_df/tbl/data.frame)
## $ Corrida : num [1:17] 1 2 3 4 5 6 7 8 9 10 ...
## $ x1_Fertilizante_cod : num [1:17] -1 1 -1 1 -1.41 ...
## $ x2_Riego_cod : num [1:17] -1 -1 1 1 0 ...
## $ Dosis_fertilizante_g_planta: num [1:17] 52 108 52 108 40.4 ...
## $ Riego_L_semana : num [1:17] 8.5 8.5 15.5 15.5 12 12 7.1 16.9 12 12 ...
## $ Produccion_fruto_g : num [1:17] 452 515 507 630 455 ...
View(DCA)
View(BCA)
View(Cuadrado_Latino)
View(Factorial)
View(Anidado)
View(Superficie_Respuesta)
# ============================================================
# 8. FUNCIÓN GENERAL PARA RESÚMENES DESCRIPTIVOS
# ============================================================
resumen_descriptivo <- function(datos, grupo) {
datos %>%
group_by(.data[[grupo]]) %>%
summarise(
n = n(),
media = mean(Produccion_fruto_g, na.rm = TRUE),
desviacion = sd(Produccion_fruto_g, na.rm = TRUE),
minimo = min(Produccion_fruto_g, na.rm = TRUE),
maximo = max(Produccion_fruto_g, na.rm = TRUE),
.groups = "drop"
)
}
# ============================================================
# 9. DISEÑO COMPLETAMENTE AL AZAR, DCA
# ============================================================
# DEFINICIÓN:
# El diseño completamente al azar, DCA, compara tratamientos en unidades experimentales
# homogéneas. En este caso, las unidades experimentales son plantas de café y la variable
# respuesta es la producción de fruto en gramos.
# APLICACIÓN EN CAFÉ:
# Se usa para evaluar si la producción promedio de fruto cambia según el tratamiento
# agronómico aplicado, suponiendo que las plantas presentan condiciones similares.
# PREGUNTA:
# ¿La producción promedio de fruto de café cambia entre tratamientos agronómicos?
# MODELO:
# Y_ij = mu + tau_i + error_ij
# Y_ij: producción de fruto de la planta j con el tratamiento i.
# mu: media general.
# tau_i: efecto del tratamiento.
# error_ij: error experimental.
# HIPÓTESIS:
# H0: las medias de producción son iguales entre tratamientos.
# H1: al menos una media de producción es diferente.
# 9.1 Descriptivos DCA
resumen_DCA <- resumen_descriptivo(DCA, "Tratamiento")
print(resumen_DCA)
## # A tibble: 3 × 6
## Tratamiento n media desviacion minimo maximo
## <fct> <int> <dbl> <dbl> <dbl> <dbl>
## 1 Biofertilizante 11 512. 40.6 441 581.
## 2 Control 11 434. 40.4 366. 514.
## 3 Enmienda_organica 11 588. 44.5 516. 639.
# 9.2 Gráfico de cajas DCA
grafico_DCA_box <- ggplot(DCA, aes(
x = Tratamiento,
y = Produccion_fruto_g,
fill = Tratamiento
)) +
geom_boxplot(alpha = 0.85, color = "black", width = 0.65) +
geom_jitter(width = 0.12, size = 3, alpha = 0.85, color = "black") +
scale_fill_manual(values = c("#FF5733", "#33C3FF", "#75FF33", "#C700FF", "#FFC300")) +
labs(
title = "Diseño completamente al azar",
subtitle = "Producción de fruto en café según tratamiento",
x = "Tratamiento agronómico",
y = "Producción de fruto (g)"
) +
theme_minimal(base_size = 14) +
theme(
plot.title = element_text(face = "bold", color = "#7B241C"),
plot.subtitle = element_text(color = "#1B4F72"),
axis.title = element_text(face = "bold"),
legend.position = "none"
)
print(grafico_DCA_box)

# 9.3 Gráfico de medias DCA
grafico_DCA_medias <- ggplot(resumen_DCA, aes(
x = Tratamiento,
y = media,
fill = Tratamiento
)) +
geom_col(color = "black", width = 0.7) +
geom_errorbar(
aes(ymin = media - desviacion, ymax = media + desviacion),
width = 0.2,
linewidth = 0.8
) +
scale_fill_manual(values = c("#FF5733", "#33C3FF", "#75FF33", "#C700FF", "#FFC300")) +
labs(
title = "Media de producción por tratamiento",
subtitle = "Barras con desviación estándar",
x = "Tratamiento agronómico",
y = "Producción promedio de fruto (g)"
) +
theme_minimal(base_size = 14) +
theme(
plot.title = element_text(face = "bold", color = "#7B241C"),
plot.subtitle = element_text(color = "#1B4F72"),
axis.title = element_text(face = "bold"),
legend.position = "none"
)
print(grafico_DCA_medias)

# 9.4 ANOVA DCA
modelo_DCA <- aov(Produccion_fruto_g ~ Tratamiento, data = DCA)
summary(modelo_DCA)
## Df Sum Sq Mean Sq F value Pr(>F)
## Tratamiento 2 129936 64968 37.09 7.76e-09 ***
## Residuals 30 52548 1752
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# 9.5 Supuestos DCA
# Normalidad de residuales
shapiro_DCA <- shapiro.test(residuals(modelo_DCA))
print(shapiro_DCA)
##
## Shapiro-Wilk normality test
##
## data: residuals(modelo_DCA)
## W = 0.97149, p-value = 0.5226
# Homogeneidad de varianzas
levene_DCA <- car::leveneTest(Produccion_fruto_g ~ Tratamiento, data = DCA)
print(levene_DCA)
## Levene's Test for Homogeneity of Variance (center = median)
## Df F value Pr(>F)
## group 2 0.1797 0.8364
## 30
# Gráficos diagnósticos
par(mfrow = c(2, 2))
plot(modelo_DCA)

par(mfrow = c(1, 1))
# 9.6 Comparación de medias DCA
tukey_DCA <- TukeyHSD(modelo_DCA)
print(tukey_DCA)
## Tukey multiple comparisons of means
## 95% family-wise confidence level
##
## Fit: aov(formula = Produccion_fruto_g ~ Tratamiento, data = DCA)
##
## $Tratamiento
## diff lwr upr p adj
## Control-Biofertilizante -77.73636 -121.73096 -33.74177 0.0004078
## Enmienda_organica-Biofertilizante 75.96364 31.96904 119.95823 0.0005364
## Enmienda_organica-Control 153.70000 109.70541 197.69459 0.0000000
plot(tukey_DCA, col = "#E74C3C", las = 1)

lsd_DCA <- agricolae::LSD.test(modelo_DCA, "Tratamiento", group = TRUE)
print(lsd_DCA)
## $statistics
## MSerror Df Mean CV t.value LSD
## 1751.588 30 511.6455 8.179878 2.042272 36.44586
##
## $parameters
## test p.ajusted name.t ntr alpha
## Fisher-LSD none Tratamiento 3 0.05
##
## $means
## Produccion_fruto_g std r se LCL UCL
## Biofertilizante 512.2364 40.55030 11 12.61884 486.4652 538.0075
## Control 434.5000 40.38391 11 12.61884 408.7289 460.2711
## Enmienda_organica 588.2000 44.49243 11 12.61884 562.4289 613.9711
## Min Max Q25 Q50 Q75
## Biofertilizante 441.0 581.2 488.95 516.8 532.8
## Control 366.4 514.3 409.40 426.2 454.0
## Enmienda_organica 516.2 638.7 564.55 593.2 621.6
##
## $comparison
## NULL
##
## $groups
## Produccion_fruto_g groups
## Enmienda_organica 588.2000 a
## Biofertilizante 512.2364 b
## Control 434.5000 c
##
## attr(,"class")
## [1] "group"
# 9.7 Interpretación automática básica DCA
p_DCA <- summary(modelo_DCA)[[1]][["Pr(>F)"]][1]
if (p_DCA < 0.05) {
cat("Interpretación DCA: Se rechaza H0. Existen diferencias significativas entre tratamientos.\n")
} else {
cat("Interpretación DCA: No se rechaza H0. No hay evidencia suficiente de diferencias entre tratamientos.\n")
}
## Interpretación DCA: Se rechaza H0. Existen diferencias significativas entre tratamientos.
# ============================================================
# 10. BLOQUES COMPLETOS AL AZAR, BCA
# ============================================================
# DEFINICIÓN:
# El diseño de bloques completos al azar agrupa las unidades experimentales en bloques
# para controlar una fuente externa de variabilidad.
# APLICACIÓN EN CAFÉ:
# Los bloques pueden representar sectores del lote, como zona alta, media o baja.
# Dentro de cada bloque se comparan los tratamientos.
# PREGUNTA:
# ¿Los tratamientos cambian la producción de fruto después de controlar el efecto del bloque?
# MODELO:
# Y_ij = mu + beta_j + tau_i + error_ij
# beta_j: efecto del bloque.
# tau_i: efecto del tratamiento.
resumen_BCA <- BCA %>%
group_by(Bloque_sector, Tratamiento) %>%
summarise(
n = n(),
media = mean(Produccion_fruto_g, na.rm = TRUE),
desviacion = sd(Produccion_fruto_g, na.rm = TRUE),
.groups = "drop"
)
print(resumen_BCA)
## # A tibble: 9 × 5
## Bloque_sector Tratamiento n media desviacion
## <fct> <fct> <int> <dbl> <dbl>
## 1 Zona_alta Biofertilizante 4 562. 7.56
## 2 Zona_alta Control 4 462. 23.8
## 3 Zona_alta Enmienda_organica 4 606 16.7
## 4 Zona_baja Biofertilizante 4 494. 40.1
## 5 Zona_baja Control 4 392. 39.7
## 6 Zona_baja Enmienda_organica 4 546. 36.9
## 7 Zona_media Biofertilizante 4 534. 46.2
## 8 Zona_media Control 4 433. 33.9
## 9 Zona_media Enmienda_organica 4 579. 29.1
grafico_BCA <- ggplot(BCA, aes(
x = Tratamiento,
y = Produccion_fruto_g,
fill = Bloque_sector
)) +
geom_boxplot(alpha = 0.8, color = "black") +
scale_fill_manual(values = c("#FF5733", "#33C3FF", "#75FF33", "#C700FF", "#FFC300")) +
labs(
title = "Bloques completos al azar",
subtitle = "Producción de fruto según tratamiento y bloque",
x = "Tratamiento agronómico",
y = "Producción de fruto (g)",
fill = "Bloque"
) +
theme_minimal(base_size = 14) +
theme(
plot.title = element_text(face = "bold", color = "#7B241C"),
plot.subtitle = element_text(color = "#1B4F72"),
axis.title = element_text(face = "bold")
)
print(grafico_BCA)

modelo_BCA <- aov(Produccion_fruto_g ~ Bloque_sector + Tratamiento, data = BCA)
summary(modelo_BCA)
## Df Sum Sq Mean Sq F value Pr(>F)
## Bloque_sector 2 26476 13238 14.21 4.17e-05 ***
## Tratamiento 2 137211 68605 73.64 1.67e-12 ***
## Residuals 31 28880 932
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
shapiro_BCA <- shapiro.test(residuals(modelo_BCA))
print(shapiro_BCA)
##
## Shapiro-Wilk normality test
##
## data: residuals(modelo_BCA)
## W = 0.95725, p-value = 0.1766
levene_BCA <- car::leveneTest(Produccion_fruto_g ~ Tratamiento, data = BCA)
print(levene_BCA)
## Levene's Test for Homogeneity of Variance (center = median)
## Df F value Pr(>F)
## group 2 0.3192 0.729
## 33
par(mfrow = c(2, 2))
plot(modelo_BCA)

par(mfrow = c(1, 1))
tukey_BCA <- TukeyHSD(modelo_BCA, "Tratamiento")
print(tukey_BCA)
## Tukey multiple comparisons of means
## 95% family-wise confidence level
##
## Fit: aov(formula = Produccion_fruto_g ~ Bloque_sector + Tratamiento, data = BCA)
##
## $Tratamiento
## diff lwr upr p adj
## Control-Biofertilizante -100.92500 -131.59309 -70.25691 0.0000000
## Enmienda_organica-Biofertilizante 47.06667 16.39857 77.73476 0.0019017
## Enmienda_organica-Control 147.99167 117.32357 178.65976 0.0000000
# ============================================================
# 11. CUADRADO LATINO
# ============================================================
# DEFINICIÓN:
# El cuadrado latino controla dos fuentes de variabilidad mediante filas y columnas.
# Cada tratamiento aparece una sola vez en cada fila y una sola vez en cada columna.
# APLICACIÓN EN CAFÉ:
# Puede representar un lote con dos gradientes, por ejemplo pendiente y exposición solar.
# PREGUNTA:
# ¿Los tratamientos cambian la producción de fruto controlando fila y columna?
# MODELO:
# Y_ijk = mu + Fila_i + Columna_j + Tratamiento_k + error_ijk
resumen_CL <- resumen_descriptivo(Cuadrado_Latino, "Tratamiento")
print(resumen_CL)
## # A tibble: 4 × 6
## Tratamiento n media desviacion minimo maximo
## <fct> <int> <dbl> <dbl> <dbl> <dbl>
## 1 Biofertilizante 4 494. 29.1 455 526.
## 2 Control 4 433. 40.8 374. 467.
## 3 Enmienda_organica 4 577. 34.0 553. 625.
## 4 Sombra_moderada 4 529. 6.20 520. 534.
grafico_CL <- ggplot(Cuadrado_Latino, aes(
x = Columna_exposicion,
y = Fila_pendiente,
fill = Produccion_fruto_g
)) +
geom_tile(color = "white", linewidth = 1.2) +
geom_text(aes(label = Tratamiento), color = "black", fontface = "bold", size = 5) +
scale_fill_gradient(low = "#FFF176", high = "#E91E63") +
labs(
title = "Cuadrado latino",
subtitle = "Producción por fila, columna y tratamiento",
x = "Columna o exposición",
y = "Fila o pendiente",
fill = "Producción (g)"
) +
theme_minimal(base_size = 14) +
theme(
plot.title = element_text(face = "bold", color = "#7B241C"),
plot.subtitle = element_text(color = "#1B4F72"),
axis.title = element_text(face = "bold")
)
print(grafico_CL)

modelo_CL <- aov(
Produccion_fruto_g ~ Fila_pendiente + Columna_exposicion + Tratamiento,
data = Cuadrado_Latino
)
summary(modelo_CL)
## Df Sum Sq Mean Sq F value Pr(>F)
## Fila_pendiente 3 3875 1292 2.062 0.20675
## Columna_exposicion 3 3499 1166 1.862 0.23678
## Tratamiento 3 43910 14637 23.373 0.00104 **
## Residuals 6 3757 626
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
shapiro_CL <- shapiro.test(residuals(modelo_CL))
print(shapiro_CL)
##
## Shapiro-Wilk normality test
##
## data: residuals(modelo_CL)
## W = 0.96367, p-value = 0.7286
par(mfrow = c(2, 2))
plot(modelo_CL)

par(mfrow = c(1, 1))
tukey_CL <- TukeyHSD(modelo_CL, "Tratamiento")
print(tukey_CL)
## Tukey multiple comparisons of means
## 95% family-wise confidence level
##
## Fit: aov(formula = Produccion_fruto_g ~ Fila_pendiente + Columna_exposicion + Tratamiento, data = Cuadrado_Latino)
##
## $Tratamiento
## diff lwr upr p adj
## Control-Biofertilizante -60.85 -122.10542 0.4054206 0.0513408
## Enmienda_organica-Biofertilizante 82.85 21.59458 144.1054206 0.0133427
## Sombra_moderada-Biofertilizante 34.95 -26.30542 96.2054206 0.2932884
## Enmienda_organica-Control 143.70 82.44458 204.9554206 0.0007757
## Sombra_moderada-Control 95.80 34.54458 157.0554206 0.0065879
## Sombra_moderada-Enmienda_organica -47.90 -109.15542 13.3554206 0.1223658
# ============================================================
# 12. DISEÑO FACTORIAL COMPLETO
# ============================================================
# DEFINICIÓN:
# El diseño factorial completo estudia simultáneamente dos o más factores y sus interacciones.
# APLICACIÓN EN CAFÉ:
# Permite evaluar si la producción de fruto cambia por fertilización, riego
# y por la interacción entre fertilización y riego.
# PREGUNTA:
# ¿La fertilización, el riego y su interacción afectan la producción de fruto?
# MODELO:
# Y_ijk = mu + A_i + B_j + AB_ij + error_ijk
resumen_Factorial <- Factorial %>%
group_by(Factor_A_Fertilizacion, Factor_B_Riego) %>%
summarise(
n = n(),
media = mean(Produccion_fruto_g, na.rm = TRUE),
desviacion = sd(Produccion_fruto_g, na.rm = TRUE),
.groups = "drop"
)
print(resumen_Factorial)
## # A tibble: 6 × 5
## Factor_A_Fertilizacion Factor_B_Riego n media desviacion
## <fct> <fct> <int> <dbl> <dbl>
## 1 Con_fertilizacion Alto 5 544. 19.3
## 2 Con_fertilizacion Bajo 5 488. 45.5
## 3 Con_fertilizacion Medio 5 634. 22.9
## 4 Sin_fertilizacion Alto 5 495. 34.5
## 5 Sin_fertilizacion Bajo 5 408. 22.5
## 6 Sin_fertilizacion Medio 5 491. 36.6
grafico_Factorial <- ggplot(resumen_Factorial, aes(
x = Factor_B_Riego,
y = media,
group = Factor_A_Fertilizacion,
color = Factor_A_Fertilizacion
)) +
geom_line(linewidth = 1.4) +
geom_point(size = 4) +
scale_color_manual(values = c("#FF5733", "#007BFF", "#2ECC71", "#9B59B6")) +
labs(
title = "Diseño factorial completo",
subtitle = "Interacción entre fertilización y riego sobre la producción",
x = "Nivel de riego",
y = "Producción promedio de fruto (g)",
color = "Fertilización"
) +
theme_minimal(base_size = 14) +
theme(
plot.title = element_text(face = "bold", color = "#7B241C"),
plot.subtitle = element_text(color = "#1B4F72"),
axis.title = element_text(face = "bold")
)
print(grafico_Factorial)

modelo_Factorial <- aov(
Produccion_fruto_g ~ Factor_A_Fertilizacion * Factor_B_Riego,
data = Factorial
)
summary(modelo_Factorial)
## Df Sum Sq Mean Sq F value Pr(>F)
## Factor_A_Fertilizacion 1 61717 61717 61.686 4.37e-08 ***
## Factor_B_Riego 2 66630 33315 33.299 1.19e-07 ***
## Factor_A_Fertilizacion:Factor_B_Riego 2 11178 5589 5.586 0.0102 *
## Residuals 24 24012 1000
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
shapiro_Factorial <- shapiro.test(residuals(modelo_Factorial))
print(shapiro_Factorial)
##
## Shapiro-Wilk normality test
##
## data: residuals(modelo_Factorial)
## W = 0.98417, p-value = 0.9222
levene_Factorial <- car::leveneTest(
Produccion_fruto_g ~ Factor_A_Fertilizacion * Factor_B_Riego,
data = Factorial
)
print(levene_Factorial)
## Levene's Test for Homogeneity of Variance (center = median)
## Df F value Pr(>F)
## group 5 0.6969 0.6309
## 24
par(mfrow = c(2, 2))
plot(modelo_Factorial)

par(mfrow = c(1, 1))
emmeans_Factorial <- emmeans::emmeans(
modelo_Factorial,
~ Factor_A_Fertilizacion * Factor_B_Riego
)
print(emmeans_Factorial)
## Factor_A_Fertilizacion Factor_B_Riego emmean SE df lower.CL upper.CL
## Con_fertilizacion Alto 544 14.1 24 515 573
## Sin_fertilizacion Alto 495 14.1 24 465 524
## Con_fertilizacion Bajo 488 14.1 24 459 518
## Sin_fertilizacion Bajo 408 14.1 24 379 437
## Con_fertilizacion Medio 634 14.1 24 605 663
## Sin_fertilizacion Medio 491 14.1 24 462 521
##
## Confidence level used: 0.95
pares_Factorial <- pairs(emmeans_Factorial)
print(pares_Factorial)
## contrast estimate SE df t.ratio
## Con_fertilizacion Alto - Sin_fertilizacion Alto 49.44 20 24 2.471
## Con_fertilizacion Alto - Con_fertilizacion Bajo 55.62 20 24 2.780
## Con_fertilizacion Alto - Sin_fertilizacion Bajo 136.02 20 24 6.799
## Con_fertilizacion Alto - Con_fertilizacion Medio -89.64 20 24 -4.481
## Con_fertilizacion Alto - Sin_fertilizacion Medio 52.66 20 24 2.632
## Sin_fertilizacion Alto - Con_fertilizacion Bajo 6.18 20 24 0.309
## Sin_fertilizacion Alto - Sin_fertilizacion Bajo 86.58 20 24 4.328
## Sin_fertilizacion Alto - Con_fertilizacion Medio -139.08 20 24 -6.952
## Sin_fertilizacion Alto - Sin_fertilizacion Medio 3.22 20 24 0.161
## Con_fertilizacion Bajo - Sin_fertilizacion Bajo 80.40 20 24 4.019
## Con_fertilizacion Bajo - Con_fertilizacion Medio -145.26 20 24 -7.261
## Con_fertilizacion Bajo - Sin_fertilizacion Medio -2.96 20 24 -0.148
## Sin_fertilizacion Bajo - Con_fertilizacion Medio -225.66 20 24 -11.280
## Sin_fertilizacion Bajo - Sin_fertilizacion Medio -83.36 20 24 -4.167
## Con_fertilizacion Medio - Sin_fertilizacion Medio 142.30 20 24 7.113
## p.value
## 0.1724
## 0.0956
## <0.0001
## 0.0019
## 0.1278
## 0.9996
## 0.0028
## <0.0001
## 1.0000
## 0.0059
## <0.0001
## 1.0000
## <0.0001
## 0.0041
## <0.0001
##
## P value adjustment: tukey method for comparing a family of 6 estimates
# ============================================================
# 13. DISEÑO ANIDADO
# ============================================================
# DEFINICIÓN:
# El diseño anidado se usa cuando unas unidades están contenidas dentro de otras.
# Existe una estructura jerárquica.
# APLICACIÓN EN CAFÉ:
# Las plantas pueden estar dentro de parcelas y las parcelas dentro de sectores del lote.
# PREGUNTA:
# ¿La producción varía entre sectores y entre parcelas dentro de cada sector?
# MODELO:
# Y_ijk = mu + Sector_i + Parcela_j(Sector_i) + error_ijk
resumen_Anidado <- Anidado %>%
group_by(Sector, Parcela_anidada) %>%
summarise(
n = n(),
media = mean(Produccion_fruto_g, na.rm = TRUE),
desviacion = sd(Produccion_fruto_g, na.rm = TRUE),
.groups = "drop"
)
print(resumen_Anidado)
## # A tibble: 9 × 5
## Sector Parcela_anidada n media desviacion
## <fct> <fct> <int> <dbl> <dbl>
## 1 Zona_alta Zona_alta_Parcela_1 4 532. 13.1
## 2 Zona_alta Zona_alta_Parcela_2 4 513. 8.92
## 3 Zona_alta Zona_alta_Parcela_3 4 509. 19.3
## 4 Zona_baja Zona_baja_Parcela_1 4 460. 28.8
## 5 Zona_baja Zona_baja_Parcela_2 4 488. 13.6
## 6 Zona_baja Zona_baja_Parcela_3 4 443. 14.4
## 7 Zona_media Zona_media_Parcela_1 4 469. 22.9
## 8 Zona_media Zona_media_Parcela_2 4 506. 16.4
## 9 Zona_media Zona_media_Parcela_3 4 469. 35.3
grafico_Anidado <- ggplot(Anidado, aes(
x = Parcela_anidada,
y = Produccion_fruto_g,
fill = Sector
)) +
geom_boxplot(alpha = 0.85, color = "black") +
scale_fill_manual(values = c("#FF5733", "#33C3FF", "#75FF33", "#C700FF", "#FFC300")) +
labs(
title = "Diseño anidado",
subtitle = "Parcelas anidadas dentro de sectores del lote",
x = "Parcela anidada",
y = "Producción de fruto (g)",
fill = "Sector"
) +
theme_minimal(base_size = 14) +
theme(
plot.title = element_text(face = "bold", color = "#7B241C"),
plot.subtitle = element_text(color = "#1B4F72"),
axis.title = element_text(face = "bold")
)
print(grafico_Anidado)

modelo_Anidado <- aov(
Produccion_fruto_g ~ Sector + Error(Sector / Parcela_anidada),
data = Anidado
)
## Warning in aov(Produccion_fruto_g ~ Sector + Error(Sector/Parcela_anidada), :
## Error() model is singular
summary(modelo_Anidado)
##
## Error: Sector
## Df Sum Sq Mean Sq
## Sector 2 18157 9078
##
## Error: Sector:Parcela_anidada
## Df Sum Sq Mean Sq F value Pr(>F)
## Residuals 6 8987 1498
##
## Error: Within
## Df Sum Sq Mean Sq F value Pr(>F)
## Residuals 27 11636 430.9
modelo_Anidado_lm <- lm(
Produccion_fruto_g ~ Sector / Parcela_anidada,
data = Anidado
)
summary(modelo_Anidado_lm)
##
## Call:
## lm(formula = Produccion_fruto_g ~ Sector/Parcela_anidada, data = Anidado)
##
## Residuals:
## Min 1Q Median 3Q Max
## -40.300 -11.713 -0.313 12.025 40.900
##
## Coefficients: (18 not defined because of singularities)
## Estimate Std. Error
## (Intercept) 531.750 10.380
## SectorZona_baja -88.550 14.679
## SectorZona_media -62.950 14.679
## SectorZona_alta:Parcela_anidadaZona_alta_Parcela_2 -19.200 14.679
## SectorZona_baja:Parcela_anidadaZona_alta_Parcela_2 NA NA
## SectorZona_media:Parcela_anidadaZona_alta_Parcela_2 NA NA
## SectorZona_alta:Parcela_anidadaZona_alta_Parcela_3 -23.200 14.679
## SectorZona_baja:Parcela_anidadaZona_alta_Parcela_3 NA NA
## SectorZona_media:Parcela_anidadaZona_alta_Parcela_3 NA NA
## SectorZona_alta:Parcela_anidadaZona_baja_Parcela_1 NA NA
## SectorZona_baja:Parcela_anidadaZona_baja_Parcela_1 16.825 14.679
## SectorZona_media:Parcela_anidadaZona_baja_Parcela_1 NA NA
## SectorZona_alta:Parcela_anidadaZona_baja_Parcela_2 NA NA
## SectorZona_baja:Parcela_anidadaZona_baja_Parcela_2 44.550 14.679
## SectorZona_media:Parcela_anidadaZona_baja_Parcela_2 NA NA
## SectorZona_alta:Parcela_anidadaZona_baja_Parcela_3 NA NA
## SectorZona_baja:Parcela_anidadaZona_baja_Parcela_3 NA NA
## SectorZona_media:Parcela_anidadaZona_baja_Parcela_3 NA NA
## SectorZona_alta:Parcela_anidadaZona_media_Parcela_1 NA NA
## SectorZona_baja:Parcela_anidadaZona_media_Parcela_1 NA NA
## SectorZona_media:Parcela_anidadaZona_media_Parcela_1 0.275 14.679
## SectorZona_alta:Parcela_anidadaZona_media_Parcela_2 NA NA
## SectorZona_baja:Parcela_anidadaZona_media_Parcela_2 NA NA
## SectorZona_media:Parcela_anidadaZona_media_Parcela_2 37.425 14.679
## SectorZona_alta:Parcela_anidadaZona_media_Parcela_3 NA NA
## SectorZona_baja:Parcela_anidadaZona_media_Parcela_3 NA NA
## SectorZona_media:Parcela_anidadaZona_media_Parcela_3 NA NA
## t value Pr(>|t|)
## (Intercept) 51.230 < 2e-16 ***
## SectorZona_baja -6.032 1.94e-06 ***
## SectorZona_media -4.288 0.000206 ***
## SectorZona_alta:Parcela_anidadaZona_alta_Parcela_2 -1.308 0.201904
## SectorZona_baja:Parcela_anidadaZona_alta_Parcela_2 NA NA
## SectorZona_media:Parcela_anidadaZona_alta_Parcela_2 NA NA
## SectorZona_alta:Parcela_anidadaZona_alta_Parcela_3 -1.580 0.125641
## SectorZona_baja:Parcela_anidadaZona_alta_Parcela_3 NA NA
## SectorZona_media:Parcela_anidadaZona_alta_Parcela_3 NA NA
## SectorZona_alta:Parcela_anidadaZona_baja_Parcela_1 NA NA
## SectorZona_baja:Parcela_anidadaZona_baja_Parcela_1 1.146 0.261772
## SectorZona_media:Parcela_anidadaZona_baja_Parcela_1 NA NA
## SectorZona_alta:Parcela_anidadaZona_baja_Parcela_2 NA NA
## SectorZona_baja:Parcela_anidadaZona_baja_Parcela_2 3.035 0.005273 **
## SectorZona_media:Parcela_anidadaZona_baja_Parcela_2 NA NA
## SectorZona_alta:Parcela_anidadaZona_baja_Parcela_3 NA NA
## SectorZona_baja:Parcela_anidadaZona_baja_Parcela_3 NA NA
## SectorZona_media:Parcela_anidadaZona_baja_Parcela_3 NA NA
## SectorZona_alta:Parcela_anidadaZona_media_Parcela_1 NA NA
## SectorZona_baja:Parcela_anidadaZona_media_Parcela_1 NA NA
## SectorZona_media:Parcela_anidadaZona_media_Parcela_1 0.019 0.985191
## SectorZona_alta:Parcela_anidadaZona_media_Parcela_2 NA NA
## SectorZona_baja:Parcela_anidadaZona_media_Parcela_2 NA NA
## SectorZona_media:Parcela_anidadaZona_media_Parcela_2 2.550 0.016778 *
## SectorZona_alta:Parcela_anidadaZona_media_Parcela_3 NA NA
## SectorZona_baja:Parcela_anidadaZona_media_Parcela_3 NA NA
## SectorZona_media:Parcela_anidadaZona_media_Parcela_3 NA NA
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 20.76 on 27 degrees of freedom
## Multiple R-squared: 0.7, Adjusted R-squared: 0.611
## F-statistic: 7.873 on 8 and 27 DF, p-value: 2.029e-05
shapiro_Anidado <- shapiro.test(residuals(modelo_Anidado_lm))
print(shapiro_Anidado)
##
## Shapiro-Wilk normality test
##
## data: residuals(modelo_Anidado_lm)
## W = 0.9867, p-value = 0.9349
par(mfrow = c(2, 2))
plot(modelo_Anidado_lm)

par(mfrow = c(1, 1))
# ============================================================
# 14. SUPERFICIE DE RESPUESTA
# ============================================================
# DEFINICIÓN:
# La superficie de respuesta permite optimizar una variable respuesta usando factores cuantitativos.
# Evalúa efectos lineales, cuadráticos e interacciones.
# APLICACIÓN EN CAFÉ:
# Se usa para estimar la combinación de fertilización y riego que maximiza la producción de fruto.
# PREGUNTA:
# ¿Qué combinación de fertilizante y riego produce mayor producción de fruto?
# MODELO:
# Y = beta0 + beta1X1 + beta2X2 + beta11X1^2 + beta22X2^2 + beta12X1X2 + error
str(Superficie_Respuesta)
## tibble [17 × 6] (S3: tbl_df/tbl/data.frame)
## $ Corrida : num [1:17] 1 2 3 4 5 6 7 8 9 10 ...
## $ x1_Fertilizante_cod : num [1:17] -1 1 -1 1 -1.41 ...
## $ x2_Riego_cod : num [1:17] -1 -1 1 1 0 ...
## $ Dosis_fertilizante_g_planta: num [1:17] 52 108 52 108 40.4 ...
## $ Riego_L_semana : num [1:17] 8.5 8.5 15.5 15.5 12 12 7.1 16.9 12 12 ...
## $ Produccion_fruto_g : num [1:17] 452 515 507 630 455 ...
summary(Superficie_Respuesta)
## Corrida x1_Fertilizante_cod x2_Riego_cod Dosis_fertilizante_g_planta
## Min. : 1 Min. :-1.414 Min. :-1.414 Min. : 40.4
## 1st Qu.: 5 1st Qu.: 0.000 1st Qu.: 0.000 1st Qu.: 80.0
## Median : 9 Median : 0.000 Median : 0.000 Median : 80.0
## Mean : 9 Mean : 0.000 Mean : 0.000 Mean : 80.0
## 3rd Qu.:13 3rd Qu.: 0.000 3rd Qu.: 0.000 3rd Qu.: 80.0
## Max. :17 Max. : 1.414 Max. : 1.414 Max. :119.6
## Riego_L_semana Produccion_fruto_g
## Min. : 7.1 Min. :452.0
## 1st Qu.:12.0 1st Qu.:510.0
## Median :12.0 Median :581.5
## Mean :12.0 Mean :556.3
## 3rd Qu.:12.0 3rd Qu.:613.5
## Max. :16.9 Max. :630.5
modelo_SR <- lm(
Produccion_fruto_g ~ Dosis_fertilizante_g_planta + Riego_L_semana +
I(Dosis_fertilizante_g_planta^2) + I(Riego_L_semana^2) +
Dosis_fertilizante_g_planta:Riego_L_semana,
data = Superficie_Respuesta
)
summary(modelo_SR)
##
## Call:
## lm(formula = Produccion_fruto_g ~ Dosis_fertilizante_g_planta +
## Riego_L_semana + I(Dosis_fertilizante_g_planta^2) + I(Riego_L_semana^2) +
## Dosis_fertilizante_g_planta:Riego_L_semana, data = Superficie_Respuesta)
##
## Residuals:
## Min 1Q Median 3Q Max
## -15.135 -5.670 0.743 5.439 10.031
##
## Coefficients:
## Estimate Std. Error t value
## (Intercept) -3.902e+02 6.103e+01 -6.393
## Dosis_fertilizante_g_planta 9.042e+00 7.910e-01 11.431
## Riego_L_semana 8.380e+01 6.807e+00 12.311
## I(Dosis_fertilizante_g_planta^2) -5.820e-02 3.774e-03 -15.421
## I(Riego_L_semana^2) -3.521e+00 2.450e-01 -14.376
## Dosis_fertilizante_g_planta:Riego_L_semana 1.554e-01 4.187e-02 3.710
## Pr(>|t|)
## (Intercept) 5.13e-05 ***
## Dosis_fertilizante_g_planta 1.91e-07 ***
## Riego_L_semana 8.94e-08 ***
## I(Dosis_fertilizante_g_planta^2) 8.51e-09 ***
## I(Riego_L_semana^2) 1.78e-08 ***
## Dosis_fertilizante_g_planta:Riego_L_semana 0.00344 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 8.207 on 11 degrees of freedom
## Multiple R-squared: 0.9882, Adjusted R-squared: 0.9828
## F-statistic: 183.8 on 5 and 11 DF, p-value: 3.262e-10
anova(modelo_SR)
## Analysis of Variance Table
##
## Response: Produccion_fruto_g
## Df Sum Sq Mean Sq F value Pr(>F)
## Dosis_fertilizante_g_planta 1 19928.0 19928.0 295.899 2.675e-09
## Riego_L_semana 1 16683.7 16683.7 247.726 6.861e-09
## I(Dosis_fertilizante_g_planta^2) 1 10450.9 10450.9 155.179 7.914e-08
## I(Riego_L_semana^2) 1 13917.9 13917.9 206.659 1.781e-08
## Dosis_fertilizante_g_planta:Riego_L_semana 1 927.2 927.2 13.767 0.003438
## Residuals 11 740.8 67.3
##
## Dosis_fertilizante_g_planta ***
## Riego_L_semana ***
## I(Dosis_fertilizante_g_planta^2) ***
## I(Riego_L_semana^2) ***
## Dosis_fertilizante_g_planta:Riego_L_semana **
## Residuals
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
grafico_SR <- ggplot(Superficie_Respuesta, aes(
x = Dosis_fertilizante_g_planta,
y = Riego_L_semana,
fill = Produccion_fruto_g
)) +
geom_tile(color = "white", linewidth = 1.1) +
geom_point(size = 3, color = "black") +
scale_fill_gradient(low = "#00E5FF", high = "#FF1744") +
labs(
title = "Superficie de respuesta",
subtitle = "Producción de fruto según fertilización y riego",
x = "Dosis de fertilizante (g/planta)",
y = "Riego (L/semana)",
fill = "Producción (g)"
) +
theme_minimal(base_size = 14) +
theme(
plot.title = element_text(face = "bold", color = "#7B241C"),
plot.subtitle = element_text(color = "#1B4F72"),
axis.title = element_text(face = "bold")
)
print(grafico_SR)

grid_SR <- expand.grid(
Dosis_fertilizante_g_planta = seq(
min(Superficie_Respuesta$Dosis_fertilizante_g_planta, na.rm = TRUE),
max(Superficie_Respuesta$Dosis_fertilizante_g_planta, na.rm = TRUE),
length.out = 50
),
Riego_L_semana = seq(
min(Superficie_Respuesta$Riego_L_semana, na.rm = TRUE),
max(Superficie_Respuesta$Riego_L_semana, na.rm = TRUE),
length.out = 50
)
)
grid_SR$Prediccion <- predict(modelo_SR, newdata = grid_SR)
grafico_SR_pred <- ggplot(grid_SR, aes(
x = Dosis_fertilizante_g_planta,
y = Riego_L_semana,
fill = Prediccion
)) +
geom_tile() +
scale_fill_gradientn(colors = c("#00E5FF", "#76FF03", "#FFFF00", "#FF9100", "#FF1744")) +
labs(
title = "Superficie de respuesta estimada",
subtitle = "Producción predicha de fruto en café",
x = "Dosis de fertilizante (g/planta)",
y = "Riego (L/semana)",
fill = "Producción predicha"
) +
theme_minimal(base_size = 14) +
theme(
plot.title = element_text(face = "bold", color = "#7B241C"),
plot.subtitle = element_text(color = "#1B4F72"),
axis.title = element_text(face = "bold")
)
print(grafico_SR_pred)

# ============================================================
# 15. EXPORTAR RESULTADOS
# ============================================================
resultados_exportar <- list(
"Resumen_DCA" = resumen_DCA,
"Resumen_BCA" = resumen_BCA,
"Resumen_Cuadrado_Latino" = resumen_CL,
"Resumen_Factorial" = resumen_Factorial,
"Resumen_Anidado" = resumen_Anidado,
"Datos_DCA" = DCA,
"Datos_BCA" = BCA,
"Datos_Cuadrado_Latino" = Cuadrado_Latino,
"Datos_Factorial" = Factorial,
"Datos_Anidado" = Anidado,
"Datos_Superficie_Respuesta" = Superficie_Respuesta
)
writexl::write_xlsx(
resultados_exportar,
"Resultados_disenos_cafe_produccion_fruto.xlsx"
)
# ============================================================
# 16. CIERRE METODOLÓGICO
# ============================================================
cat("\nCIERRE METODOLÓGICO:\n")
##
## CIERRE METODOLÓGICO:
cat("El ejercicio aplicó seis diseños experimentales a la producción de fruto en café.\n")
## El ejercicio aplicó seis diseños experimentales a la producción de fruto en café.
cat("El DCA compara tratamientos en plantas homogéneas.\n")
## El DCA compara tratamientos en plantas homogéneas.
cat("El BCA controla una fuente de variabilidad, como el sector del lote.\n")
## El BCA controla una fuente de variabilidad, como el sector del lote.
cat("El cuadrado latino controla dos fuentes de variabilidad mediante filas y columnas.\n")
## El cuadrado latino controla dos fuentes de variabilidad mediante filas y columnas.
cat("El factorial completo evalúa efectos principales e interacción.\n")
## El factorial completo evalúa efectos principales e interacción.
cat("El diseño anidado reconoce jerarquías entre sectores, parcelas y plantas.\n")
## El diseño anidado reconoce jerarquías entre sectores, parcelas y plantas.
cat("La superficie de respuesta permite estimar combinaciones óptimas de fertilización y riego.\n")
## La superficie de respuesta permite estimar combinaciones óptimas de fertilización y riego.
cat("La variable respuesta central en todos los casos fue Produccion_fruto_g.\n")
## La variable respuesta central en todos los casos fue Produccion_fruto_g.
# ============================================================
# FIN DEL SCRIPT
# ============================================================