Act1_Nearshoring

Emiliano Montalvo Vásquez

2025-08-28

Introducción

El objetivo del presente reporte es presentar una composición de las exportaciones mexicanas por Capítulo HS2, específicamente, nos interesa conocer desagregaciones de los capítulos Máquinas y Transporte.

La primera sección de este artículo Base de datos prueba correra el código ya desplegado en los documentos anteriores, mientras que la sección Base de datos final buscará responder la pregunta planteada en el párrafo anterior.

Una vez establecido esto se procede a correr el código

#### Librerías
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.4     ✔ readr     2.1.5
## ✔ forcats   1.0.0     ✔ stringr   1.5.1
## ✔ ggplot2   3.5.1     ✔ tibble    3.2.1
## ✔ lubridate 1.9.3     ✔ tidyr     1.3.1
## ✔ purrr     1.0.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(here)
## here() starts at C:/Users/emili/OneDrive/Documentos/DIRECTORIO R
library(forcats)
library(zoo)
## 
## Adjuntando el paquete: 'zoo'
## 
## The following objects are masked from 'package:base':
## 
##     as.Date, as.Date.numeric
library(scales)
## 
## Adjuntando el paquete: 'scales'
## 
## The following object is masked from 'package:purrr':
## 
##     discard
## 
## The following object is masked from 'package:readr':
## 
##     col_factor
library(httr)
library(jsonlite)
## 
## Adjuntando el paquete: 'jsonlite'
## 
## The following object is masked from 'package:purrr':
## 
##     flatten
library (janitor) # Limpieza de base de datos
## 
## Adjuntando el paquete: 'janitor'
## 
## The following objects are masked from 'package:stats':
## 
##     chisq.test, fisher.test
library(kableExtra) # Generación de tablas en HTML
## 
## Adjuntando el paquete: 'kableExtra'
## 
## The following object is masked from 'package:dplyr':
## 
##     group_rows

Base de datos prueba

### Extracción de los datos
api_url <- "https://www.economia.gob.mx/apidatamexico/tesseract/data.jsonrecords?cube=inegi_foreign_trade_product&drilldowns=Quarter%2CChapter+2+Digit%2CFlow&locale=es&measures=Trade+Value"
response <- GET(api_url)
status_code(response)
## [1] 200
data_json <- content(response, "text", encoding = "UTF-8")
data_list <- fromJSON(data_json)
df2 <- as.data.frame(data_list$data)
str(df2)
## 'data.frame':    4940 obs. of  7 variables:
##  $ Quarter ID        : int  19931 19931 19931 19931 19931 19931 19931 19931 19931 19931 ...
##  $ Quarter           : chr  "1993-Q1" "1993-Q1" "1993-Q1" "1993-Q1" ...
##  $ Chapter 2 Digit ID: int  1 1 2 2 3 3 4 4 5 5 ...
##  $ Chapter 2 Digit   : chr  "Los Productos de Origen Animal" "Los Productos de Origen Animal" "Productos del Reino Vegetal" "Productos del Reino Vegetal" ...
##  $ Flow ID           : int  1 2 1 2 1 2 1 2 1 2 ...
##  $ Flow              : chr  "Importaciones" "Exportaciones" "Importaciones" "Exportaciones" ...
##  $ Trade Value       : num  3.66e+08 2.00e+08 5.30e+08 8.84e+08 1.08e+08 ...
### Capítulos
chaps <- df2 |> filter(`Quarter ID`<19932,`Flow ID` == "1" )|>
  select(`Chapter 2 Digit ID`,`Chapter 2 Digit`)
