1. Introducción

Este es el tercer cuaderno de R Markdown para el curso de Geomática Básica. En él se ilustra cómo obtener estadísticas multianuales de un grupo determinado de cultivos agrícolas en el departamento de Vichada. Como fuente principal de información se utilizarán las Evaluaciones Agropecuarias Municipales (EVA), una base de datos sobre la actividad agrícola en Colombia, publicada por la Unidad de Planificación Rural Agropecuaria (UPRA).

2. Configuración

En este paso instalaremos y cargaremos las librerías de R necesarias para el procesamiento, análisis y visualización de los datos.

# Ejecutar las siguientes líneas desde la consola:
# install.packages("dplyr")
# install.packages("readxl")
# install.packages("sf")
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
library(dplyr)
library(readr)
library(ggplot2)

3. Descarga de la base de datos multianual EVA para Vichada

Ingresa a https://www.datos.gov.co/Agricultura-y-Desarrollo-Rural/Evaluaciones-Agropecuarias-Municipales-EVA/2pnw-mmge/data para encontrar la base de datos.

En el sitio web (datos.gov.co), visualiza la información y aplica un filtro para obtener únicamente los registros correspondientes al departamento de Vichada. Posteriormente, exporta los datos en formato CSV.

Ahora, dirígete a la carpeta de Descargas de tu computador y localiza el archivo Evaluaciones_Agropecuarias_Municipales_EVA.csv. Trasládalo a tu directorio de trabajo en RStudio.

4. Lectura de la base de datos EVA

list.files(".", pattern = "csv")
## [1] "Evaluaciones_Agropecuarias_Municipales_EVA_20261027.csv"

Ahora procederemos a leer la base de datos de las Evaluaciones Agropecuarias Municipales (EVA) correspondiente al periodo 2007-2018 para el departamento de Vichada.

# Ajustar la ruta del archivo según la ubicación de los datos
(eva = read_csv("Evaluaciones_Agropecuarias_Municipales_EVA_20261027.csv",
                col_names = TRUE,
                show_col_types = FALSE))

Observa la tabla y confirma que contiene estadísticas agrícolas correspondientes a diferentes años. ¿Puedes identificar cuál es el periodo temporal que abarcan estos datos?

Es muy importante conocer los nombres exactos de las variables que reconoce el programa, ya que pueden ser diferentes de los que observamos visualmente en la tabla. Vamos a identificarlos:

names(eva)
##  [1] "CÓD. \nDEP."                                  
##  [2] "DEPARTAMENTO"                                 
##  [3] "CÓD. MUN."                                    
##  [4] "MUNICIPIO"                                    
##  [5] "GRUPO \nDE CULTIVO"                           
##  [6] "SUBGRUPO \nDE CULTIVO"                        
##  [7] "CULTIVO"                                      
##  [8] "DESAGREGACIÓN REGIONAL Y/O SISTEMA PRODUCTIVO"
##  [9] "AÑO"                                          
## [10] "PERIODO"                                      
## [11] "Área Sembrada\n(ha)"                          
## [12] "Área Cosechada\n(ha)"                         
## [13] "Producción\n(t)"                              
## [14] "Rendimiento\n(t/ha)"                          
## [15] "ESTADO FISICO PRODUCCION"                     
## [16] "NOMBRE \nCIENTIFICO"                          
## [17] "CICLO DE CULTIVO"

5. Limpieza de la base de datos EVA

Seleccionaremos algunos atributos relevantes para depurar el objeto eva:

# Revisar el resultado del último bloque de código y
# ajustar los nombres de los atributos según los datos propios
eva %>% dplyr::select('CÓD. MUN.':'ESTADO FISICO PRODUCCION') -> eva.tmp
eva.tmp

Revisa el resultado y verifica que únicamente se hayan seleccionado las columnas relevantes.

Ahora cambiaremos los nombres de algunas columnas que contienen espacios, saltos de línea o caracteres que dificultan su utilización en R.

# Asegúrate de utilizar los nombres de las columnas del objeto eva.tmp

eva.tmp %>% dplyr::rename(
  'Cod_Mun' = 'CÓD. MUN.',
  'Grupo' = 'GRUPO \nDE CULTIVO',
  'Subgrupo' = 'SUBGRUPO \nDE CULTIVO',
  'Year' = 'AÑO',
  'AreaSembrada' = 'Área Sembrada\n(ha)',
  'AreaCosechada' = 'Área Cosechada\n(ha)',
  'Produccion' = 'Producción\n(t)',
  'Rendimiento' = 'Rendimiento\n(t/ha)',
  'Sistema' = 'DESAGREGACIÓN REGIONAL Y/O SISTEMA PRODUCTIVO',
  'Estado' = 'ESTADO FISICO PRODUCCION'
) -> new_eva

