Base de datos e Indicadores de Comercio Exterior

Librerías a utilizar

library(readr)
library(dplyr)
library(tidyr)
library(kableExtra)

1: Carga y procesamiento de datos

Importaciones

Procesamiento de los registros de compras internacionales

# Directorio de trabajo para importaciones
setwd("C:/Users/MINEDUCYT/Desktop/Practicas de métodos/Comercio exterior/Importaciones")

# Lectura masiva de archivos delimitados por pipe (|)
archivos_importar <- list.files()

lista_importacion <- lapply(
  archivos_importar,
  FUN = read_delim,
  delim = "|",
  col_names = c("pais", "sac", "anio", "mes", "valor_cif", "kilogramos"),
  col_types = cols(
    pais = "c",
    sac = "c",
    anio = "d",
    mes = "d",
    valor_cif = "d",
    kilogramos = "d"
  ),
  skip = 1
)

# Ensamblar dataframes en un único objeto
data_importaciones <- bind_rows(lista_importacion)

# Visualización de muestra
data_importaciones %>% 
  head() %>% 
  kable(
    format = "html", 
    caption = "El Salvador: Base Muestra de Importaciones",
    align = "c"
  ) %>% 
  kable_styling(
    bootstrap_options = c("striped", "hover", "condensed", "responsive"), 
    full_width = TRUE, 
    position = "center"
  ) %>% 
  add_footnote(label = "Fuente: Elaboración propia con base en datos del Banco Central de Reserva (BCR)", notation = "symbol")
El Salvador: Base Muestra de Importaciones
pais sac anio mes valor_cif kilogramos
GROENLANDIA 3814001000 2022 5 3795.41 633.22
CANADA 0511100000 2022 4 17565.11 38.00
CANADA 0712209000 2022 3 512.59 118.73
CANADA 0712209000 2022 6 499.48 92.13
CANADA 0712909000 2022 3 2231.66 729.32
CANADA 0713200000 2022 3 1522.28 1881.60
* Fuente: Elaboración propia con base en datos del Banco Central de Reserva (BCR)

Exportaciones

Procesamiento de los registros de ventas internacionales

# Directorio de trabajo para exportaciones
setwd("C:/Users/MINEDUCYT/Desktop/Practicas de métodos/Comercio exterior/Exportaciones")

# Lectura masiva de archivos
archivos_exportar <- list.files()

lista_exportacion <- lapply(
  archivos_exportar,
  FUN = read_delim,
  delim = "|",
  col_names = c("pais", "sac", "anio", "mes", "valor_fob", "kilogramos"),
  col_types = cols(
    pais = "c",
    sac = "c",
    anio = "d",
    mes = "d",
    valor_fob = "d",
    kilogramos = "d"
  ),
  skip = 1
)

# Ensamblar dataframes en un único objeto
data_exportaciones <- bind_rows(lista_exportacion)

# Visualización de muestra
data_exportaciones %>% 
  head() %>% 
  kable(
    format = "html", 
    caption = "El Salvador: Base Muestra de Exportaciones", 
    align = "c"
  ) %>% 
  kable_styling(
    bootstrap_options = c("striped", "hover", "condensed", "responsive"), 
    full_width = TRUE, 
    position = "center"
  ) %>% 
  add_footnote(label = "Fuente: Elaboración propia con base en datos del Banco Central de Reserva (BCR)", notation = "symbol")
El Salvador: Base Muestra de Exportaciones
pais sac anio mes valor_fob kilogramos
CANADA 0106190000 2022 6 600.00 9.98
CANADA 0106200000 2022 6 4620.00 10.00
CANADA 0602100000 2022 1 1055690.77 16511.64
CANADA 0602100000 2022 2 819959.20 12047.40
CANADA 0602100000 2022 3 253333.70 2928.69
CANADA 0602100000 2022 4 49719.91 639.52
* Fuente: Elaboración propia con base en datos del Banco Central de Reserva (BCR)

2: Integración de la base del comercio exterior

Consolidación de las bases de Importaciones (CIF) y Exportaciones (FOB) mediante una unión completa (full_join) y tratamiento de valores nulos.