chaps
##    Chapter 2 Digit ID                   Chapter 2 Digit
## 1                   1    Los Productos de Origen Animal
## 2                   2       Productos del Reino Vegetal
## 3                   3 Animales y Vegetales Bi-Productos
## 4                   4        Los Productos Alimenticios
## 5                   5               Productos Minerales
## 6                   6                Productos Químicos
## 7                   7               Plásticos y Cauchos
## 8                   8                Pieles de Animales
## 9                   9               Productos de Madera
## 10                 10                Artículos de Papel
## 11                 11                          Textiles
## 12                 12              Calzado, y Sombreros
## 13                 13                  Piedra y Cristal
## 14                 14                 Metales Preciosos
## 15                 15                            Rieles
## 16                 16                          Máquinas
## 17                 17                        Transporte
## 18                 18                      Instrumentos
## 19                 20                           Diverso
### Traducciones y limpieza de variables con ID
df2 <- df2 |> select(!ends_with("ID")) |> 
  rename(Trimestre = Quarter,
         Flujo = Flow,
         Capítulo = `Chapter 2 Digit`,
         Valor = `Trade Value`)
str(df2)
## 'data.frame':    4940 obs. of  4 variables:
##  $ Trimestre: chr  "1993-Q1" "1993-Q1" "1993-Q1" "1993-Q1" ...
##  $ Capítulo : chr  "Los Productos de Origen Animal" "Los Productos de Origen Animal" "Productos del Reino Vegetal" "Productos del Reino Vegetal" ...
##  $ Flujo    : chr  "Importaciones" "Exportaciones" "Importaciones" "Exportaciones" ...
##  $ Valor    : num  3.66e+08 2.00e+08 5.30e+08 8.84e+08 1.08e+08 ...
### Convertir trimestre a fecha
df2$Trimestre <- as.yearqtr(df2$Trimestre,format = "%Y-Q%q")
### Reescalar importaciones y exportaciones
df2 <- df2 |> pivot_wider(
  names_from = Flujo, values_from = Valor) |> 
  mutate(Importaciones = Importaciones/1000000,
         Exportaciones = Exportaciones/1000000)

### Volver capítulo como factor
df2$Capítulo <- as.factor(df2$Capítulo)

### Recodificar capitulos
df2 <- df2 |> 
  mutate(Capítulo = fct_recode(Capítulo,
                               "Animales" = "Los Productos de Origen Animal",
                               "Vegetales" = "Productos del Reino Vegetal",
                               "Animal_Veg" = "Animales y Vegetales Bi-Productos",
                               "Alimentos" = "Los Productos Alimenticios",
                               "Minerales" = "Productos Minerales",
                               "Quimicos" = "Productos Químicos",
                               "Plásticos" = "Plásticos y Cauchos",
                               "Pieles" = "Pieles de Animales",
                               "Madera" = "Productos de Madera",
                               "Papel" = "Artículos de Papel",
                               "CalzSomb" = "Calzado, y Sombreros",
                               "Piedra" = "Piedra y Cristal",
                               "MPreciosos" = "Metales Preciosos",
                               "Otros" = "Diverso"))
str(df2)
## tibble [2,470 × 4] (S3: tbl_df/tbl/data.frame)
##  $ Trimestre    : 'yearqtr' num [1:2470] 1993 Q1 1993 Q1 1993 Q1 1993 Q1 ...
##  $ Capítulo     : Factor w/ 19 levels "Animal_Veg","Papel",..: 7 14 1 6 15 16 12 11 13 2 ...
##  $ Importaciones: num [1:2470] 366 530 108 310 516 ...
##  $ Exportaciones: num [1:2470] 200.12 883.67 3.45 198.75 1922.84 ...
MexXMproducto <- df2

xmp <- MexXMproducto

Visualización

Procedimiento: En esl siguiente chunk de código primero se calculan los capítulos más importantes, usando como ponderación los valores exportados del 2020 en adelante. Posteriormente, se agregan todos los demás capítulos en una categoría residual: Otros.