Comprobemos el resultado:

new_eva

Revisa la tabla anterior y verifica que los atributos cuantitativos estén almacenados como datos numéricos y no como cadenas de texto.

6. Análisis de datos

Muchas tareas de análisis de datos pueden abordarse mediante el paradigma dividir-aplicar-combinar (split-apply-combine): dividir los datos en grupos, aplicar un análisis a cada grupo y, posteriormente, combinar los resultados.

La librería dplyr facilita este procedimiento mediante la función group_by(), que permite agrupar los datos según una o varias variables. Una vez agrupados, la función summarize() permite resumir cada grupo en una sola fila. Para ello, summarize() aplica una función de agregación o resumen a cada grupo.

6.1. Los cultivos más importantes entre 2007 y 2018

Por ejemplo, si queremos conocer la producción total por grupo de cultivos, escribimos:

new_eva %>%
  ##filter(Produccion > 0) %>%
  group_by(Grupo) %>%
  summarize(total_produccion = sum(Produccion)) %>%
  arrange(desc(total_produccion))

Observa que la producción total corresponde a la suma de la producción registrada para cada grupo de cultivos durante el periodo 2007-2018. En el departamento de Vichada, los dos grupos de cultivos con mayor producción acumulada fueron los cereales, con 360.043 toneladas, y las leguminosas, con 149.713 toneladas.

Para guardar la producción total en un objeto:

new_eva %>%
  group_by(Grupo) %>%
  summarize(total_produccion = sum(Produccion)) -> PT

Para filtrar los grupos de cultivos más importantes:

PT %>%
  filter(total_produccion > 100000) -> main.groups

Para conocer la producción total de los principales grupos de cultivos:

(value = sum(main.groups$total_produccion))
## [1] 632019

Para añadir un nuevo atributo con el porcentaje de participación en la producción total:

main.groups$percent = main.groups$total_produccion/value

Para crear un gráfico circular de la producción total de los principales grupos de cultivos:

library(ggplot2)

# Gráfico de barras
bp <- ggplot(main.groups, aes(x="", y=percent, fill=Grupo)) +
  geom_bar(width = 1, stat = "identity")

# Gráfico circular
pie <- bp + coord_polar("y", start=0)
pie

6.2. Municipios con mayor producción agrícola

Para identificar los municipios que lideraron la producción de cada grupo de cultivos durante el periodo 2007-2018:

new_eva %>%
  group_by(Grupo, MUNICIPIO) %>%
  summarize(total_prod = sum(Produccion, na.rm = TRUE)) %>%
  slice(which.max(total_prod)) %>%
  arrange(desc(total_prod))
## `summarise()` has regrouped the output.
## ℹ Summaries were computed grouped by Grupo and MUNICIPIO.
## ℹ Output is grouped by Grupo.
## ℹ Use `summarise(.groups = "drop_last")` to silence this message.
## ℹ Use `summarise(.by = c(Grupo, MUNICIPIO))` for per-operation grouping
##   (`?dplyr::dplyr_by`) instead.

Para guardar los resultados en un objeto:

new_eva %>%
  group_by(Grupo, MUNICIPIO) %>%
  summarize(total_prod = sum(Produccion, na.rm = TRUE)) %>%
  slice(which.max(total_prod)) -> leaders
## `summarise()` has regrouped the output.
## ℹ Summaries were computed grouped by Grupo and MUNICIPIO.
## ℹ Output is grouped by Grupo.
## ℹ Use `summarise(.groups = "drop_last")` to silence this message.
## ℹ Use `summarise(.by = c(Grupo, MUNICIPIO))` for per-operation grouping
##   (`?dplyr::dplyr_by`) instead.
leaders

Para filtrar los municipios más importantes desde el punto de vista agrícola:

main.leaders <- leaders %>%
  filter(total_prod > 20000)

main.leaders

Durante el periodo 2007-2018, Cumaribo concentró los mayores registros de producción acumulada en cereales, leguminosas y tubérculos y plátanos, mientras que Puerto Carreño destacó en frutales y La Primavera en oleaginosas. Estos resultados evidencian diferencias en la composición productiva de los municipios de Vichada.

