Parte 1

Estados 83

HS8802_clean <- HS8802 %>%
  arrange(desc(Total_Trade_Value)) 

HS8802_clean <- head(HS8802_clean, 4)

HS8802_long_claude <- HS8802_clean %>%
  pivot_longer(cols = c(Total_Trade_Value, Total_Balanza_Value),
               names_to = "Variable",
               values_to = "Valor") %>%
  mutate(
    Variable = case_when(
      Variable == "Total_Trade_Value" ~ "Valor Total de Comercio",
      Variable == "Total_Balanza_Value" ~ "Balanza Comercial"
    ),
    State = factor(State, levels = rev(c("Ciudad de México", "Coahuila de Zaragoza", 
                                           "Nuevo León", "Estado de México")))
  )

# Crear la gráfica mejorada
p <- ggplot(HS8802_long_claude, aes(x = Valor, y = State, fill = Variable)) +
  geom_col(position = position_dodge(width = 0.8), 
           width = 0.7, 
           alpha = 0.85) +
  
  # Línea vertical en x = 0 para referencia
  geom_vline(xintercept = 0, color = "black", linewidth = 0.5, alpha = 0.7) +
  
  # Escalas y colores mejorados
  scale_fill_manual(values = c("Valor Total de Comercio" = "#2E86AB", 
                               "Balanza Comercial" = "#A23B72")) +
  
  scale_x_continuous(labels = scales::label_number(scale = 1e-9, suffix = "B USD"),
                     breaks = scales::pretty_breaks(n = 6)) +
  
  # Títulos y etiquetas
  labs(
    title = "Comercio Internacional por Estado",
    subtitle = "Valor Total de Comercio vs Balanza Comercial (HS 178802)\nTop 4 estados con mayor valor comercial",
    x = "Valor (Miles de Millones USD)",
    y = "",
    fill = "Indicador",
    caption = "Fuente: Datos de comercio exterior • Elaboración propia"
  ) +
  
  # Tema personalizado
  theme_minimal(base_size = 12) +
  theme(
    # Título principal
    plot.title = element_text(size = 16, face = "bold", 
                              margin = margin(b = 5), color = "#2c3e50"),
    plot.subtitle = element_text(size = 11, color = "#7f8c8d", 
                                 margin = margin(b = 20)),
    plot.caption = element_text(size = 9, color = "#95a5a6", hjust = 0),
    
    # Ejes
    axis.title.x = element_text(size = 12, margin = margin(t = 15)),
    axis.text.y = element_text(size = 11, color = "#2c3e50"),
    axis.text.x = element_text(size = 10, color = "#2c3e50"),
    
    # Leyenda
    legend.title = element_text(size = 11, face = "bold"),
    legend.text = element_text(size = 10),
    legend.position = "bottom",
    legend.box = "horizontal",
    legend.margin = margin(t = 20),
    
    # Panel y grilla
    panel.grid.major.y = element_blank(),
    panel.grid.minor = element_blank(),
    panel.grid.major.x = element_line(color = "#ecf0f1", linewidth = 0.5),
    
    # Márgenes
    plot.margin = margin(20, 20, 20, 20),
    
    # Fondo
    panel.background = element_rect(fill = "white", color = NA),
    plot.background = element_rect(fill = "white", color = NA)
  )

# Mostrar la gráfica
print(p)

Estados pt.2

HS8803_clean <- HS8803 %>%
  arrange(desc(Total_Trade_Value)) 


HS8803_clean <- head(HS8803_clean, 13)

HS8803_long_claude <- HS8803_clean %>%
  pivot_longer(cols = c(Total_Trade_Value, Total_Balanza_Value),
               names_to = "Variable",
               values_to = "Valor") %>%
mutate(
  Variable = case_when(
    Variable == "Total_Trade_Value" ~ "Valor Total de Comercio",
    Variable == "Total_Balanza_Value" ~ "Balanza Comercial",
    TRUE ~ Variable  # <- Esto cubre cualquier otro valor inesperado
  ),
  State = factor(State, levels = rev(c(
    "Baja California", "Coahuila de Zaragoza", "Chihuahua", "Ciudad de México", 
    "Jalisco", "Estado de México", "Nuevo León", "Querétaro",
    "San Luis Potosí", "Sinaloa", "Sonora", "Tamaulipas", "No Informado"
  )))
)