prod_percentages <- xmp |>
  mutate(
    Year = as.numeric(format(Trimestre, "%Y")),
    lump_weight = if_else(Year >= 2020, Exportaciones, 0),
    Capítulo = fct_lump_n(
      f = Capítulo,
      n = 7,
      w = lump_weight,
      other_level = "Otros"
    )
  ) |>
  
  # Luego sumamos las exportaciones por capítulo
  group_by(Trimestre, Capítulo) |>
  summarise(Exportaciones = sum(Exportaciones, na.rm = TRUE), .groups = "drop") |>
  
  #Posteriormente se dividen por el total de exportaciones por trimestre, para obtener los porcentajes que estamos buscando
  group_by(Trimestre) |>
  mutate(percent_valor = Exportaciones / sum(Exportaciones, na.rm = TRUE)) |>
  ungroup() |>
  mutate(Capítulo = fct_reorder(Capítulo, Exportaciones, .fun = sum, .desc = TRUE))
### Gráfico
prod_percentages |> 
ggplot(aes(x = Trimestre, y = percent_valor, fill = Capítulo)) +
  theme_bw() +
  scale_fill_brewer(palette = "Dark2") +
  geom_area(alpha = 0.9) +
  geom_hline(
    yintercept = seq(0.1, 0.9, by = 0.1), 
    color = "white",                      
    linetype = "dotted",
    linewidth = 0.5) +
  scale_y_continuous(
    breaks = seq(0, 1, by = 0.1),
    labels = scales::percent,
    expand = c(0, 0)) +
  scale_x_yearqtr(
    breaks = seq(from = as.yearqtr("1993 Q1"), to = as.yearqtr("2025 Q1"), by = 1),
    expand = c(0,0))+
  labs(
    x = "",
    y = "",
    fill = "",
    caption = "J.Cornick con base de Data Mexico") +
  theme(
    legend.position = "bottom",
    axis.text.x = element_text(angle = 90, vjust = 0.5, hjust = 1),
    panel.grid.major.y = element_blank(),
    panel.grid.minor.y = element_blank()
  )

Base de datos final

Para desagregar los prouductos a nivel capítulo se automatizó la siguiente consulta:

La api generada es la siguiente:https://www.economia.gob.mx/apidatamexico/tesseract/data.jsonrecords?cube=inegi_foreign_trade_product&drilldowns=Year%2CQuarter%2CChapter+2+Digit%2CHS2+2+Digit%2CFlow&locale=es&measures=Trade+Value

A continuación se replica el código de la sección anterior para extraer la información por capítulo HS2.

### Extracción de los datos"
api_url <- "https://www.economia.gob.mx/apidatamexico/tesseract/data.jsonrecords?cube=inegi_foreign_trade_product&drilldowns=Year%2CQuarter%2CChapter+2+Digit%2CHS2+2+Digit%2CFlow&locale=es&measures=Trade+Value"

response <- GET(api_url)
status_code(response)
## [1] 200
data_json <- content(response, "text", encoding = "UTF-8")
data_list <- fromJSON(data_json)
df_chapters <- as.data.frame(data_list$data)
str(df_chapters)
## 'data.frame':    20280 obs. of  10 variables:
##  $ Year              : int  1993 1993 1993 1993 1993 1993 1993 1993 1993 1993 ...
##  $ Quarter ID        : int  19931 19931 19931 19931 19931 19931 19931 19931 19931 19931 ...
##  $ Quarter           : chr  "1993-Q1" "1993-Q1" "1993-Q1" "1993-Q1" ...
##  $ Chapter 2 Digit ID: int  1 1 1 1 1 1 1 1 1 2 ...
##  $ Chapter 2 Digit   : chr  "Los Productos de Origen Animal" "Los Productos de Origen Animal" "Los Productos de Origen Animal" "Los Productos de Origen Animal" ...
##  $ HS2 2 Digit ID    : int  101 101 102 102 103 103 104 104 105 206 ...
##  $ HS2 2 Digit       : chr  "Animales Vivos" "Animales Vivos" "Carne y Despojos Comestibles" "Carne y Despojos Comestibles" ...
##  $ Flow ID           : int  1 2 1 2 1 2 1 2 1 1 ...
##  $ Flow              : chr  "Importaciones" "Exportaciones" "Importaciones" "Exportaciones" ...
##  $ Trade Value       : num  4.28e+07 1.15e+08 1.64e+08 8.79e+06 1.57e+07 ...
df_chapters <- df_chapters |>
  clean_names() # Esto facilita el trabajo al simplificar los nombres de las columnas quitándole los espacios y las mayúsculas.

