# Cargar librerías
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.2.1 ✔ readr 2.2.0
## ✔ forcats 1.0.1 ✔ stringr 1.6.0
## ✔ ggplot2 4.0.3 ✔ tibble 3.3.1
## ✔ lubridate 1.9.5 ✔ tidyr 1.3.2
## ✔ purrr 1.2.2
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
# 1. Recrear los datos del campo
set.seed(42)
datos <- data.frame(
Parcela = 1:16,
Tratamiento = rep(c("Riego_50%", "Riego_75%", "Riego_100%", "Riego_125%"), each = 4),
Eficiencia_Agua = c(rnorm(4, 1.2, 0.15), rnorm(4, 1.8, 0.12),
rnorm(4, 1.7, 0.18), rnorm(4, 1.3, 0.14))
)
# Convertir tratamiento a Factor (CRUCIAL para el ANOVA de la próxima semana)
datos$Tratamiento <- as.factor(datos$Tratamiento)
# Verificación rápida para la bitácora
str(datos)
## 'data.frame': 16 obs. of 3 variables:
## $ Parcela : int 1 2 3 4 5 6 7 8 9 10 ...
## $ Tratamiento : Factor w/ 4 levels "Riego_100%","Riego_125%",..: 3 3 3 3 4 4 4 4 1 1 ...
## $ Eficiencia_Agua: num 1.41 1.12 1.25 1.29 1.85 ...
# 2. Resumen estadístico usando dplyr
resumen <- datos %>%
group_by(Tratamiento) %>%
summarise(
Media = mean(Eficiencia_Agua),
Desviacion = sd(Eficiencia_Agua)
)
print(resumen)
## # A tibble: 4 × 3
## Tratamiento Media Desviacion
## <fct> <dbl> <dbl>
## 1 Riego_100% 1.95 0.189
## 2 Riego_125% 1.26 0.117
## 3 Riego_50% 1.27 0.120
## 4 Riego_75% 1.85 0.0912
# 3. Gráfico exploratorio con ggplot2
# Calcular la media global (ahora en su propia línea, sin el ">" que causaba error)
media_global <- mean(datos$Eficiencia_Agua)
# Generar el gráfico correctamente estructurado
ggplot(datos, aes(x = Tratamiento, y = Eficiencia_Agua)) +
geom_boxplot(fill = "lightgray", alpha = 0.5) +
geom_jitter(aes(color = Tratamiento), width = 0.1, size = 3) +
geom_hline(yintercept = media_global, linetype = "dashed", color = "red") +
theme_minimal() +
labs(title = "Exploración Visual: Eficiencia de Agua por Tratamiento",
x = "Lámina de Riego",
y = "Eficiencia del Agua (kg/m³)") +
theme(legend.position = "none")
La siguiente es la explicación línea por línea del código R, desglosando tanto su significado en programación R como su interpretación en el contexto del Diseño Experimental en Ingeniería Agrícola.
# Cargar librerías
library(tidyverse)
tidyverse,
que incluye dplyr (manipulación de datos) y
ggplot2 (visualización), entre otros.dplyr permite resumir eficientemente la gran cantidad de
datos que se generan en parcelas experimentales (rendimientos,
eficiencia, humedad), y ggplot2 permite generar gráficos de
alta calidad para informes y artículos científicos, esenciales para
comunicar resultados a otros ingenieros o agrónomos.set.seed(42)
set.seed asegura
que el “ensayo virtual” sea consistente para la enseñanza.datos <- data.frame(
Parcela = 1:16,
Tratamiento = rep(c("Riego_50%", "Riego_75%", "Riego_100%", "Riego_125%"), each = 4),
Eficiencia_Agua = c(rnorm(4, 1.2, 0.15), rnorm(4, 1.8, 0.12),
rnorm(4, 1.7, 0.18), rnorm(4, 1.3, 0.14))
)
data.frame (tabla) con 3
columnas y 16 filas (observaciones).
Parcela = 1:16: Asigna un número identificador único a
cada una de las 16 parcelas.Tratamiento = rep(..., each = 4): Repite cada etiqueta
de riego 4 veces (dando un total de 4 repeticiones por
tratamiento).Eficiencia_Agua = c(rnorm(...), ...): Genera 4 valores
aleatorios para cada tratamiento a partir de distribuciones normales con
medias (1.2, 1.8, 1.7, 1.3) y desviaciones típicas específicas.
Esto simula la variabilidad natural del campo.sd) representa el
error experimental debido a la heterogeneidad del
suelo, microclima o errores de medición.datos$Tratamiento <- as.factor(datos$Tratamiento)
Tratamiento en un objeto de tipo factor
(variable categórica). En R, el ANOVA (aov()) exige que la
variable independiente sea un factor para tratarla como grupos
discretos, no como una variable numérica continua.# Verificación rápida para la bitácora
str(datos)
Tratamiento efectivamente sea factor.resumen <- datos %>%
group_by(Tratamiento) %>%
summarise(
Media = mean(Eficiencia_Agua),
Desviacion = sd(Eficiencia_Agua)
)
%>% (pipe)
encadena acciones. group_by agrupa los datos por
tratamiento, y summarise calcula la media
(mean) y desviación estándar (sd) de la
eficiencia para cada grupo. El resultado se guarda en el objeto
resumen.Media estima el efecto de cada lámina de riego sobre la
eficiencia. La Desviación (o error estándar) nos da una
idea de la precisión del experimento: si las
desviaciones son muy grandes respecto a las diferencias entre medias,
será difícil rechazar la H₀ (todas iguales). Es la base para calcular el
coeficiente de variación (CV) del ensayo.print(resumen)
media_global <- mean(datos$Eficiencia_Agua)
ggplot(datos, aes(x = Tratamiento, y = Eficiencia_Agua)) +
geom_boxplot(fill = "lightgray", alpha = 0.5) +
geom_jitter(aes(color = Tratamiento), width = 0.1, size = 3) +
geom_hline(yintercept = media_global, linetype = "dashed", color = "red") +
theme_minimal() +
labs(title = "Exploración Visual: Eficiencia de Agua por Tratamiento",
x = "Lámina de Riego",
y = "Eficiencia del Agua (kg/m³)") +
theme(legend.position = "none")
ggplot(): Inicializa el gráfico con los datos y mapea
el eje X al tratamiento y el Y a la eficiencia.geom_boxplot: Dibuja un diagrama de caja y bigotes
(mediana, cuartiles y rangos) relleno de gris claro con
transparencia.geom_jitter: Superpone los puntos crudos (cada parcela)
con un ligero desplazamiento horizontal (width) para evitar
solapamiento. El color distingue tratamientos y el tamaño
(size) hace visibles los puntos.geom_hline: Agrega una línea horizontal discontinua
roja en el valor de la media global.theme_minimal(): Estilo limpio para el gráfico.labs() y theme(): Etiquetan los ejes con
unidades propias de la ingeniería agrícola (kg/m³) y eliminan la leyenda
(innecesaria porque los ejes ya nombran los tratamientos).jitter revelan la distribución real de las 4
repeticiones (el ingeniero puede detectar datos atípicos que sugieran
errores de medición o parcelas mal drenadas). La línea roja nos ayuda a
ver, de un vistazo, qué tratamientos están por encima o por debajo de la
media general. Visualmente, comparamos la variabilidad entre
tratamientos (separación de cajas) contra la
variabilidad dentro de cada tratamiento (tamaño de las
cajas y dispersión de puntos).# Observa el gráfico que generaste en R y compáralo con los que dibujaste a mano.
# Visualmente, ¿crees que la distancia entre las cajas es lo suficientemente grande
# respecto a la dispersión de los puntos como para rechazar la Hipótesis Nula (H0)?
# Anota tu predicción antes de que hagamos la prueba matemática la próxima semana.