# 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
# 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! Vamos a desglosar cada línea del código R, explicando:

  1. Qué hace en R (sintaxis, funciones, paquetes).
  2. Qué significa en estadística aplicada a la ingeniería agrícola (interpretación agronómica, utilidad, contexto).

📦 Instalación y carga de paquetes

# install.packages("tidyverse")
library(tidyverse)

set.seed(42)

🌱 Simulación de datos agrícolas

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)

print(head(df_lotes_r))

📊 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)

📦 2. Comparación visual de grupos (boxplots)

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

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")

Resumen final (estadístico + agrícola)

Código R Función en R Significado en ingeniería agrícola
tidyverse Manipulación y visualización Estandariza el análisis de datos de campo
set.seed Reproducibilidad Permite repetir simulaciones de rendimiento
tibble + sample Generación de datos Simula lotes con texturas y zonas realistas
mutate + case_when Creación de variables derivadas Modela humedad base y rendimiento teórico
group_by + summarise Estadísticos agrupados Compara medias por tipo de suelo
geom_boxplot Visualización de dispersión Detecta diferencias de rendimiento entre texturas
geom_point + geom_smooth + facet_wrap Regresión por grupos y facetas Evalúa interacción humedad-zona-textura para manejo localizado

Este flujo es típico en agricultura de precisión, zonificación de lotes y calibración de modelos de riego.