Se realizan algunos procesos de limpieza y preparación de la BD.

### Convertir trimestre a fecha
df_chapters$quarter <- as.yearqtr(df_chapters$quarter,format = "%Y-Q%q")

### Realizar traducciones: Al descargar los datos mediante la API estos se descargan automáticamente en inglés.
df_chapters <- df_chapters |>
  select(!ends_with("ID")) |> 
  rename(trimestre = quarter,
         flujo = flow,
         capitulo = chapter_2_digit,
         valor_comercio = trade_value) |> 
  mutate(capitulo = as.factor(capitulo))
### Reescalar importaciones y exportaciones y convertir a formato ancho
df_chapters <- df_chapters |> pivot_wider(
  names_from = flujo, values_from = valor_comercio) |> 
  mutate(Importaciones = Importaciones/1000000,
         Exportaciones = Exportaciones/1000000)

### Recodificar capitulos
df_chapters <- df_chapters |> 
  mutate(capitulo = fct_recode(capitulo,
                               "Animales" = "Los Productos de Origen Animal",
                               "Vegetales" = "Productos del Reino Vegetal",
                               "Animal_Veg" = "Animales y Vegetales Bi-Productos",
                               "Alimentos" = "Los Productos Alimenticios",
                               "Minerales" = "Productos Minerales",
                               "Quimicos" = "Productos Químicos",
                               "Plásticos" = "Plásticos y Cauchos",
                               "Pieles" = "Pieles de Animales",
                               "Madera" = "Productos de Madera",
                               "Papel" = "Artículos de Papel",
                               "CalzSomb" = "Calzado, y Sombreros",
                               "Piedra" = "Piedra y Cristal",
                               "MPreciosos" = "Metales Preciosos",
                               "Otros" = "Diverso"))

A continuación se generará un dataframe con los productos HS2 contenidos en cada capítulo:

### Tabla capítulos
chapters <- df_chapters |> 
  select(capitulo) |> 
  distinct()

# Código para generar una tabla desplegable en html
chapters |>
  kbl(
    caption = "Tabla 1: Capítulos identificados en las exportaciones e importaciones de México",
    align = "l"
  ) |>
  kable_styling(
    bootstrap_options = c("striped", "hover"),
    full_width = TRUE,
    font_size = 14
  )
## Warning in attr(x, "align"): 'xfun::attr()' está en desuso.
## Utilizar 'xfun::attr2()' en su lugar.
## Ver help("Deprecated")
Tabla 1: Capítulos identificados en las exportaciones e importaciones de México
capitulo
Animales
Vegetales
Animal_Veg
Alimentos
Minerales
Quimicos
Plásticos
Pieles
Madera
Papel
Textiles
CalzSomb
Piedra
MPreciosos
Rieles
Máquinas
Transporte
Instrumentos
Otros
#chapters_hs2 <- df_chapters |> 
# Tabla productos
products <- df_chapters |> 
  group_by(capitulo) |> 
  summarise(productos_hs2_en_capitulo = unique(hs2_2_digit))
## Warning: Returning more (or less) than 1 row per `summarise()` group was deprecated in
## dplyr 1.1.0.
## ℹ Please use `reframe()` instead.
## ℹ When switching from `summarise()` to `reframe()`, remember that `reframe()`
##   always returns an ungrouped data frame and adjust accordingly.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
## `summarise()` has grouped output by 'capitulo'. You can override using the
## `.groups` argument.
# Código para generar una tabla desplegable en html
products |>
  kbl(
    caption = "Tabla 2: Productos HS2 identificados por capítulo en las exportaciones e importaciones de México",
    align = "l"
  ) |>
  kable_styling(
    bootstrap_options = c("striped", "hover"),
    full_width = TRUE,
    font_size = 14
  )
