Introducción

En el campo de la investigación agropecuaria, la caracterización y el análisis de datos desempeñan un papel fundamental para la comprensión y mejora de los procesos relacionados con la producción agrícola y ganadera. En este contexto, las Evaluaciones Agropecuarias Municipales (EVA) representan una importante fuente de información confiable sobre la oferta productiva agropecuaria de los municipios del país que permite entender y evaluar diversos aspecto de estas actividades. Estas evaluaciones son realizadas por la Unidad de Planificación Rural Agropecuaria (UPRA) y disponen de datos detallados sobre diferentes grupos de cultivos, condiciones de suelo y estado físico, rendimiento y otros factores relevantes que influyen en la productividad y calidad de los cultivos.

El presente trabajo tiene como objetivo principal caracterizar los datos de las EVA, enfocándose en analizar y comprender la información recopilada sobre el grupo de cultivo frutales de los departamentos Valle del Cauca, Santander, Huila, Cundinamarca y Antioquia con el fin de identificar patrones y relaciones entre variables relevantes. Además, de la evaluación de calidad de los datos para la correcta toma de decisiones en el ámbito agropecuario a nivel municipal. Para cumplir con el objetivo se seguirá una metodología divida en dos etapas generales: Preparación de la base de datos y el Procesamiento de los datos.

Objetivo general

Objetivos específicos

Metodología y Resultados

Preparación de la data

  1. Se inició la preparación filtrando los datos de las variables Grupo y Departamento, de las cuales se tomaron unicamente los registros correspondientes al grupo Frutales y a los departamentos Valle del Cauca, Santander, Huila, Cundinamarca y Antioquia. Para ello se hizó uso de la función filter del paquete dplyr. Esta función se utiliza para hacer una selección de filas que cumplan con ciertas condiciones.
#Filtrar datos: por Grupo y Departamentos

frutales_df <- eva_df %>% filter(GRUPO..DE.CULTIVO == "FRUTALES") %>% filter(DEPARTAMENTO %in% c("Valle del Cauca","Santander","Huila","Cundinamarca","Antioquia"))
  1. Posteriormente, haciendo uso de la función colnames del paquete base de R, se redefinieron los nombres de cada variable de la base de datos.
#Renombrar las variables

colnames(frutales_df) <- 
  c("id","departamento","municipio","grupo","cultivo","año","area_sembrada", "area_cosechada", "produccion", "rendimiento","estado_fisico", "ciclo_cultivo")
  1. Finalmente, se definieron como factor a las variables de tipo categóricas utilizando la función transform del paquete base de R. Esta función permite modificar variables existentes o crear nuevas en una base de datos.
#Definir las variables categóricas como factor

frutales_df <- transform(frutales_df,
                                 departamento=factor(departamento),
                                 municipio=factor(municipio),
                                 grupo=factor(grupo),
                                 cultivo=factor(cultivo),
                                 estado_fisico=factor(estado_fisico),
                                 ciclo_cultivo=factor(ciclo_cultivo)
                                 )

Procesamiento de datos

  1. Distribución de la muestra.

Inicialmente, se realizó un gráfico de barras para visualizar la distribución de la muestra por departamentos (p1) haciendo uso de la función ggplot del paquete ggplot2. Esta función es una herramienta que permite la creación de gráficos estadísticos y visualización de datos.

#Distribución de la muestra Departamento

p1 <- ggplot(data = frutales_df,
       m = aes(y = departamento)) +
  geom_bar(color="black", fill="#28B463") +
  labs(x = "Distribución", y = "Departamentos")+
  theme_bw()

Seguidamente, se generó de nuevo un gráfico de barras para la distribución pero esta vez por año (p2).

#Distribución de la muestra Año

p2 <- ggplot(data = frutales_df,
       m = aes(x = factor(año))) +
  geom_bar(color="black", fill="#3498DB") +
  labs(y = "Distribución", x = "Años")+
  theme_bw()

Con los gráficos anteriores, p1 y p2, se generó un tablero gráfico para un mejor análisis y comprensión utilizando la función grid.arrange del paquete gridExtra. Esta función se utiliza para organizar múltiples gráficos en una misma ventana gráfica.

#Tablero gráfico 1

grid.arrange(p1, p2, ncol = 2)