A continuación, se representará gráficamente la producción acumulada de los municipios líderes en los grupos de cultivos seleccionados para Vichada durante el periodo 2007-2018. Para ello, se utilizará un gráfico de barras que permita comparar los registros de producción superiores a 20.000 toneladas.

# Gráfico de barras de los municipios líderes

p <- ggplot(data = main.leaders,
            aes(x = MUNICIPIO, y = total_prod)) +
  geom_bar(stat = "identity")

p

El gráfico muestra que Cumaribo concentra la mayor producción acumulada entre los registros seleccionados, debido principalmente a su participación en cereales, leguminosas y tubérculos y plátanos. Puerto Carreño y La Primavera presentan valores inferiores, asociados a los grupos de frutales y oleaginosas, respectivamente. Es importante señalar que esta comparación corresponde únicamente a los grupos seleccionados y no a la producción agrícola total de cada municipio.

Con el propósito de analizar la dinámica temporal de un cultivo representativo del departamento de Vichada, se examinará la producción agrícola registrada durante el periodo 2007-2018. Para seleccionar el cultivo de estudio, se identificarán inicialmente los cereales con mayor producción acumulada en Cumaribo, municipio que presenta el registro más alto dentro de este grupo.

# Identificar los principales cereales de Cumaribo

new_eva %>%
  filter(MUNICIPIO == "CUMARIBO",
         Grupo == "CEREALES") %>%
  group_by(CULTIVO) %>%
  summarize(
    Produccion_total = sum(Produccion, na.rm = TRUE)
  ) %>%
  arrange(desc(Produccion_total))

Los resultados muestran que el maíz fue el cereal con mayor producción acumulada en Cumaribo durante el periodo 2007-2018, con 326.641 toneladas, seguido del arroz con 25.079 toneladas. Debido a su participación predominante dentro del grupo de cereales, se seleccionará el maíz para analizar la evolución anual de su producción en este municipio.

# Seleccionar la producción de maíz en Cumaribo

new_eva %>%
  filter(MUNICIPIO == "CUMARIBO" & CULTIVO == "MAIZ") %>%
  group_by(Year, CULTIVO) %>%
  select(MUNICIPIO, CULTIVO, Produccion, Year) -> cumaribo_maiz
cumaribo_maiz

La selección de los registros correspondientes al cultivo de maíz en Cumaribo permitió identificar 26 observaciones distribuidas entre 2007 y 2018. Dado que algunos años presentan más de un registro de producción, es necesario agregar los valores correspondientes a cada año para obtener una serie temporal anual que permita analizar su evolución durante el periodo de estudio.

# Calcular la producción anual de maíz en Cumaribo

cumaribo_maiz_anual <- cumaribo_maiz %>%
  group_by(Year) %>%
  summarize(
    Produccion_anual = sum(Produccion, na.rm = TRUE),
    .groups = "drop"
  ) %>%
  arrange(Year)

cumaribo_maiz_anual
sum(cumaribo_maiz_anual$Produccion_anual)
## [1] 326641

Una vez agrupados los registros por año, se verificó que la producción acumulada de maíz en Cumaribo durante el periodo 2007-2018 corresponde a 326.641 toneladas, valor que coincide con el total obtenido anteriormente. A continuación, se representa gráficamente la evolución anual de la producción para identificar sus variaciones a lo largo del periodo estudiado.

# Evolución anual de la producción de maíz en Cumaribo

ggplot(cumaribo_maiz_anual,
       aes(x = Year, y = Produccion_anual)) +
  geom_line(color = "steelblue", linewidth = 1) +
  geom_point(color = "steelblue", size = 2) +
  labs(
    title = "Producción anual de maíz en Cumaribo (2007-2018)",
    x = "Año",
    y = "Producción (toneladas)"
  ) +
  scale_x_continuous(breaks = 2007:2018) +
  theme_minimal()

La producción de maíz en el municipio de Cumaribo presentó variaciones significativas durante el periodo 2007-2018. Entre 2007 y 2014 se registraron volúmenes relativamente bajos, con incrementos moderados. Sin embargo, en 2015 se observa un aumento pronunciado que representa el valor máximo de la serie, seguido de una producción todavía elevada en 2016.

A partir de 2017 se evidencia una reducción considerable, que continúa en 2018, aunque los volúmenes registrados permanecen por encima de los observados durante los primeros años del periodo. En conjunto, los resultados muestran una concentración importante de la producción acumulada en los años 2015 y 2016, dentro de un total de 326.641 toneladas registradas para el periodo analizado.