## Warning in attr(x, "align"): 'xfun::attr()' está en desuso.
## Utilizar 'xfun::attr2()' en su lugar.
## Ver help("Deprecated")
Tabla 2: Productos HS2 identificados por capítulo en las exportaciones e importaciones de México
capitulo productos_hs2_en_capitulo
Animal_Veg Grasas y Aceites Animales o Vegetales
Papel Pulpa de Madera, Material Celulósico Fibroso, Residuos, Etc
Papel Productos a Base de Papel
Papel Libros Impresos, Periódicos, Fotos, Etc
CalzSomb Calzado, Polainas y Artículos Análogos; Partes de estos Artículos
CalzSomb Sombreros, Demás Tocados y sus Partes
Otros Muebles, Iluminación, Letreros, Construcciones Prefabricadas
Otros Juguetes, Juegos y Artículos para Recreo o Deporte; sus Partes y Accesorios
Otros Manufacturas Diversas
Instrumentos Aparatos Ópticos, Fotográficos, Técnicos, Médicos, Etc
Instrumentos Aparatos de Relojería y sus Partes
Instrumentos Instrumentos Musicales; sus Partes y Accesorios
Alimentos Preparaciones de Peces, Crustáceos y otros Invertebrados Acuáticos
Alimentos Azucares y Artículos de Confitería
Alimentos Cacao y sus Preparaciones
Alimentos Preparaciones a Base de Cereales, Harina, Almidón, Fécula o Leche; Productos de Pastelería
Alimentos Preparaciones de Hortalizas, Frutos u otros Frutos o Demás Partes de Plantas
Alimentos Preparaciones Alimenticias Diversas
Alimentos Bebidas, Líquidos Alcohólicos y Vinagre
Alimentos Residuos y Desperdicios de las Industrias Alimentarias; Alimentos Preparados para Animales
Alimentos Tabaco y Sucedáneos del Tabaco, Elaborados
Animales Animales Vivos
Animales Carne y Despojos Comestibles
Animales Pescados y Crustáceos, Moluscos y Demás Invertebrados Acuáticos
Animales Productos Lácteos; Productos Comestibles de Origen Animal, no Especificados
Animales Los Demás Productos de Origen Animal, no Expresados ni Comprendidos en otra Parte
Máquinas Reactores Nucleares, Calderas, Maquinaria, Etc
Máquinas Equipos Eléctricos, Electrónicos
MPreciosos Perlas, Piedras Preciosas, Metales, Monedas, Etc
Piedra Manufacturas de Piedra, Yeso Fraguable, Cemento, Amianto (Asbesto), Mica o Materias Análogas
Piedra Productos Cerámicos
Piedra Vidrio y sus Manufacturas
Pieles Pieles (Excepto la Peletería) y Cueros
Pieles Artículos de Cuero; Guarnicionería y Arneses; Artículos de Viaje, Bolsos y Contenedores Similares
Plásticos Plásticos y sus Manufacturas
Plásticos Caucho y sus Manufacturas
Madera Madera, Carbón Vegetal y Manufacturas de Madera
Vegetales Plantas Vivas y Productos de la Floricultura
Vegetales Hortalizas, Plantas, Raíces y Tubérculos Alimenticios
Vegetales Frutas Comestibles, Nueces y Melones
Vegetales Café, Té, Yerba Mate y Especias
Vegetales Cereales
Vegetales Productos de la Molinería; Malta; Almidón y Fécula; Inulina; Gluten de Trigo
Vegetales Semillas Oleaginosas, Frutos Oleagicos, Granos, Semillas, Etc
Vegetales Gomas, Resinas y Demás Jugos y Extractos Vegetales
Vegetales Materiales de Trenzado y otros Productos de Origen Vegetal no Especificados
Minerales Sal; Azufre; Tierras y Piedras; Yesos, Cales y Cementos
Minerales Minerales Metalíferos, Escorias y Cenizas
Minerales Combustibles Minerales, Aceites, Etc
Quimicos Productos Químicos Inorgánicos, Compuestos de Metales Preciosos, Isótopos
Quimicos Productos Químicos Orgánicos
Quimicos Productos Farmacéuticos
Quimicos Abonos
Quimicos Extractos Curtientes, Tintóreos, Pigmentos, Etc
Quimicos Aceites Esenciales, Perfumes, Cosméticos, Artículos de Tocador
Quimicos Jabones, Lubricantes, Ceras, Velas, Pastas de Modelar
Quimicos Materias Albuminoideas; Productos a Base de Almidón o de Fécula Modificados; Colas; Enzimas
Quimicos Productos Fotográficos o Cinematográficos
Quimicos Productos Diversos de las Industrias Químicas
Rieles Fundición, Hiero y Acero
Rieles Artículos de Hierro o Acero
Rieles Cobre y sus Manufacturas
Rieles Níquel y sus Manufacturas
Rieles Aluminio y sus Manufacturas
Rieles Plomo y sus Manufacturas
Rieles Cinc y sus Manufacturas
Rieles Los Demás Metales Comunes; Cermets; Manufacturas de estas Materias
Rieles Herramientas, Implementos, Cubiertos, Etc
Rieles Manufacturas Diversas de Metal Común
Textiles Lana y Pelo Fino u Ordinario; Hilados y Tejidos de Crin
Textiles Algodón
Textiles Filamentos Sintéticos o Artificiales; Tiras y Formas Similares de Materia Textil Sintética o Artifical
Textiles Fibras Sintéticas o Artificiales Discontinuas
Textiles Hilados Especiales; Cordeles, Cuerdas y Cables
Textiles Alfombras y Demás Revestimientos para el Suelo, de Materia Textil
Textiles Tejidos Especiales; Superficies Textiles con Mechón Insertado; Encajes; Tapicería; Pasamanería; Bordados
Textiles Telas Impregnadas, Recubiertas, Revestidas o Estratificadas; Artículos Técnicos de Materia Textil
Textiles Tejidos de Punto
Textiles Prendas y Complementos (Accesorios), de Vestir, de Punto
Textiles Prendas y Complementos (Accesorios), de Vestir, Excepto los de Punto
Textiles Otros Artículos Textiles Hechos, Conjuntos, Ropa Gastada, Etc
Transporte Equipos y Vehículos Ferroviarios (Trenes)
Transporte Vehículos