El gráfico p1 muestra la cantidad de registros en la base de datos por cada departamentos. Se puede observar que el departamento del Huila cuenta con la mayor cantidad de observaciones, con aproximadamente unos 4600 registros. Por otro lado, el gráfico p2 también muestra la cantidad de registros en la base de datos, pero esta vez con respecto a los años de registro. En este caso, se observa que el año con menor cantidad de registros es el 2006 y el año con mayor cantidad de registros es el 2017.

  1. Análisis del comportamiento del rendimiento del cultivo por departamento.

Para esta fase, se realizó un boxplot (p3) del rendimiento del cultivo de grupo frutales. El boxplot, conocido también como diagrama de caja y bigotes, es un gráfico que representa la dispersión y forma de la distribución de un conjunto de datos numéricos.

#Gráfico del rendimiento del cultivo por departamento (sin filtra)

 p3 <- ggplot(frutales_df, 
              m = aes(x = departamento, y = rendimiento, fill = grupo)) +
  geom_boxplot() +
  labs(title = "Rendimiento del cultivo por departamento (sin segmentar)",
       x = "Departamento",
       y = "Rendimiento") +
  theme_bw()
p3
## Warning: Removed 929 rows containing non-finite outside the scale range
## (`stat_boxplot()`).

Observando el gráfico p3 se evidenciaron una serie de datos atípicos, los cuales se encuentra separados del resto de puntos y muy por encima del final de los bigotes del gráfico. Por ello y para una correcta descripción de la variable se optó por realizar una segmentación de los datos, filtrando los registros de la variable rendimiento tomando como punto de corte los valores menores a 50. Se hizo uso de la función subset. Esta es una función utilizada para seleccionar subconjuntos de datos que cumplen condiciones específicas.

#Filtrar de datos 
frutales_seg <- subset(frutales_df,
                       rendimiento < 50)

Posteriormente, se realizó un nuevo boxplot (p4) con los datos ya filtrados.

#Gráfico del rendimiento del cultivo por departamento (filtrados)

p4 <- ggplot(frutales_seg, 
              m = aes(x = departamento, y = rendimiento, fill = grupo, color =)) +
  geom_boxplot() +
  labs(title = "Rendimiento del cultivo por departamento (segmentado)",
       x = "Departamento",
       y = "Rendimiento") +
  theme_bw() 

Por último, se realizó un tablero gráfico para hacer una comparación entre los gráficos p3 y p4.

#Tablero gráfico 2

grid.arrange(p3, p4, ncol = 2)
## Warning: Removed 929 rows containing non-finite outside the scale range
## (`stat_boxplot()`).

  • ¿Qué sucede cuando se omiten los valores extremos?

El omitir los valores extremos de la variable rendimiento se refleja principalmente en la representación visual de la distribución de los datos. Se logra observar una reducción del rango intercuartílico (IQR), debido a que ya no se encuentran valores fuera de este. Además, resulta una visualización enfocada más en la distribución central de los datos y no enfatizada en la dispersión total.

  • ¿Qué se puede inferir del rendimiento del cultivo respecto a los departamentos?

Basándose en el gráfico p4, se puede observar que, exceptuando a Cundinamarca, el resto de los departamentos presentan una mediana no centralizada, lo que puede indicar una distribución sesgada de los datos. Por otro lado, el rendimiento en Cundinamarca muestra una distribución aproximadamente normal.

En consecuencia, se puede inferir que los cultivos del departamento de Cundinamarca podrían tener un rendimiento más estable y predecible en comparación de los otros departamentos. Esto sugiere que los demás departamentos podrían haber experimentando efectos de factores como, por ejemplo, condiciones climáticas, que afectaron el rendimiento de los cultivos.

  1. Análisis del Rendimiento de Frutales por Departamento (años 2006 y 2018).

Se inició con el acceso a la base de datos GADM mediante la función getData de la librería raster. Esta función facilita la importación de bases de datos alojadas en la web.

GADM es una base de datos globales de límites administrativos y proporciona información sobre límites políticos y administrativos de diferentes países, regiones y localidades en en todo el mundo. Usa usa serie de argumentos para acceder a información especifica. En este caso se accedió al level 1 para obtener la información para los departamentos.

Luego, se realizó la conversión de los registros a tipo sf. Estos son un tipo de objeto que contienen información espacial y atributiva usados para la representación de datos geoespaciales en formas geométricas simples, como puntos, líneas y polígonos.