# Unir flujos comerciales por llaves principales
data_comercio_exterior <- data_importaciones %>% 
  full_join(
    data_exportaciones,
    by = c("pais", "sac", "anio", "mes"),
    suffix = c("_importaciones", "_exportaciones")
  ) %>% 
  replace_na(
    list(
      valor_cif = 0,
      valor_fob = 0,
      kilogramos_importaciones = 0,
      kilogramos_exportaciones = 0
    )
  ) %>% 
  arrange(pais, anio, mes, sac)

# Visualización del consolidado
data_comercio_exterior %>% 
  head() %>% 
  kable(
    format = "html",
    caption = "Base Consolidada de Comercio Exterior de El Salvador",
    align = "c"
  ) %>% 
  kable_styling(
    bootstrap_options = c("striped", "hover", "condensed", "responsive"), 
    full_width = TRUE, 
    position = "center"
  ) %>% 
  add_footnote(label = "Fuente: Elaboración propia con base en datos del BCR", notation = "symbol")
Base Consolidada de Comercio Exterior de El Salvador
pais sac anio mes valor_cif kilogramos_importaciones valor_fob kilogramos_exportaciones
AFGANISTAN 8708990000 2022 2 220.50 0.29 0 0
AFGANISTAN 8471900000 2022 5 665.90 4.00 0 0
AFGANISTAN 5702310000 2022 6 913.74 22.02 0 0
AFGANISTAN 5702502000 2022 6 566.35 11.36 0 0
AFGANISTAN 6111200000 2022 8 213.69 1.56 0 0
AFGANISTAN 8536509000 2022 9 42.28 2.00 0 0
* Fuente: Elaboración propia con base en datos del BCR

3: Almacenamiento y recuperación de datos

# Guardar objeto en formato binario de R (.RData)
save(
  data_comercio_exterior, 
  file = "C:/Users/MINEDUCYT/Desktop/Practicas de métodos/data_comercio_exterior.RData"
)
# Carga directa del objeto de datos previamente procesado
load("C:/Users/MINEDUCYT/Desktop/Practicas de métodos/data_comercio_exterior.RData")

4: Carga de datos especializadas

Ejecución del script con las funciones desarrolladas por MSF. Carlos Ademir Pérez para el cálculo de indicadores internacionales:

# Carga de script de funciones
source(
  file = "C:/Users/MINEDUCYT/Desktop/Practicas de métodos/Comercio exterior/funciones_comercio_exterior.R",
  echo = TRUE,
  max.deparse.length = 100,
  encoding = "utf-8"
)
## 
## > options(scipen = 999)
## 
## > library(dplyr)
## 
## > library(readxl)
## 
## > library(stringr)
## 
## > load("C:/Users/MINEDUCYT/Desktop/Practicas de métodos/data_comercio_exterior.RData")
## 
## > nombre_archivo <- "C:/Users/MINEDUCYT/Desktop/Practicas de métodos/Comercio exterior/nombres_iso_p ..." ... [TRUNCATED] 
## 
## > nombres_iso_paises <- read_excel(nombre_archivo)
## 
## > nombres_iso_paises$nom_pais_esp <- toupper(nombres_iso_paises$nom_pais_esp)
## 
## > data_comercio_exterior <- data_comercio_exterior %>% 
## +     left_join(nombres_iso_paises, by = c(p .... [TRUNCATED] 
## 
## > herramientas_mostrar_paises <- function() {
## +     paises <- nombres_iso_paises %>% select(nom_pais .... [TRUNCATED] 
## 
## > herramientas_mostrar_regiones <- function() {
## +     nombres_iso_paises %>% group_by(region, cod_re .... [TRUNCATED] 
## 
## > herramientas_mostrar_paises_en_tabla <- function() {
## +     data_comercio_exterior %>% group_by(pai .... [TRUNCATED] 
## 
## > indicadores_IVCR_capitulo <- function(codigo_pais, 
## +     capitulo, anio) {
## +     codigo_pais <- e .... [TRUNCATED] 
## 
## > indicadores_IVCR_partida <- function(codigo_pais, 
## +     partida, anio) {
## +     codigo_pais <- enq .... [TRUNCATED] 
## 
## > indicadores_Balassa_capitulo <- function(codigo_pais, 
## +     capitulo, anio, normalizado = TRUE) { .... [TRUNCATED] 
## 
## > indicadores_Balassa_partida <- function(codigo_pais, 
## +     partida, anio, normalizado = TRUE) {
## + .... [TRUNCATED] 
## 
## > indicadores_IHH_Herfindahl_Hirschmann_anual_texto <- function(codigo_pais, 
## +     anio, normalizad .... [TRUNCATED] 
## 
## > indicadores_IHH_Herfindahl_Hirschmann_anual <- function(codigo_pais, 
## +     anio, normalizado = TR .... [TRUNCATED]