Al observar esta tabla notamos que los productos HS2 en los capítulos Máquinas y Transporte son los siguientes:

ma_tr <- df_chapters |> 
  group_by(capitulo) |> 
  summarise(productos_hs2_en_capitulo = unique(hs2_2_digit)) |> 
  filter(capitulo %in% c("Máquinas", "Transporte"))
## Warning: Returning more (or less) than 1 row per `summarise()` group was deprecated in
## dplyr 1.1.0.
## ℹ Please use `reframe()` instead.
## ℹ When switching from `summarise()` to `reframe()`, remember that `reframe()`
##   always returns an ungrouped data frame and adjust accordingly.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
## `summarise()` has grouped output by 'capitulo'. You can override using the
## `.groups` argument.
# Código para generar una tabla desplegable en html
ma_tr |>
  kbl(
    caption = "Tabla 3: Productos HS2 identificados en Maquinaria y Transporte",
    align = "l"
  ) |>
  kable_styling(
    bootstrap_options = c("striped", "hover"),
    full_width = TRUE,
    font_size = 14
  )
## Warning in attr(x, "align"): 'xfun::attr()' está en desuso.
## Utilizar 'xfun::attr2()' en su lugar.
## Ver help("Deprecated")
Tabla 3: Productos HS2 identificados en Maquinaria y Transporte
capitulo productos_hs2_en_capitulo
Máquinas Reactores Nucleares, Calderas, Maquinaria, Etc
Máquinas Equipos Eléctricos, Electrónicos
Transporte Equipos y Vehículos Ferroviarios (Trenes)
Transporte Vehículos

