# Instalar y cargar paquetes si es necesario
# install.packages("tidyverse")
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
# Establecer semilla para reproducibilidad
set.seed(42)
# Simular datos similares a los de Python
df_lotes_r <- tibble(
ID_Parcela = 1:200,
Zona = sample(c('Norte', 'Sur', 'Este', 'Oeste'), 200, replace = TRUE),
Textura_Suelo = sample(c('Arcilloso', 'Franco', 'Arenoso'), 200, replace = TRUE, prob = c(0.3, 0.5, 0.2))
) %>%
mutate(
Humedad_base = case_when(
Textura_Suelo == 'Arcilloso' ~ 30,
Textura_Suelo == 'Franco' ~ 22,
TRUE ~ 12
),
Humedad_ = Humedad_base + rnorm(200, mean = 0, sd = 3),
Rendimiento_ton_ha = 3 + (Humedad_ * 0.15) +
if_else(Textura_Suelo == 'Franco', 2.5, 0) +
rnorm(200, mean = 0, sd = 1.5)
) %>%
select(-Humedad_base)
# Mostrar las primeras filas
print(head(df_lotes_r))
## # A tibble: 6 × 5
## ID_Parcela Zona Textura_Suelo Humedad_ Rendimiento_ton_ha
## <int> <chr> <chr> <dbl> <dbl>
## 1 1 Norte Arenoso 6.00 5.90
## 2 2 Norte Arcilloso 31.0 6.35
## 3 3 Norte Arenoso 15.5 5.41
## 4 4 Norte Franco 28.2 9.80
## 5 5 Sur Franco 17.9 7.31
## 6 6 Oeste Franco 18.5 6.78
# Mostrar las primeras filas
print(head(df_lotes_r))
## # A tibble: 6 × 5
## ID_Parcela Zona Textura_Suelo Humedad_ Rendimiento_ton_ha
## <int> <chr> <chr> <dbl> <dbl>
## 1 1 Norte Arenoso 6.00 5.90
## 2 2 Norte Arcilloso 31.0 6.35
## 3 3 Norte Arenoso 15.5 5.41
## 4 4 Norte Franco 28.2 9.80
## 5 5 Sur Franco 17.9 7.31
## 6 6 Oeste Franco 18.5 6.78
# 1. Resúmenes Estadísticos Agrupados con dplyr
resumen_suelos_r <- df_lotes_r %>%
group_by(Textura_Suelo) %>%
summarise(
Humedad_media = mean(Humedad_, na.rm = TRUE),
Rendimiento_medio = mean(Rendimiento_ton_ha, na.rm = TRUE)
)
print(resumen_suelos_r)
## # A tibble: 3 × 3
## Textura_Suelo Humedad_media Rendimiento_medio
## <chr> <dbl> <dbl>
## 1 Arcilloso 30.2 7.35
## 2 Arenoso 11.4 4.78
## 3 Franco 22.2 8.72
# 2. Comparación Visual de Grupos (Boxplots Categóricos)
df_lotes_r %>%
ggplot(aes(x = Textura_Suelo, y = Rendimiento_ton_ha, fill = Textura_Suelo)) +
geom_boxplot() +
labs(title = 'Variabilidad del Rendimiento según el Tipo de Suelo',
x = 'Textura del Suelo',
y = 'Rendimiento (ton/ha)') +
theme_minimal() +
scale_fill_viridis_d(option = "A", begin = 0.5)
# 3. Análisis Multivariado con Facetas (ggplot2)
df_lotes_r %>%
ggplot(aes(x = Humedad_, y = Rendimiento_ton_ha, color = Textura_Suelo)) +
geom_point(alpha = 0.7) +
geom_smooth(method = "lm", se = FALSE) +
facet_wrap(~ Zona, ncol = 2) + # Facetas por Zona, 2 columnas
labs(title = 'Relación Humedad-Rendimiento por Zona y Tipo de Suelo',
x = 'Humedad (%)',
y = 'Rendimiento (ton/ha)',
color = 'Textura del Suelo') +
theme_minimal() +
scale_color_viridis_d(option = "D")
## `geom_smooth()` using formula = 'y ~ x'
¡Claro! A continuación te explico línea por línea el código R, primero su significado en R (sintaxis y función) y luego su significado en estadística aplicada a la Ingeniería Agrícola (contexto agronómico y análisis de datos).
# Instalar y cargar paquetes si es necesario
# install.packages("tidyverse")
library(tidyverse)
En R:
- # es un comentario (no se ejecuta).
- library(tidyverse) carga el conjunto de paquetes
tidyverse (dplyr, ggplot2, tibble, etc.) para manipulación
y visualización de datos.
En Estadística aplicada a Ingeniería Agrícola:
- Se prepara el entorno de trabajo para manejar datos agrícolas
(rendimientos, humedad, textura de suelo). Tidyverse facilita el
análisis exploratorio y la visualización de datos experimentales.
set.seed(42)
En R:
- Fija la semilla del generador de números aleatorios para que los
resultados sean reproducibles.
En Estadística:
- Garantiza que cualquier simulación o muestreo aleatorio (como la
asignación de tipos de suelo) pueda repetirse exactamente, crucial en
investigación agrícola para validar resultados.
df_lotes_r <- tibble(
ID_Parcela = 1:200,
Zona = sample(c('Norte', 'Sur', 'Este', 'Oeste'), 200, replace = TRUE),
Textura_Suelo = sample(c('Arcilloso', 'Franco', 'Arenoso'), 200, replace = TRUE, prob = c(0.3, 0.5, 0.2))
)
En R:
- tibble() crea una tabla de datos (versión moderna de
data.frame).
- 1:200 genera una secuencia del 1 al 200 (identificadores
de parcela).
- sample() asigna aleatoriamente una zona entre 4 posibles
y una textura de suelo con probabilidades 30%, 50% y 20%
respectivamente.
En Ingeniería Agrícola:
- Simula 200 parcelas agrícolas con información
espacial (zona geográfica) y edáfica (textura del suelo). Las
probabilidades reflejan distribuciones típicas: suelos francos son más
comunes.
mutate%>%
mutate(
Humedad_base = case_when(
Textura_Suelo == 'Arcilloso' ~ 30,
Textura_Suelo == 'Franco' ~ 22,
TRUE ~ 12
),
Humedad_ = Humedad_base + rnorm(200, mean = 0, sd = 3),
Rendimiento_ton_ha = 3 + (Humedad_ * 0.15) +
if_else(Textura_Suelo == 'Franco', 2.5, 0) +
rnorm(200, mean = 0, sd = 1.5)
)
En R:
- %>% es el operador pipe que pasa el resultado
al siguiente paso.
- mutate() agrega nuevas columnas.
- case_when() asigna valores según condiciones (similar a
if-else múltiple).
- rnorm() genera valores aleatorios con distribución normal
(media 0, desviación 3 para humedad; media 0, sd 1.5 para
rendimiento).
- if_else() añade un efecto fijo de 2.5 ton/ha solo para
suelos francos.
En Ingeniería Agrícola:
- Humedad base: refleja la capacidad de retención de
agua típica de cada textura (arcilloso retiene más que arenoso).
- Humedad medida: incluye variabilidad natural
(mediciones con error).
- Rendimiento: se modela como una función lineal de la
humedad (pendiente 0.15 ton/ha por % de humedad), más un bonus para
suelos francos (los mejores para cultivos), más error aleatorio. Esto
simula un experimento real con confusores.
%>%
select(-Humedad_base)
En R:
- select(-columna) elimina la columna
Humedad_base (ya no necesaria).
En Estadística:
- Se elimina la variable intermedia para quedarse solo con las
observaciones finales (limpieza de datos).
print(head(df_lotes_r))
En R:
- head() muestra las primeras 6 filas.
- print() las imprime en consola.
En Estadística:
- Primer contacto con los datos: verificar estructura y valores
plausibles.
resumen_suelos_r <- df_lotes_r %>%
group_by(Textura_Suelo) %>%
summarise(
Humedad_media = mean(Humedad_, na.rm = TRUE),
Rendimiento_medio = mean(Rendimiento_ton_ha, na.rm = TRUE)
)
print(resumen_suelos_r)
En R:
- group_by() agrupa por textura de suelo.
- summarise() calcula la media de humedad y rendimiento
para cada grupo.
- na.rm = TRUE ignora valores faltantes.
En Estadística aplicada:
- Análisis descriptivo por grupos: compara humedad y
rendimiento promedio entre suelos arcillosos, francos y arenosos.
- En agricultura, esto permite identificar qué tipo de suelo tiene mayor
productividad media y si la humedad varía significativamente.
df_lotes_r %>%
ggplot(aes(x = Textura_Suelo, y = Rendimiento_ton_ha, fill = Textura_Suelo)) +
geom_boxplot() +
labs(title = 'Variabilidad del Rendimiento según el Tipo de Suelo',
x = 'Textura del Suelo',
y = 'Rendimiento (ton/ha)') +
theme_minimal() +
scale_fill_viridis_d(option = "A", begin = 0.5)
En R:
- ggplot() inicia el gráfico con ejes x (textura) e y
(rendimiento).
- geom_boxplot() dibuja diagramas de caja.
- labs() añade títulos y etiquetas.
- theme_minimal() aplica un tema limpio.
- scale_fill_viridis_d() usa colores accesibles para
daltonismo.
En Estadística para Ingeniería Agrícola:
- Boxplot muestra mediana, cuartiles y valores atípicos
del rendimiento para cada textura.
- Permite comparar visualmente la distribución del rendimiento: suelos
francos deberían tener mediana más alta (por el bonus de 2.5).
- Detecta posibles outliers (parcelas con rendimiento anómalo).
df_lotes_r %>%
ggplot(aes(x = Humedad_, y = Rendimiento_ton_ha, color = Textura_Suelo)) +
geom_point(alpha = 0.7) +
geom_smooth(method = "lm", se = FALSE) +
facet_wrap(~ Zona, ncol = 2) +
labs(title = 'Relación Humedad-Rendimiento por Zona y Tipo de Suelo',
x = 'Humedad (%)',
y = 'Rendimiento (ton/ha)',
color = 'Textura del Suelo') +
theme_minimal() +
scale_color_viridis_d(option = "D")
En R:
- geom_point() dibuja puntos con transparencia 0.7.
- geom_smooth(method = "lm", se = FALSE) añade rectas de
regresión lineal sin intervalo de confianza.
- facet_wrap(~ Zona, ncol = 2) crea 4 paneles (uno por zona
Norte, Sur, Este, Oeste).
- Resto igual que anterior.
En Estadística aplicada:
- Análisis de regresión múltiple visual: muestra cómo
la relación humedad-rendimiento cambia según la textura y la zona
geográfica.
- Las pendientes de las rectas indican el efecto marginal de la humedad
sobre el rendimiento.
- Las facetas permiten detectar interacciones (ej: en
zona Norte el efecto de la humedad puede ser diferente que en
Sur).
- Útil para **agricultura de precisión ```