5: Ejemplos prácticos e indicadores comerciales

Demostración del uso de las funciones para explorar catálogos y calcular indicadores clave de competitividad en comercio exterior.

5.1: Consulta de Catálogos Geográficos

# Mostrar primeros países del catálogo
herramientas_mostrar_paises() %>% 
  head() %>% 
  kable(caption = "Catálogo de Países", align = "c") %>% 
  kable_material(html_font = "sans-serif")
Catálogo de Países
nom_pais_esp codigo_pais region cod_region region_intermedia cod_region_intermedia
AFGANISTAN 4 Asia 142 NA NA
ALBANIA 8 Europa 150 NA NA
ALEMANIA 276 Europa 150 NA NA
ANDORRA 20 Europa 150 NA NA
ANGOLA 24 África 2 África Central 17
ANGUILA (R.U.) 660 Américas 19 Caribe 29
# Mostrar regiones
herramientas_mostrar_regiones() %>% 
  head() %>% 
  kable(caption = "Catálogo de Regiones", align = "c") %>% 
  kable_material(html_font = "sans-serif")
## `summarise()` has regrouped the output.
## ℹ Summaries were computed grouped by region, cod_region, region_intermedia, and
##   cod_region_intermedia.
## ℹ Output is grouped by region, cod_region, and region_intermedia.
## ℹ Use `summarise(.groups = "drop_last")` to silence this message.
## ℹ Use `summarise(.by = c(region, cod_region, region_intermedia,
##   cod_region_intermedia))` for per-operation grouping (`?dplyr::dplyr_by`)
##   instead.
Catálogo de Regiones
region cod_region region_intermedia cod_region_intermedia # de Paises incluidos
Américas 19 Caribe 29 26
Américas 19 Centroamérica 13 8
Américas 19 Sudamerica 5 13
Américas 19 NA NA 5
Asia 142 NA NA 50
Europa 150 Islas Del Canal 830 1
# Mostrar catálogo general en formato tabla
herramientas_mostrar_paises_en_tabla() %>% 
  head() %>% 
  kable(caption = "Matriz Geográfica Completa", align = "c") %>% 
  kable_material(html_font = "sans-serif")
## `summarise()` has regrouped the output.
## ℹ Summaries were computed grouped by pais and anio.
## ℹ Output is grouped by pais.
## ℹ Use `summarise(.groups = "drop_last")` to silence this message.
## ℹ Use `summarise(.by = c(pais, anio))` for per-operation grouping
##   (`?dplyr::dplyr_by`) instead.
Matriz Geográfica Completa
pais anio # Transacciones
AFGANISTAN 2022 6
AFGANISTAN 2023 1
AFGANISTAN 2024 5
AFGANISTAN 2025 8
AFGANISTAN 2026 1
ALBANIA 2022 22

5.2: Cálculo del Índice de Ventaja Comparativa Revelada (IVCR)

Evaluación de la competitividad por capítulo arancelario:

# Cálculo de IVCR para el capítulo '01' (2022-2026)
Resultados_IVCR <- data.frame(
  "años" = 2022:2026,
  "IVCR" = sapply(
    X = 2022:2026, 
    FUN = indicadores_IVCR_capitulo, 
    codigo_pais = 840, 
    capitulo = "01"
  )
)

Resultados_IVCR %>% 
  kable(align = "c", caption = "Evolución del Índice IVCR (Capítulo 01)") %>% 
  kable_material(html_font = "sans-serif")
Evolución del Índice IVCR (Capítulo 01)
años IVCR
2022 -0.1519356
2023 -0.1973216
2024 -0.2803035
2025 -0.2512482
2026 -0.2419462

5.3: Cálculo del Índice de Balassa (IB)

Medición de la especialización comercial intra-producto:

# Cálculo de Índice de Balassa para el capítulo '01' (2023-2024)
Resultados_Balassa <- data.frame(
  "años" = 2023:2025,
  "IB" = sapply(
    X = 2023:2025, 
    FUN = indicadores_Balassa_capitulo, 
    codigo_pais = 840, 
    capitulo = "01"
  )
)