A continuación se presentará una visualización de la evolución del comercio de los productos HS2 en esas categorías. Para esto se crearan dos bases de datos, una que contenga únicamente los capítulos Maquinaria y Transporte y otro que contenga todos los capítulos para hacer un análisis más completo.

### Base solo con capítulos de maquinaria y transporte: 
hs2_mq_tr <- df_chapters |> 
  filter(capitulo %in% c("Máquinas", "Transporte"))

### Base con todos los capítulos: 
hs2_chapters <- df_chapters

Primero recordemos nuestro punto de partida:

prod_percentages <- xmp |>
  mutate(Capítulo = if_else(Capítulo %in% c("Máquinas", "Transporte"), Capítulo, "Otros")) |> 
  # Primero calculamos los capítulos más importantes, usando como ponderación los valores exportados del 2020 en adelante, y agregamos todos los demás capítulos en una categoría residual, Otros.
  mutate(
    Year = as.numeric(format(Trimestre, "%Y")),
    lump_weight = if_else(Year >= 2020, Exportaciones, 0),
    Capítulo = fct_lump_n(
      f = Capítulo,
      n = 7,
      w = lump_weight,
      other_level = "Otros"
    )
  ) |>
  # Luego sumamos las exportaciones por capítulo
  group_by(Trimestre, Capítulo) |>
  summarise(Exportaciones = sum(Exportaciones, na.rm = TRUE), .groups = "drop") |>
  
  # Y ahora dividimos por el total de exportaciones por trimestre, para obtener los porcentajes que estábamos buscando
  group_by(Trimestre) |>
  mutate(percent_valor = Exportaciones / sum(Exportaciones, na.rm = TRUE)) |>
  ungroup() |>
  mutate(Capítulo = fct_reorder(Capítulo, Exportaciones, .fun = sum, .desc = TRUE))


### Gráfico modificado
prod_percentages |> 
ggplot(aes(x = Trimestre, y = percent_valor, fill = Capítulo)) +
  theme_bw() +
  scale_fill_brewer(palette = "Dark2") +
  geom_area(alpha = 0.9) +
  geom_hline(
    yintercept = seq(0.1, 0.9, by = 0.1), 
    color = "white",                      
    linetype = "dotted",
    linewidth = 0.5) +
  scale_y_continuous(
    breaks = seq(0, 1, by = 0.1),
    labels = scales::percent,
    expand = c(0, 0)) +
  scale_x_yearqtr(
    breaks = seq(from = as.yearqtr("1993 Q1"), to = as.yearqtr("2025 Q1"), by = 1),
    expand = c(0,0))+
   labs(title = "Figura 2: Mexico, distribución porcencual de las exportaciones de Máquinas y Transporte, 1993 - 2024")+
  labs(
    x = "",
    y = "",
    fill = "",
    caption = "E. Montalvo con base de Data Mexico") +
  theme(
    legend.position = "bottom",
    axis.text.x = element_text(angle = 90, vjust = 0.5, hjust = 1),
    panel.grid.major.y = element_blank(),
    panel.grid.minor.y = element_blank()
  )

Visualización productos H2S Transporte y Maquinaria

NOTA: Se omitió el calculo de los productos H2S más importantes, pues solo nos interesa conocer la evolución de los capítuos Maquinaria y Transporte. Este calculo se integrará en un análisis posterior.

hs2_mq_tr_percentage <- hs2_mq_tr |> 
    group_by(trimestre, hs2_2_digit) |>
  summarise(Exportaciones = sum(Exportaciones, na.rm = TRUE), .groups = "drop") |>
  group_by(trimestre) |>
  mutate(percent_valor = Exportaciones / sum(Exportaciones, na.rm = TRUE)) |>
  ungroup() |>
  mutate(hs2_2_digit = fct_reorder(hs2_2_digit, Exportaciones, .fun = sum, .desc = TRUE))