# Crear la gráfica mejorada
p2 <- ggplot(HS8803_long_claude, aes(x = Valor, y = reorder(State, Valor), fill = Variable)) +
  geom_col(position = position_dodge(width = 0.8), 
           width = 0.7, 
           alpha = 0.85) +
  
  # Línea vertical en x = 0 para referencia
  geom_vline(xintercept = 0, color = "black", linewidth = 0.5, alpha = 0.7) +
  
  # Escalas y colores mejorados
  scale_fill_manual(values = c("Valor Total de Comercio" = "#2E86AB", 
                               "Balanza Comercial" = "#A23B72")) +
  
  scale_x_continuous(labels = scales::label_number(scale = 1e-9, suffix = "B USD"),
                     breaks = scales::pretty_breaks(n = 6)) +
  
  # Títulos y etiquetas
  labs(
    title = "Comercio Internacional por Estado",
    subtitle = "Valor Total de Comercio vs Balanza Comercial (HS 178803)\nTop 4 estados con mayor valor comercial",
    x = "Valor (Miles de Millones USD)",
    y = "",
    fill = "Indicador",
    caption = "Fuente: Datos de comercio exterior • Elaboración propia"
  ) +
  
  # Tema personalizado
  theme_minimal(base_size = 12) +
  theme(
    # Título principal
    plot.title = element_text(size = 16, face = "bold", 
                              margin = margin(b = 5), color = "#2c3e50"),
    plot.subtitle = element_text(size = 11, color = "#7f8c8d", 
                                 margin = margin(b = 20)),
    plot.caption = element_text(size = 9, color = "#95a5a6", hjust = 0),
    
    # Ejes
    axis.title.x = element_text(size = 12, margin = margin(t = 15)),
    axis.text.y = element_text(size = 11, color = "#2c3e50"),
    axis.text.x = element_text(size = 10, color = "#2c3e50"),
    
    # Leyenda
    legend.title = element_text(size = 11, face = "bold"),
    legend.text = element_text(size = 10),
    legend.position = "bottom",
    legend.box = "horizontal",
    legend.margin = margin(t = 20),
    
    # Panel y grilla
    panel.grid.major.y = element_blank(),
    panel.grid.minor = element_blank(),
    panel.grid.major.x = element_line(color = "#ecf0f1", linewidth = 0.5),
    
    # Márgenes
    plot.margin = margin(20, 20, 20, 20),
    
    # Fondo
    panel.background = element_rect(fill = "white", color = NA),
    plot.background = element_rect(fill = "white", color = NA)
  )

# Mostrar la gráfica
print(p2)

HHI

## # A tibble: 3 × 2
##   State              HHI
##   <chr>            <dbl>
## 1 Ciudad de México 0.719
## 2 Estado de México 1    
## 3 Nuevo León       0.959
## # A tibble: 13 × 2
##    State                  HHI
##    <chr>                <dbl>
##  1 Baja California      0.994
##  2 Chihuahua            0.973
##  3 Ciudad de México     0.725
##  4 Coahuila de Zaragoza 0.961
##  5 Estado de México     0.867
##  6 Jalisco              0.735
##  7 No Informado         0.958
##  8 Nuevo León           0.903
##  9 Querétaro            0.261
## 10 San Luis Potosí      0.559
## 11 Sinaloa              1    
## 12 Sonora               0.902
## 13 Tamaulipas           0.529
## # A tibble: 17 × 2
##    State                  HHI
##    <chr>                <dbl>
##  1 Aguascalientes       0.718
##  2 Baja California      0.508
##  3 Chihuahua            0.499
##  4 Ciudad de México     0.226
##  5 Coahuila de Zaragoza 0.590
##  6 Estado de México     0.449
##  7 Jalisco              0.613
##  8 Michoacán de Ocampo  0.609
##  9 No Informado         0.996
## 10 Nuevo León           0.889
## 11 Puebla               0.790
## 12 Querétaro            0.730
## 13 Quintana Roo         0.372
## 14 Sinaloa              0.474
## 15 Sonora               0.903
## 16 Tamaulipas           0.969
## 17 Yucatán              0.785
## # A tibble: 22 × 2
##    State                  HHI
##    <chr>                <dbl>
##  1 Baja California      0.988
##  2 Baja California Sur  0.613
##  3 Chiapas              1    
##  4 Chihuahua            0.948
##  5 Ciudad de México     0.633
##  6 Coahuila de Zaragoza 0.968
##  7 Colima               0.944
##  8 Durango              0.916
##  9 Estado de México     0.670
## 10 Guanajuato           0.333
## # ℹ 12 more rows
## # A tibble: 22 × 2
##    State                  HHI
##    <chr>                <dbl>
##  1 Baja California      0.988
##  2 Baja California Sur  0.613
##  3 Chiapas              1    
##  4 Chihuahua            0.948
##  5 Ciudad de México     0.633
##  6 Coahuila de Zaragoza 0.968
##  7 Colima               0.944
##  8 Durango              0.916
##  9 Estado de México     0.670
## 10 Guanajuato           0.333
## # ℹ 12 more rows