Estas variaciones permiten identificar cambios en la dinámica productiva del cultivo, aunque los datos disponibles no permiten establecer por sí solos sus causas. Para explicar el incremento y posterior disminución sería necesario examinar variables como el área sembrada, el área cosechada, los rendimientos y las condiciones productivas del municipio.

new_eva %>%
  filter(MUNICIPIO == "CUMARIBO",
         CULTIVO == "MAIZ") %>%
  group_by(Year) %>%
  summarize(
    Produccion = sum(Produccion, na.rm = TRUE),
    Area_cosechada = sum(AreaCosechada, na.rm = TRUE),
    .groups = "drop"
  ) %>%
  arrange(Year)

La comparación entre la producción y el área cosechada de maíz en Cumaribo permite examinar con mayor detalle el incremento registrado en 2015. Entre 2014 y 2015, la producción pasó de 2.877 a 136.805 toneladas, mientras que el área cosechada aumentó de 1.722 a 21.195 hectáreas. Asimismo, el rendimiento calculado pasó de aproximadamente 1,67 a 6,45 toneladas por hectárea. Estos resultados indican que el incremento de la producción estuvo acompañado tanto por una expansión de la superficie cosechada como por un aumento del rendimiento. No obstante, la magnitud de las variaciones hace necesario considerar posibles diferencias en el registro estadístico antes de atribuirlas exclusivamente a transformaciones productivas.

print(
  new_eva %>%
    filter(MUNICIPIO == "CUMARIBO",
           CULTIVO == "MAIZ") %>%
    group_by(Year) %>%
    summarize(
      Produccion = sum(Produccion, na.rm = TRUE),
      Area_cosechada = sum(AreaCosechada, na.rm = TRUE),
      .groups = "drop"
    ) %>%
    mutate(
      Rendimiento = round(Produccion / Area_cosechada, 2)
    ) %>%
    arrange(Year),
  n = Inf
)
## # A tibble: 12 × 4
##     Year Produccion Area_cosechada Rendimiento
##    <dbl>      <dbl>          <dbl>       <dbl>
##  1  2007         64             43        1.49
##  2  2008        284            237        1.2 
##  3  2009        190            199        0.95
##  4  2010       1655            572        2.89
##  5  2011       1600           1200        1.33
##  6  2012       1960           1400        1.4 
##  7  2013       2142           1700        1.26
##  8  2014       2877           1722        1.67
##  9  2015     136805          21195        6.45
## 10  2016     126258          21103        5.98
## 11  2017      36925           9750        3.79
## 12  2018      15881           4552        3.49

La producción de maíz en el municipio de Cumaribo presentó variaciones significativas durante el periodo 2007-2018. Entre 2007 y 2014 se registraron volúmenes relativamente bajos, inferiores a 3.000 toneladas anuales. Sin embargo, en 2015 la producción aumentó considerablemente hasta alcanzar 136.805 toneladas, el valor máximo del periodo, acompañado de una expansión del área cosechada de 1.722 a 21.195 hectáreas respecto al año anterior.

Este incremento también estuvo asociado con un aumento del rendimiento calculado, que pasó de 1,67 t/ha en 2014 a 6,45 t/ha en 2015. En 2016 la producción se mantuvo elevada, con 126.258 toneladas, aunque posteriormente disminuyó hasta alcanzar 36.925 toneladas en 2017 y 15.881 toneladas en 2018. Durante estos últimos años también se redujeron tanto el área cosechada como el rendimiento.

En conjunto, los resultados evidencian una concentración de la producción en 2015 y 2016, dentro de un total acumulado de 326.641 toneladas para el periodo analizado. No obstante, la magnitud de las variaciones observadas hace necesario considerar posibles cambios en la cobertura o el registro estadístico de las Evaluaciones Agropecuarias Municipales antes de atribuirlas exclusivamente a transformaciones en las condiciones productivas del municipio.

Para representar la evolución de la producción de maíz en Cumaribo durante el periodo 2007-2018, se elaborará un gráfico de barras a partir de los registros anuales consolidados. La producción se expresará en miles de toneladas para facilitar la lectura y comparación de los valores entre años.

# Gráfico de barras de la producción anual de maíz

g <- ggplot(
  data = cumaribo_maiz_anual,
  aes(x = factor(Year), y = Produccion_anual / 1000)
) +
  geom_bar(stat = "identity") +
  labs(
    x = "Año",
    y = "Producción de maíz (miles de toneladas)"
  )