Con esto se genera el siguiente gráfico

hs2_mq_tr_percentage |> 
ggplot(aes(x = trimestre, y = percent_valor, fill = hs2_2_digit)) +
  theme_bw() +
  scale_fill_brewer(palette = "Dark2") +
  geom_area(alpha = 0.9) +
  geom_hline(
    yintercept = seq(0.1, 0.9, by = 0.1), 
    color = "white",                      
    linetype = "dotted",
    linewidth = 0.5) +
   labs(title = "Figura 3: Evolución de los productos H2S de Maquinaria y Transporte , 1993 - 2024")+
  scale_y_continuous(
    breaks = seq(0, 1, by = 0.1),
    labels = scales::percent,
    expand = c(0, 0)) +
  scale_x_yearqtr(
    breaks = seq(from = as.yearqtr("1993 Q1"), to = as.yearqtr("2025 Q1"), by = 1),
    expand = c(0,0))+
  labs(
    x = "",
    y = "",
    fill = "",
    caption = "E. Montalvo con base de Data Mexico") +
  theme(
    legend.position = "bottom",
      legend.text = element_text(size = 8),   # tamaño del texto de la leyenda
  legend.key.size = unit(0.5, "cm"),      # tamaño de las cajitas de color
    axis.text.x = element_text(angle = 90, vjust = 0.5, hjust = 1),
    panel.grid.major.y = element_blank(),
    panel.grid.minor.y = element_blank()
  )

Análisis:pendiente

Los códigos id de cada producto HS2 son los siguientes: 1684: Reactores Nucleares 1685: Equipos Eléctricos, Electrónicos 1786: Trenes 1787: Vehículos

Se reporta que este es el máximo nivel de desagregación en el portal Data México

Visualización productos H2S Capítulos

hs2_chapters_percentage <- hs2_chapters |> 
  mutate(
    Year = as.numeric(format(trimestre, "%Y")),
    lump_weight = if_else(Year >= 2020, 
                          coalesce(Exportaciones, 0),  # reemplaza NA por 0
                          0),
    hs2_2_digit = fct_lump_n(
      f = hs2_2_digit,
      n = 7, #83
      w = lump_weight,
      other_level = "Otros"
    )
  ) |>
  group_by(trimestre, hs2_2_digit) |>
  summarise(Exportaciones = sum(Exportaciones, na.rm = TRUE), .groups = "drop") |>
  group_by(trimestre) |>
  mutate(percent_valor = Exportaciones / sum(Exportaciones, na.rm = TRUE)) |>
  ungroup() |>
  mutate(hs2_2_digit = fct_reorder(hs2_2_digit, Exportaciones, .fun = sum, .desc = TRUE))
hs2_chapters_percentage |> 
ggplot(aes(x = trimestre, y = percent_valor, fill = hs2_2_digit)) +
  theme_bw() +
  scale_fill_brewer(palette = "Dark2") +
  geom_area(alpha = 0.9) +
  geom_hline(
    yintercept = seq(0.1, 0.9, by = 0.1), 
    color = "white",                      
    linetype = "dotted",
    linewidth = 0.5) +
  scale_y_continuous(
    breaks = seq(0, 1, by = 0.1),
    labels = scales::percent,
    expand = c(0, 0)) +
  scale_x_yearqtr(
    breaks = seq(from = as.yearqtr("1993 Q1"), to = as.yearqtr("2025 Q1"), by = 1),
    expand = c(0,0))+
    labs(title = "Figura 4: Evolución de los productos H2S por capítulo , 1993 - 2024")+
  labs(
    x = "",
    y = "",
    fill = "",
    caption = "E. Montalvo con base de Data Mexico") +
  theme(
    legend.position = "bottom",
    axis.text.x = element_text(angle = 90, vjust = 0.5, hjust = 1),
    panel.grid.major.y = element_blank(),
    panel.grid.minor.y = element_blank()
  )