Resultados_Balassa %>% 
  kable(align = "c", caption = "Evolución del Índice de Balassa (Capítulo 01)") %>% 
  kable_material(html_font = "sans-serif")
Evolución del Índice de Balassa (Capítulo 01)
años IB
2023 0.4862753
2024 0.5094811
2025 0.3896520

6: Ranking de Exportaciones

6.1: Creamos los Ranking por Year

#Seleccionar Años
anios_ranking<-2022:2026
data_comercio_exterior %>% 
  filter(anio %in% anios_ranking) ->data_ranking

data_ranking %>% 
  group_by(anio,iso_3) %>% 
  summarise(total=sum(valor_fob)) %>% mutate(percent=round(prop.table(total)*100,2)) %>% 
  slice_max(n = 5,order_by = total) %>% 
  as.data.frame() %>% 
  group_by(anio) %>% 
  mutate(rank = row_number(),
         data=paste(iso_3,"|",percent,sep = "")) %>% 
  select(anio,data,rank) %>% as.data.frame() -> insumo_reporte
## `summarise()` has regrouped the output.
## ℹ Summaries were computed grouped by anio and iso_3.
## ℹ Output is grouped by anio.
## ℹ Use `summarise(.groups = "drop_last")` to silence this message.
## ℹ Use `summarise(.by = c(anio, iso_3))` for per-operation grouping
##   (`?dplyr::dplyr_by`) instead.
print(insumo_reporte)
##    anio      data rank
## 1  2022 USA|38.78    1
## 2  2022 GTM|17.05    2
## 3  2022 HND|16.65    3
## 4  2022  NIC|6.98    4
## 5  2022  CRI|4.27    5
## 6  2023  USA|35.6    1
## 7  2023 GTM|18.45    2
## 8  2023  HND|16.3    3
## 9  2023  NIC|7.85    4
## 10 2023  CRI|4.79    5
## 11 2024 USA|33.84    1
## 12 2024 GTM|19.53    2
## 13 2024 HND|16.14    3
## 14 2024  NIC|8.94    4
## 15 2024  CRI|4.71    5
## 16 2025 USA|32.45    1
## 17 2025 GTM|19.64    2
## 18 2025 HND|16.74    3
## 19 2025  NIC|9.12    4
## 20 2025  CRI|4.45    5
## 21 2026 USA|32.53    1
## 22 2026 GTM|19.46    2
## 23 2026 HND|15.44    3
## 24 2026   NIC|8.7    4
## 25 2026  CRI|4.51    5

6.2: Tabla en formato “RAW”

library(tidyr)
insumo_reporte %>% 
pivot_wider(names_from = rank,values_from = data)->mi_tabla
print(mi_tabla)
## # A tibble: 5 × 6
##    anio `1`       `2`       `3`       `4`      `5`     
##   <dbl> <chr>     <chr>     <chr>     <chr>    <chr>   
## 1  2022 USA|38.78 GTM|17.05 HND|16.65 NIC|6.98 CRI|4.27
## 2  2023 USA|35.6  GTM|18.45 HND|16.3  NIC|7.85 CRI|4.79
## 3  2024 USA|33.84 GTM|19.53 HND|16.14 NIC|8.94 CRI|4.71
## 4  2025 USA|32.45 GTM|19.64 HND|16.74 NIC|9.12 CRI|4.45
## 5  2026 USA|32.53 GTM|19.46 HND|15.44 NIC|8.7  CRI|4.51
mi_tabla %>%
  kable(caption = paste("Top",5,"de Exportaciones periodo",
    min(anios_ranking),"-",max(anios_ranking))) %>%
  add_footnote(label = "Elaboración propia con base en datos del BCR") 
Top 5 de Exportaciones periodo 2022 - 2026
anio 1 2 3 4 5
2022 USA|38.78 GTM|17.05 HND|16.65 NIC|6.98 CRI|4.27
2023 USA|35.6 GTM|18.45 HND|16.3 NIC|7.85 CRI|4.79
2024 USA|33.84 GTM|19.53 HND|16.14 NIC|8.94 CRI|4.71
2025 USA|32.45 GTM|19.64 HND|16.74 NIC|9.12 CRI|4.45
2026 USA|32.53 GTM|19.46 HND|15.44 NIC|8.7 CRI|4.51

Note: aElaboración propia con base en datos del BCR