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)
)