MAtriz

# Matriz  -----------------------------------------------------------------
dfA = read.csv("~/Downloads/economy_foreign_trade_mun_2025-05-29T23_08_43.825Z.csv")

matriz_8802 = dfA %>% filter(`HS4.4.Digit.ID` == 178802) %>%
  group_by(`State.ID`, `State`, `Flow`) %>%
  summarise(
    `Total_Trade_Value` = sum(`Trade.Value`, na.rm = TRUE), .groups = "drop") %>% 
  pivot_wider(
    names_from = Flow,
    values_from = `Total_Trade_Value`,
    values_fill = 0
  ) %>%
 
  mutate(
    `Total comercio` = Exports + Imports
  )

df_unido_8802 <- left_join(matriz_8802, hhi_total_178802, by = "State")

matriz_8803 = dfA %>% filter(`HS4.4.Digit.ID` == 178803) %>%
  group_by(`State.ID`, `State`, `Flow`) %>%
  summarise(
    `Total_Trade_Value` = sum(`Trade.Value`, na.rm = TRUE), .groups = "drop") %>% 
  pivot_wider(
    names_from = Flow,
    values_from = `Total_Trade_Value`,
    values_fill = 0
  ) %>%
  mutate(
    `Total comercio` = Exports + Imports
  )

df_unido_8803 <- left_join(matriz_8803, hhi_total_178803, by = "State")

dnue88 <- read_excel("~/Downloads/comercios_estados_2.xlsx")
dnue88 <- dnue88 %>% rename(State = `Entidad federativa`) %>% 
  mutate(State = tolower(State))

df_unido_8802 <- df_unido_8802%>% 
  mutate(State = tolower(State))
df_unido_8803 <- df_unido_8803%>% 
  mutate(State = tolower(State))

df_unido_8802_A <- left_join(df_unido_8802, dnue88, by = "State")
df_unido_8803_A <- left_join(df_unido_8803, dnue88, by = "State")

df_unido_8802_A <- df_unido_8802_A %>%
  mutate(across(everything(), ~replace_na(., 0)))

df_unido_8803_A <- df_unido_8803_A %>%
  mutate(across(everything(), ~replace_na(., 0)))

Distancia P2

# Distancia P2 ------------------------------------------------------------

# matriz 8802 -------------------------------------------------------------

# Selección de variables para el análisis
vars <- c("Exports", "Imports", "Total comercio", "HHI", 
          "Valor_industria", "Total_comercios", "Escolaridad promedio")

# Normalización entre 0 y 1
df_norm_8802_A <- df_unido_8802_A %>%
  mutate(across(all_of(vars), ~ rescale(.x, to = c(0,1), na.rm = TRUE)))

# Matriz de correlación
mat_cor_8802 <- cor(df_norm_8802_A[, vars], use = "pairwise.complete.obs")

# Penalización: promedio de correlaciones por fila
penalizacion <- rowMeans(abs(mat_cor_8802))

# Índice P2: promedio de variables - penalización
df_norm_8802_A$P2 <- rowMeans(df_norm_8802_A[, vars], na.rm = TRUE) - penalizacion
## Warning in rowMeans(df_norm_8802_A[, vars], na.rm = TRUE) - penalizacion:
## longer object length is not a multiple of shorter object length
df_resultados_8802 <- df_unido_8802_A %>%
  mutate(P2 = df_norm_8802_A$P2) %>%
  arrange(desc(P2))  # Ordenar de mayor a menor potencial

ggplot(df_resultados_8802, aes(x = reorder(State, P2), y = P2)) +
  geom_col(fill = "steelblue") +
  coord_flip() +
  labs(title = "Índice P2 de Potencial Aeroespacial por Estado",
       x = "Estado", y = "Índice P2 (normalizado)") +
  theme_minimal()

library(ggplot2)
library(scales)