Finalmente, se incorpora el título y la fuente de información al gráfico, con el propósito de presentar la evolución temporal de la producción de maíz en Cumaribo de manera clara y contextualizada.

# Añadir título y fuente al gráfico

g +
  ggtitle("Evolución de la producción de maíz en Cumaribo (2007-2018)") +
  labs(
    caption = "Fuente: Evaluaciones Agropecuarias Municipales (EVA), UPRA."
  ) +
  theme(
    plot.title = element_text(hjust = 0.5),
    axis.text.x = element_text(angle = 45, hjust = 1)
  )

El gráfico muestra la evolución de la producción de maíz en el municipio de Cumaribo durante el periodo 2007-2018. Entre 2007 y 2014, la producción se mantuvo relativamente baja, con registros anuales inferiores a 3.000 toneladas. Sin embargo, en 2015 se presentó un incremento considerable, alcanzando 136.805 toneladas, el valor más alto del periodo, seguido de 126.258 toneladas en 2016. Posteriormente, la producción disminuyó hasta alcanzar 36.925 toneladas en 2017 y 15.881 toneladas en 2018.

Este comportamiento estuvo acompañado por cambios importantes en el área cosechada y el rendimiento del cultivo. Entre 2014 y 2015, el área cosechada pasó de 1.722 a 21.195 hectáreas, mientras que el rendimiento calculado aumentó de 1,67 a 6,45 toneladas por hectárea. Esto indica que el incremento de la producción estuvo asociado tanto con la expansión de la superficie cosechada como con una mayor producción por unidad de área. No obstante, la magnitud de estas variaciones hace necesario interpretar los resultados con cautela, considerando posibles cambios en la cobertura o el registro de la información estadística.

7. Bibliografía

Lizárraga, I. (2022). Understanding dynamic productivity of crops. Disponible en: https://rpubs.com/ials2un/production_dyn_v1

Unidad de Planificación Rural Agropecuaria (UPRA). Evaluaciones Agropecuarias Municipales (EVA). Base de datos de producción agrícola municipal, departamento de Vichada, periodo 2007-2018.

sessionInfo()
## R version 4.6.1 (2026-06-24)
## Platform: aarch64-apple-darwin23
## Running under: macOS Tahoe 26.5.1
## 
## Matrix products: default
## BLAS:   /Library/Frameworks/R.framework/Versions/4.6/Resources/lib/libRblas.0.dylib 
## LAPACK: /Library/Frameworks/R.framework/Versions/4.6/Resources/lib/libRlapack.dylib;  LAPACK version 3.12.1
## 
## locale:
## [1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
## 
## time zone: America/Bogota
## tzcode source: internal
## 
## attached base packages:
## [1] stats     graphics  grDevices utils     datasets  methods   base     
## 
## other attached packages:
##  [1] lubridate_1.9.5 forcats_1.0.1   stringr_1.6.0   dplyr_1.2.1    
##  [5] purrr_1.2.2     readr_2.2.0     tidyr_1.3.2     tibble_3.3.1   
##  [9] ggplot2_4.0.3   tidyverse_2.0.0
## 
## loaded via a namespace (and not attached):
##  [1] bit_4.6.0          gtable_0.3.6       jsonlite_2.0.0     crayon_1.5.3      
##  [5] compiler_4.6.1     tidyselect_1.2.1   parallel_4.6.1     jquerylib_0.1.4   
##  [9] scales_1.4.0       yaml_2.3.12        fastmap_1.2.0      R6_2.6.1          
## [13] labeling_0.4.3     generics_0.1.4     knitr_1.52         bslib_0.12.0      
## [17] pillar_1.11.1      RColorBrewer_1.1-3 tzdb_0.5.0         rlang_1.3.0       
## [21] stringi_1.8.9      cachem_1.1.0       xfun_0.62          sass_0.4.10       
## [25] S7_0.2.2           bit64_4.8.6        otel_0.2.0         timechange_0.4.0  
## [29] cli_3.6.6          withr_3.0.3        magrittr_2.0.5     digest_0.6.39     
## [33] grid_4.6.1         vroom_1.7.1        rstudioapi_0.19.0  hms_1.1.4         
## [37] lifecycle_1.0.5    vctrs_0.7.3        evaluate_1.0.5     glue_1.8.1        
## [41] farver_2.1.2       rmarkdown_2.32     tools_4.6.1        pkgconfig_2.0.3   
## [45] htmltools_0.5.9

```