# Accceder a los mapas de Colombia
col_depto <- getData(name = "GADM", country = "COL", level = 1) #Datos para departamentos
## Warning in getData(name = "GADM", country = "COL", level = 1): getData will be removed in a future version of raster
## . Please use the geodata package instead
# Conversion a tipo sf
depto_sf <- st_as_sf(col_depto)

Posteriormente, usando la función filter se seleccionaron los datos correspondientes a cada periodo, y luego se empleó la función mean para calcular el promedio del rendimiento del año 2006 de cada departamento de los cultivos frutales (p5).

# Mapa del rendimiento por departamento del año 2006

rendimiento2006 <- frutales_df %>% 
  filter(año == 2006) %>% 
  group_by(departamento) %>%
  summarise(promedio=mean(rendimiento,na.rm = TRUE)) %>%
  ungroup()

map2006_rendimiento <- 
  depto_sf %>% 
  rename(departamento = NAME_1) %>% 
  left_join(y = rendimiento2006, by = "departamento") %>%
  ggplot(mapping = aes(fill = promedio)) +
  geom_sf(color = "white") +
  scale_fill_viridis_c(trans = "log10",
                       breaks = trans_breaks(trans = "log10",
                                             inv = function(x) round(10 ^ x, digits = 1))) + 
  geom_sf_text(aes_string(label = "departamento"), 
               color = "black", 
               size = 1.5, 
               family = "Arial",
               hjust = 0.5, 
               vjust = 0.5)+
  labs(x = "Longitud",
       y = "Latitud",
       title ="Rendimiento Promedio (2006)")+
  annotation_scale()+
  annotation_north_arrow(location='tr',
                         height = unit(0.8, "cm"),
                         width = unit(0.8, "cm"))+
  theme_void()
## Warning: `aes_string()` was deprecated in ggplot2 3.0.0.
## ℹ Please use tidy evaluation idioms with `aes()`.
## ℹ See also `vignette("ggplot2-in-packages")` for more information.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.

De igual manera que el anterior, se utilizó la función filter para seleccionaron los datos correspondientes a cada periodo, y se empleó la función mean para calcular el promedio del rendimiento pero para el año 2018 de cada departamento de los cultivos frutales (p6).

# Mapa del rendimiento por departamento del año 2018
rendimiento2018 <- frutales_df %>% filter(año == 2018) %>% group_by(departamento) %>% summarise(promedio1=mean(rendimiento,na.rm = TRUE)) %>% ungroup()

map2018_rendimiento <- 
  depto_sf %>% 
  rename(departamento = NAME_1) %>% 
  left_join(y = rendimiento2018, by = "departamento") %>%
  ggplot(mapping = aes(fill = promedio1)) +
  geom_sf(color = "white") +
  scale_fill_viridis_c(trans = "log10",
                       breaks = trans_breaks(trans = "log10",
                                             inv = function(x) round(10 ^ x, digits = 1))) +
  geom_sf_text(aes_string(label = "departamento"), 
               color = "black", 
               size = 1.5, 
               family = "Arial",
               hjust = 0.5, 
               vjust = 0.5)+
  
  labs(x = "Longitud",
       y = "Latitud",
       title ="Rendimiento Promedio (2018)")+
  
  annotation_scale()+
  annotation_north_arrow(location='tr',
                         height = unit(0.8, "cm"),
                         width = unit(0.8, "cm"))+
  theme_void()

Finalmente, se realizó un tablero gráfico para comparar ambos mapas (p5 y p6).

# Tablero gráfico 3

Mapa_Combinado_Departamento <- map2006_rendimiento + map2018_rendimiento
plot(Mapa_Combinado_Departamento)
## Warning in st_point_on_surface.sfc(sf::st_zm(x)): st_point_on_surface may not
## give correct results for longitude/latitude data

## Warning in st_point_on_surface.sfc(sf::st_zm(x)): st_point_on_surface may not
## give correct results for longitude/latitude data
## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, :
## font family not found in Windows font database

## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, :
## font family not found in Windows font database

  • ¿Qué se puede inferir de los mapas?