# Gráfica mejorada del Índice P2 de Potencial Aeroespacial
ggplot(df_resultados_8802, aes(x = reorder(State, P2), y = P2)) +
  
  # Barras con gradiente de colores basado en el valor
  geom_col(aes(fill = P2), 
           width = 0.8, 
           alpha = 0.9,
           color = "white", 
           linewidth = 0.3) +
  
  # Añadir etiquetas de valores en las barras
  geom_text(aes(label = round(P2, 3)), 
            hjust = -0.1, 
            size = 3.5, 
            color = "#2c3e50",
            fontface = "bold") +
  
  # Voltear coordenadas para barras horizontales
  coord_flip() +
  
  # Escala de colores moderna (gradiente azul-verde)
  scale_fill_gradient2(
    low = "#3498db",      # Azul claro para valores bajos
    mid = "#2ecc71",      # Verde para valores medios
    high = "#e74c3c",     # Rojo para valores altos
    midpoint = median(df_resultados_8802$P2, na.rm = TRUE),
    name = "Índice P2",
    guide = guide_colorbar(
      title.position = "top",
      title.hjust = 0.5,
      barwidth = 15,
      barheight = 0.8
    )
  ) +
  
  # Escala del eje Y con formato mejorado
  scale_y_continuous(
    labels = number_format(accuracy = 0.001, decimal.mark = "."),
    expand = expansion(mult = c(0, 0.15))  # Espacio extra a la derecha para etiquetas
  ) +
  
  # Títulos y etiquetas mejorados
  labs(
    title = "Índice P2 de Potencial Aeroespacial por Estado",
    subtitle = "Ranking de estados mexicanos según su capacidad en el sector aeroespacial",
    x = "",  # Removemos etiqueta del eje x (estados)
    y = "Índice P2 (normalizado)",
    caption = "Fuente: Análisis de datos del sector aeroespacial • Elaboración propia"
  ) +
  
  # Tema personalizado y profesional
  theme_minimal(base_size = 12, base_family = "Arial") +
  theme(
    # Configuración del título principal
    plot.title = element_text(
      size = 18, 
      face = "bold", 
      color = "#2c3e50",
      margin = margin(b = 5),
      hjust = 0
    ),
    
    # Configuración del subtítulo
    plot.subtitle = element_text(
      size = 13, 
      color = "#7f8c8d",
      margin = margin(b = 25),
      hjust = 0
    ),
    
    # Configuración del caption
    plot.caption = element_text(
      size = 10, 
      color = "#95a5a6",
      hjust = 0,
      margin = margin(t = 15)
    ),
    
    # Configuración de los ejes
    axis.title.x = element_text(
      size = 12, 
      color = "#2c3e50",
      margin = margin(t = 15)
    ),
    
    axis.text.y = element_text(
      size = 11, 
      color = "#2c3e50",
      margin = margin(r = 10)
    ),
    
    axis.text.x = element_text(
      size = 10, 
      color = "#2c3e50"
    ),
    
    # Configuración de la leyenda
    legend.position = "bottom",
    legend.title = element_text(size = 11, face = "bold"),
    legend.text = element_text(size = 10),
    legend.margin = margin(t = 20),
    legend.box = "horizontal",
    
    # Configuración de la grilla
    panel.grid.major.x = element_line(
      color = "#ecf0f1", 
      linewidth = 0.5,
      linetype = "solid"
    ),
    panel.grid.minor.x = element_line(
      color = "#f8f9fa", 
      linewidth = 0.3
    ),
    panel.grid.major.y = element_blank(),
    panel.grid.minor.y = element_blank(),
    
    # Configuración del fondo
    plot.background = element_rect(fill = "white", color = NA),
    panel.background = element_rect(fill = "white", color = NA),
    
    # Márgenes del plot
    plot.margin = margin(25, 25, 25, 25),
    
    # Configuración del panel
    panel.border = element_blank(),
    axis.line.x = element_line(color = "#bdc3c7", linewidth = 0.5)
  )

# matriz 8803 ------------------------------------------------------------- 

# Normalización entre 0 y 1
df_norm_8803_A <- df_unido_8803_A %>%
  mutate(across(all_of(vars), ~ rescale(.x, to = c(0,1), na.rm = TRUE)))

# Matriz de correlación
mat_cor_8803 <- cor(df_norm_8803_A[, vars], use = "pairwise.complete.obs")

# Penalización: promedio de correlaciones por fila
penalizacion <- rowMeans(abs(mat_cor_8803))

# Índice P2: promedio de variables - penalización
df_norm_8803_A$P2 <- rowMeans(df_norm_8803_A[, vars], na.rm = TRUE) - penalizacion
## Warning in rowMeans(df_norm_8803_A[, vars], na.rm = TRUE) - penalizacion:
## longer object length is not a multiple of shorter object length
df_resultados_8803 <- df_unido_8803_A %>%
  mutate(P2 = df_norm_8803_A$P2) %>%
  arrange(desc(P2))  # Ordenar de mayor a menor potencial