Al observar el gráfico resultante, se evidencia una tendencia a la baja en el rendimiento del grupo de frutales a lo largo de los años, con una disminución en el promedio por departamento desde 2006 hasta 2018. Además, destaca que el departamento del Valle del Cauca muestra consistentemente el mayor promedio de rendimiento. Esto puede atribuirse a las condiciones geográficas y climáticas favorables de esta región para el cultivo de frutales.

  1. Análisis del Rendimiento de Frutales por Municipio en el Departamento del Valle del Cauca.

Se inició cargando el mapa del departamento del Valle del Cauca, dividido por municipios. Esto igualmente se realizó utilizando la función getData e importando la base de datos GADM. Posteriormente, se convirtió a formato sf para facilitar su manipulación. Además, se modificaron los nombres de los municipios para que estuvieran en minúsculas, sin caracteres especiales y sin espacios en blanco.

# Acceder a los datos por municipios del departamento Valle del Cauca.

col_muni <- getData(name = "GADM", country = "COL", level = 2)  #Datos para municipios
## Warning in getData(name = "GADM", country = "COL", level = 2): getData will be removed in a future version of raster
## . Please use the geodata package instead
Valle_del_Cauca <- col_muni[col_muni$NAME_1 == "Valle del Cauca", ]

# Conversion a tipo sf
mun_sf <- st_as_sf(Valle_del_Cauca)
mun_sf$NAME_2 <- tolower(mun_sf$NAME_2)
mun_sf$NAME_2 <- gsub("[^[:alnum:]]", "", mun_sf$NAME_2)
mun_sf$NAME_2 <- trimws(mun_sf$NAME_2)

Seguidamente, se realizó un cálculo del rendimiento promedio por municipio para el año 2006. Se empleó la función filter para seleccionar los datos correspondientes al periodo, y la función mean para calcular el promedio. Los nombres de los municipios fueron modificados para que coincidieran con los nombres de la base de datos sobre el mapa.

Luego, se creó el mapa del departamento Valle del Cauca para representar los registros del rendimiento del año 2006 del grupo de cultivos frutales (p7). Esto se logró utilizando ggplot junto con left_join para combinar los datos geoespaciales y los datos de rendimiento

# Mapa del rendimiento por municipios del año 2006

rendimiento2006_mun <- frutales_df %>% filter (departamento == "Valle del Cauca") %>% filter(año == 2006) %>% group_by(municipio) %>% summarise(promediomun=mean(rendimiento,na.rm = TRUE)) %>% ungroup()

rendimiento2006_mun$municipio <- tolower(rendimiento2006_mun$municipio)
rendimiento2006_mun$municipio <- gsub("[^[:alnum:]]", "", rendimiento2006_mun$municipio)
rendimiento2006_mun$municipio <- trimws(rendimiento2006_mun$municipio)

map2006_rendimiento_Mun <- 
  mun_sf %>% 
  rename(municipio = NAME_2) %>% 
  left_join(y = rendimiento2006_mun, by = "municipio") %>% 
  ggplot(mapping = aes(fill = promediomun)) +
  geom_sf(color = "white") +
  scale_fill_viridis_c(name = "Rendimiento Promedio 2006",
                       trans = "log10",
                       breaks = trans_breaks(trans = "log10",
                                             inv = function(x) round(10 ^ x, digits = 1))) +
  theme_void()

Posteriormente, se siguió el mismo procedimiento anterior para crear un segundo mapa del departamento Valle del Cauca para representar nuevamente los registros del rendimiento pero para el año 2018 (p8).

# Mapa del rendimiento por municipio del año 2018
rendimiento2018_mun <- frutales_df %>% filter(año == 2018) %>% group_by(municipio) %>% summarise(promediomun1=mean(rendimiento,na.rm = TRUE)) %>% ungroup()

rendimiento2018_mun$municipio <- tolower(rendimiento2018_mun$municipio)
rendimiento2018_mun$municipio <- gsub("[^[:alnum:]]", "", rendimiento2018_mun$municipio)
rendimiento2018_mun$municipio <- trimws(rendimiento2018_mun$municipio)

map2018_rendimiento_Mun <- 
  mun_sf %>% 
  rename(municipio = NAME_2) %>% 
  left_join(y = rendimiento2018_mun, by = "municipio") %>% 
  ggplot(mapping = aes(fill = promediomun1)) +
  geom_sf(color = "white") +
  scale_fill_viridis_c(name = "Rendimiento Promedio 2018",
                       trans = "log10",
                       breaks = trans_breaks(trans = "log10",
                                             inv = function(x) round(10 ^ x, digits = 1))) +
  theme_void()+
  coord_sf(expand = TRUE)