library(ggplot2)

ggplot(df_resultados_8803, aes(x = reorder(State, P2), y = P2)) +
  geom_col(fill = "steelblue") +
  coord_flip() +
  labs(title = "Índice P2 de Potencial Aeroespacial por Estado",
       x = "Estado", y = "Índice P2 (normalizado)") +
  theme_minimal()

library(ggplot2)
library(scales)

# Gráfica mejorada del Índice P2 de Potencial Aeroespacial (HS 8803)
ggplot(df_resultados_8803, aes(x = reorder(State, P2), y = P2)) +
  
  # Barras con gradiente de colores basado en el valor
  geom_col(aes(fill = P2), 
           width = 0.8, 
           alpha = 0.9,
           color = "white", 
           linewidth = 0.3) +
  
  # Añadir etiquetas de valores en las barras
  geom_text(aes(label = round(P2, 3)), 
            hjust = -0.1, 
            size = 3.5, 
            color = "#2c3e50",
            fontface = "bold") +
  
  # Voltear coordenadas para barras horizontales
  coord_flip() +
  
  # Escala de colores moderna (gradiente azul-verde)
  scale_fill_gradient2(
    low = "#3498db",      # Azul claro para valores bajos
    mid = "#2ecc71",      # Verde para valores medios
    high = "#e74c3c",     # Rojo para valores altos
    midpoint = median(df_resultados_8803$P2, na.rm = TRUE),
    name = "Índice P2",
    guide = guide_colorbar(
      title.position = "top",
      title.hjust = 0.5,
      barwidth = 15,
      barheight = 0.8
    )
  ) +
  
  # Escala del eje Y con formato mejorado
  scale_y_continuous(
    labels = number_format(accuracy = 0.001, decimal.mark = "."),
    expand = expansion(mult = c(0, 0.15))  # Espacio extra a la derecha para etiquetas
  ) +
  
  # Títulos y etiquetas mejorados
  labs(
    title = "Índice P2 de Potencial Aeroespacial por Estado (HS 8803)",
    subtitle = "Ranking de estados mexicanos según su capacidad en componentes aeroespaciales",
    x = "",  # Removemos etiqueta del eje x (estados)
    y = "Índice P2 (normalizado)",
    caption = "Fuente: Análisis de componentes aeroespaciales (HS 8803) • Elaboración propia"
  ) +
  
  # Tema personalizado y profesional
  theme_minimal(base_size = 12, base_family = "Arial") +
  theme(
    # Configuración del título principal
    plot.title = element_text(
      size = 18, 
      face = "bold", 
      color = "#2c3e50",
      margin = margin(b = 5),
      hjust = 0
    ),
    
    # Configuración del subtítulo
    plot.subtitle = element_text(
      size = 13, 
      color = "#7f8c8d",
      margin = margin(b = 25),
      hjust = 0
    ),
    
    # Configuración del caption
    plot.caption = element_text(
      size = 10, 
      color = "#95a5a6",
      hjust = 0,
      margin = margin(t = 15)
    ),
    
    # Configuración de los ejes
    axis.title.x = element_text(
      size = 12, 
      color = "#2c3e50",
      margin = margin(t = 15)
    ),
    
    axis.text.y = element_text(
      size = 11, 
      color = "#2c3e50",
      margin = margin(r = 10)
    ),
    
    axis.text.x = element_text(
      size = 10, 
      color = "#2c3e50"
    ),
    
    # Configuración de la leyenda
    legend.position = "bottom",
    legend.title = element_text(size = 11, face = "bold"),
    legend.text = element_text(size = 10),
    legend.margin = margin(t = 20),
    legend.box = "horizontal",
    
    # Configuración de la grilla
    panel.grid.major.x = element_line(
      color = "#ecf0f1", 
      linewidth = 0.5,
      linetype = "solid"
    ),
    panel.grid.minor.x = element_line(
      color = "#f8f9fa", 
      linewidth = 0.3
    ),
    panel.grid.major.y = element_blank(),
    panel.grid.minor.y = element_blank(),
    
    # Configuración del fondo
    plot.background = element_rect(fill = "white", color = NA),
    panel.background = element_rect(fill = "white", color = NA),
    
    # Márgenes del plot
    plot.margin = margin(25, 25, 25, 25),
    
    # Configuración del panel
    panel.border = element_blank(),
    axis.line.x = element_line(color = "#bdc3c7", linewidth = 0.5)
  )