Por último, se realizó un tablero gráfico para la comparación de los mapas p7 y p8.

# Tablero gráfico 4

Mapa_Combinado_Municipio <- map2006_rendimiento_Mun + map2018_rendimiento_Mun
plot(Mapa_Combinado_Municipio)

  • ¿Qué se puede inferir de los mapas?

Al analizar el gráfico resultante, se confirma la tendencia previamente observada de disminución en el rendimiento promedio, reflejada también a nivel municipal. Se destaca que, en 2006, el municipio de Roldanillo presentaba el promedio más alto, mientras que, en 2018, La Cumbre fue el municipio con el promedio más elevado. Estos hallazgos pueden proporcionar observaciones valiosas para la planificación y gestión agrícola en el departamento del Valle del Cauca.

  1. Representación de la tendencia del rendimiento promedio del grupo frutales por año para cada departamento.

Inicialmente, haciendo uso de de la función group.by del paquete dplyr se agruparon los datos por departamento y año, para luego, calcular el promedio del rendimiento del cultivo frutales para cada combinación única de departamento y año.

# Cálculo de los promedios para el rendimiento.

promedioRendimiento <- frutales_df %>%
                      group_by(departamento, año) %>%
                      summarise(promedio=mean(rendimiento,na.rm = TRUE), .groups = 'drop')

Para la visualización de los promedios se optó por la creación de un gráfico de líneas (p9) usando ggplot2.

ggplot(data = promedioRendimiento,
       mapping = aes(x= año, y = promedio,color=departamento)) +
  geom_line() +
  labs(x = "Año",
       y = "Rendimiento del cultivo Frutales",
       title="Rendimiento por año")+
  theme_bw()+
  scale_x_continuous(breaks = unique(promedioRendimiento$año)) 

  • ¿Qué se puede inferir del gráfico?

La visualización en el gráfico de líneas revela claramente que el departamento con el mejor rendimiento en el grupo de frutales a lo largo de los años es el Valle del Cauca, mientras que el que muestra el rendimiento más bajo es Huila. Es notable que todos los departamentos experimentaron un pico de decaída en el rendimiento en el año 2007. Este análisis comparativo proporciona una perspectiva valiosa sobre las variaciones en el rendimiento de frutales a nivel departamental y a lo largo del tiempo.

  1. Resumen de Indicadores Descriptivos del Rendimiento por Departamento.

Se utilizó la función table1 para generar un resumen de indicadores descriptivos del rendimiento por departamento. Esta función permitió organizar la información en una tabla que proporciona una visión general de las estadísticas clave del rendimiento en cada departamento.

table1(data = frutales_df, ~ rendimiento |departamento, transpose = TRUE)
rendimiento
Antioquia
(N=4358)
:
Mean (SD): 14.0 (12.9)
Median [Min, Max]: 10.0 [0.0300, 148]
Missing: 335 (7.7%)
Cundinamarca
(N=3337)
:
Mean (SD): 11.4 (9.78)
Median [Min, Max]: 9.00 [0.240, 98.0]
Missing: 170 (5.1%)
Huila
(N=5685)
:
Mean (SD): 10.1 (4.11)
Median [Min, Max]: 9.00 [0.200, 30.0]
Missing: 200 (3.5%)
Santander
(N=3312)
:
Mean (SD): 12.9 (10.5)
Median [Min, Max]: 10.0 [0.150, 115]
Missing: 135 (4.1%)
Valle del Cauca
(N=4615)
:
Mean (SD): 16.2 (16.4)
Median [Min, Max]: 10.1 [0.0500, 180]
Missing: 89 (1.9%)
Overall
(N=21307)
:
Mean (SD): 12.9 (11.6)
Median [Min, Max]: 10.0 [0.0300, 180]
Missing: 929 (4.4%)

Esta tabla resulta ser una herramienta útil para comprender la distribución y variabilidad del rendimiento entre los diferentes departamentos, lo que facilita la identificación de tendencias y la toma de decisiones informadas en el ámbito agropecuario.