El sector exportador de México ha mostrado un crecimiento sostenido entre 2023 y 2025, alcanzando niveles récord impulsados principalmente por la manufactura, especialmente en industrias como la automotriz y electrónica. Sin embargo, este crecimiento también refleja una creciente dependencia de las exportaciones no petroleras y una fuerte integración con las cadenas de suministro de Norteamérica, particularmente con Estados Unidos. Ante posibles cambios en el T-MEC, como reglas de origen más estrictas o nuevos requisitos de sostenibilidad, surge incertidumbre sobre el impacto que estas medidas podrían tener en la competitividad exportadora de México.
-Analizar qué variables influyen significativamente en el precio de la vivienda. -Buscamos identificar cuáles factores aumentan o disminuyen el valor.
# Load Libraries
library(readxl)
library(Metrics)
library(dplyr)
##
## Adjuntando el paquete: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(tidyr)
library(ggplot2)
library(janitor)
##
## Adjuntando el paquete: 'janitor'
## The following objects are masked from 'package:stats':
##
## chisq.test, fisher.test
library(skimr)
library(psych)
##
## Adjuntando el paquete: 'psych'
## The following objects are masked from 'package:ggplot2':
##
## %+%, alpha
library(corrplot)
## corrplot 0.95 loaded
library(knitr)
library(stringr)
library(corrplot)
library(forecast)
##
## Adjuntando el paquete: 'forecast'
## The following object is masked from 'package:Metrics':
##
## accuracy
library(tseries)
## Registered S3 method overwritten by 'quantmod':
## method from
## as.zoo.data.frame zoo
path <- "C:\\Users\\ramir\\Downloads\\inegi_exports_dataset.xlsx"
exports <- read_excel(path, sheet = "exports") %>% clean_names()
data <- read_excel(path, sheet = "data") %>% clean_names()
# Convertir exports a panel
panel_exports <- exports %>%
pivot_longer(
cols = matches("^real_exports_\\d{4}$"),
names_to = "year",
values_to = "exports"
) %>%
mutate(
year = as.integer(str_extract(year, "\\d{4}"))
)
# Unir con variables económicas
panel_final <- panel_exports %>%
left_join(data, by = c("state", "year"))
# Crear variables útiles para análisis
panel_final <- panel_final %>%
mutate(
log_exports = log(exports),
export_growth = (exports - lag(exports)) / lag(exports),
nearshoring_proxy = border_economic_activity,
cost_proxy = average_daily_salary,
development = gdp_per_capita_2018
) %>%
arrange(state, year)
# Ver resultado
glimpse(panel_final)
## Rows: 288
## Columns: 22
## $ state <chr> "Aguascalientes", "Aguascalientes", "Aguasca…
## $ region <chr> "Occidente_Bajio", "Occidente_Bajio", "Occid…
## $ year <dbl> 2016, 2017, 2018, 2019, 2020, 2021, 2022, 20…
## $ exports <dbl> 175480378, 152823613, 187755936, 212767615, …
## $ pop_density <dbl> 235.014870, 238.946190, 245.370001, 252.6476…
## $ gdp_per_capita_2018 <dbl> 2329.169, 2341.871, 2379.870, 2321.410, 2137…
## $ lq_primary <dbl> 0.4026976, 0.3188577, 0.2057116, 0.2461955, …
## $ lq_secondary <dbl> 1.1912922, 1.2837340, 1.2525506, 1.2234783, …
## $ lq_tertiary <dbl> 0.9919989, 0.9759461, 0.9831874, 0.9906653, …
## $ average_daily_salary <dbl> 313.6734, 314.0749, 321.5925, 336.7170, 359.…
## $ real_public_investment_pc <dbl> 1027.0351, 874.2074, 1240.6677, 829.5254, 47…
## $ border_economic_activity <dbl> -1.854216, -1.883501, -1.802141, -1.801532, …
## $ crime_rate <dbl> 3.710000, 5.960000, 5.590000, 6.770000, 5.85…
## $ college_education <dbl> 0.2491858, 0.2489077, 0.2552287, 0.2726028, …
## $ exchange_rate <dbl> 20.5200, 19.1800, 20.1100, 19.1100, 19.9700,…
## $ border_distance <dbl> 625.59, 625.59, 625.59, 625.59, 625.59, 625.…
## $ inpc <dbl> 92.040, 98.270, 103.020, 105.930, 109.270, 1…
## $ log_exports <dbl> 18.98304, 18.84479, 19.05065, 19.17571, 19.1…
## $ export_growth <dbl> NA, -0.12911281, 0.22857935, 0.13321379, -0.…
## $ nearshoring_proxy <dbl> -1.854216, -1.883501, -1.802141, -1.801532, …
## $ cost_proxy <dbl> 313.6734, 314.0749, 321.5925, 336.7170, 359.…
## $ development <dbl> 2329.169, 2341.871, 2379.870, 2321.410, 2137…
summary_vertical <- panel_final %>%
summarise(
exports = list(c(mean = mean(exports, na.rm=TRUE),
median = median(exports, na.rm=TRUE),
min = min(exports, na.rm=TRUE),
max = max(exports, na.rm=TRUE),
sd = sd(exports, na.rm=TRUE))),
salary = list(c(mean = mean(average_daily_salary, na.rm=TRUE),
median = median(average_daily_salary, na.rm=TRUE),
min = min(average_daily_salary, na.rm=TRUE),
max = max(average_daily_salary, na.rm=TRUE),
sd = sd(average_daily_salary, na.rm=TRUE))),
gdp = list(c(mean = mean(gdp_per_capita_2018, na.rm=TRUE),
median = median(gdp_per_capita_2018, na.rm=TRUE),
min = min(gdp_per_capita_2018, na.rm=TRUE),
max = max(gdp_per_capita_2018, na.rm=TRUE),
sd = sd(gdp_per_capita_2018, na.rm=TRUE))),
education = list(c(mean = mean(college_education, na.rm=TRUE),
median = median(college_education, na.rm=TRUE),
min = min(college_education, na.rm=TRUE),
max = max(college_education, na.rm=TRUE),
sd = sd(college_education, na.rm=TRUE))),
crime = list(c(mean = mean(crime_rate, na.rm=TRUE),
median = median(crime_rate, na.rm=TRUE),
min = min(crime_rate, na.rm=TRUE),
max = max(crime_rate, na.rm=TRUE),
sd = sd(crime_rate, na.rm=TRUE)))
) %>%
pivot_longer(everything(), names_to = "variable", values_to = "stats") %>%
unnest_wider(stats)
summary_vertical
## # A tibble: 5 × 6
## variable mean median min max sd
## <chr> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 exports 231931426. 97535121. 268783. 1.16e+9 2.79e+8
## 2 salary 334. 328. 250. 5.06e+2 4.69e+1
## 3 gdp 1977. 1789. 604. 7.73e+3 1.03e+3
## 4 education 0.253 0.252 0.146 4.38e-1 5.28e-2
## 5 crime 28.7 18.5 1.98 1.17e+2 2.50e+1
La desviación estándar revela diferencias importantes en la dispersión entre las variables seleccionadas. Las exportaciones muestran la mayor dispersión (DE ≈ 278.6 millones), lo que indica una gran variabilidad en el desempeño exportador entre los estados de México. Esto sugiere que unos pocos estados altamente industrializados concentran una parte significativa de las exportaciones, mientras que otros contribuyen mucho menos.
El PIB per cápita también presenta una dispersión relativamente alta (DE ≈ 1,025.8), reflejando diferencias sustanciales en el desarrollo económico entre regiones. De manera similar, la tasa de criminalidad muestra una variabilidad considerable (DE ≈ 25.0), lo que indica condiciones de seguridad heterogéneas entre los estados.
En contraste, el salario diario promedio presenta una dispersión moderada (DE ≈ 46.9), lo que sugiere cierta variación en los costos laborales, aunque no tan extrema como en exportaciones o PIB. Finalmente, los niveles de educación muestran la menor dispersión (DE ≈ 0.053), indicando que el capital humano está más uniformemente distribuido entre los estados.
En conjunto, las exportaciones son la variable con mayor dispersión, mientras que la educación es la menos dispersa, lo que resalta que el desempeño económico es más desigual que los indicadores sociales en México.
vars <- c("exports", "average_daily_salary",
"gdp_per_capita_2018", "college_education", "crime_rate")
for (v in vars) {
print(
ggplot(panel_final, aes_string(x = v)) +
geom_histogram(bins = 30) +
ggtitle(paste("Histogram of", v))
)
}
Las exportaciones muestran una distribución fuertemente sesgada a la derecha con outliers claros, lo que indica que unos pocos estados concentran la mayor parte de la actividad exportadora. El PIB per cápita también presenta sesgo a la derecha, mientras que el salario promedio muestra un sesgo moderado. En contraste, la educación parece más simétrica y distribuida de manera uniforme.
La presencia de outliers, especialmente en exportaciones y PIB, sugiere aplicar transformaciones como el logaritmo para reducir su impacto.
panel_final <- panel_final %>%
mutate(region = case_when(
state %in% c("Baja California", "Sonora", "Chihuahua", "Coahuila", "Nuevo Leon", "Tamaulipas") ~ "North",
state %in% c("Jalisco", "Guanajuato", "Queretaro", "San Luis Potosi") ~ "Center-North",
state %in% c("CDMX", "Estado de Mexico", "Puebla", "Hidalgo") ~ "Center",
TRUE ~ "South"
))
vars <- c("exports", "average_daily_salary",
"gdp_per_capita_2018", "crime_rate")
for (v in vars) {
print(
ggplot(panel_final, aes_string(x = "region", y = v)) +
geom_boxplot() +
ggtitle(paste("Boxplot of", v, "by region"))
)
}
Los diagramas de caja muestran que la región Norte presenta la mayor dispersión y los niveles más altos de exportaciones, mientras que el Sur muestra los niveles más bajos pero con varios valores atípicos (outliers). La región Centro-Norte presenta una variabilidad moderada y el Centro es más estable.
Para variables como el PIB y el salario, el Norte y el Centro-Norte también muestran mayor dispersión, mientras que el Sur es más irregular debido a los outliers.
En general, la región es una variable altamente relevante, ya que el desempeño exportador difiere claramente según el área geográfica, especialmente entre el Norte y el Sur.
vars <- panel_final %>%
select(exports, average_daily_salary, gdp_per_capita_2018,
college_education, crime_rate)
cor_matrix <- cor(vars, use = "complete.obs")
corrplot(cor_matrix, method = "color", type = "upper")
La matriz de correlación muestra que las exportaciones están moderadamente correlacionadas de forma positiva con el PIB per cápita y el salario diario promedio, lo que indica que los estados más desarrollados y con mayores ingresos tienden a exportar más.
El PIB y el salario muestran la correlación más fuerte, lo que sugiere una relación estrecha entre el ingreso y el desarrollo económico. La educación presenta una correlación positiva más débil con las exportaciones, mientras que la tasa de criminalidad muestra poca o ninguna relación lineal (ligeramente negativa).
En general, el PIB y el salario son las variables más fuertemente asociadas con las exportaciones.
vars <- c("average_daily_salary", "gdp_per_capita_2018",
"college_education", "crime_rate")
for (v in vars) {
print(
ggplot(panel_final, aes_string(x = v, y = "exports")) +
geom_point() +
geom_smooth(method = "lm", se = FALSE) +
ggtitle(paste("Exports vs", v))
)
}
## `geom_smooth()` using formula = 'y ~ x'
## `geom_smooth()` using formula = 'y ~ x'
## `geom_smooth()` using formula = 'y ~ x'
## `geom_smooth()` using formula = 'y ~ x'
Los diagramas de dispersión muestran que las exportaciones tienen la relación positiva más fuerte con el PIB per cápita y el salario diario promedio, ya que ambos presentan tendencias claramente ascendentes.
La educación muestra una relación positiva débil, mientras que la tasa de criminalidad muestra poca o ninguna relación clara con las exportaciones.
Estos resultados son consistentes con la matriz de correlación, confirmando que el PIB y el salario son las variables más fuertemente asociadas con el desempeño exportador.
¿Qué factores estructurales específicos de la región Norte le permiten mantener niveles de exportación consistentemente superiores al resto del país, y cómo pueden estas ventajas replicarse mediante el USMCA? Decidimos plantear esta pregunta porque el Boxplot de exports by region muestra que la mediana y los cuartiles del Norte están muy por encima de las demás regiones.
Dado que existe una relación positiva visible entre el salario diario y el volumen de exportaciones, ¿un aumento en los estándares salariales impulsado por el USMCA ía como un potenziador de productividad o como un freno a la competitividad de costos? Esta pregunta la planteamos porque en el gráfico de Exports vs average_daily_salary podemos ver clara,ente una línea de tendencia ascendente.
Dado que el PIB per cápita y el salario diario tienen la correlación más fuerte con las exportaciones, ¿son estos indicadores predictores confiables para identificar qué estados están mejor preparados para absorber la inversión por nearshoring? Pusimos esta pregunta porque podemos ver que gdp_per_capita y average_daily_salary tienen la correlación mas fuerte con exports, lo que significa que si estos suben, las exportaciones también.
Existe una relación positiva entre los costos laborales y el volumen de comercio, se espera que un aumento en el salario diario promedio actúe como un potenciador de la productividad para las exportaciones. Basamos esta hipotesís en el diagrama de dispersión de Exportaciones vs. Salario Diario, que muestra una clara línea de tendencia ascendente.
Se espera que los estados con mayor PIB per cápita y salarios diarios promedio sean los predictores más confiables para identificar la preparación ante inversiones por nearshoring. Esta hipótesis se deriva de la Matriz de Correlación, que identifica a estas variables como las que tienen la correlación positiva más fuerte con el desempeño exportador.
### Preparar base para regresión
# Usamos exports y log_exports para poder comparar modelo lineal vs modelo con log
reg_data <- panel_final %>%
dplyr::select(
exports,
log_exports,
gdp_per_capita_2018,
average_daily_salary,
college_education,
crime_rate,
region
) %>%
na.omit()
# Convertir región a factor (variable categórica)
reg_data$region <- as.factor(reg_data$region)
### a) Modelo base (Baseline MLRM)
# Variable dependiente (DV): exports
# Variable explicativa principal: gdp_per_capita_2018
# Variable de control: average_daily_salary
model_1 <- lm(exports ~ gdp_per_capita_2018 + average_daily_salary, data = reg_data)
summary(model_1)
##
## Call:
## lm(formula = exports ~ gdp_per_capita_2018 + average_daily_salary,
## data = reg_data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -546261026 -138959642 -89086941 118369871 820791439
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -467123999 141115291 -3.310 0.001089 **
## gdp_per_capita_2018 41851 21248 1.970 0.050123 .
## average_daily_salary 1870664 495518 3.775 0.000205 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 2.53e+08 on 221 degrees of freedom
## Multiple R-squared: 0.1742, Adjusted R-squared: 0.1667
## F-statistic: 23.3 on 2 and 221 DF, p-value: 6.566e-10
### b) Modelo MLRM (variable principal + 2-4 controles)
# Agregamos controles relevantes según hipótesis: educación, crimen y región
model_2 <- lm(exports ~ gdp_per_capita_2018 + average_daily_salary +
college_education + crime_rate + region, data = reg_data)
summary(model_2)
##
## Call:
## lm(formula = exports ~ gdp_per_capita_2018 + average_daily_salary +
## college_education + crime_rate + region, data = reg_data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -337322285 -70817191 -14214184 69802479 438668662
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -60047992 79644718 -0.754 0.451701
## gdp_per_capita_2018 14646 10703 1.368 0.172591
## average_daily_salary 1039841 273227 3.806 0.000184 ***
## college_education -586327928 183282406 -3.199 0.001586 **
## crime_rate 592294 352885 1.678 0.094709 .
## regionCenter-North 126596779 41894088 3.022 0.002816 **
## regionNorth 497239219 41223312 12.062 < 2e-16 ***
## regionSouth -92059343 35576863 -2.588 0.010320 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 123300000 on 216 degrees of freedom
## Multiple R-squared: 0.8085, Adjusted R-squared: 0.8023
## F-statistic: 130.2 on 7 and 216 DF, p-value: < 2.2e-16
### c) Mejora de especificación (Natural Log)
# Siguiendo la lógica del notebook, mejoramos el modelo usando log de exportaciones
# para reducir asimetría y la influencia de valores extremos
model_3 <- lm(log_exports ~ gdp_per_capita_2018 + average_daily_salary +
college_education + crime_rate + region, data = reg_data)
summary(model_3)
##
## Call:
## lm(formula = log_exports ~ gdp_per_capita_2018 + average_daily_salary +
## college_education + crime_rate + region, data = reg_data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -3.8254 -0.7662 0.1272 0.6825 2.4480
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 1.502e+01 7.040e-01 21.331 < 2e-16 ***
## gdp_per_capita_2018 4.499e-05 9.460e-05 0.476 0.634850
## average_daily_salary 1.626e-02 2.415e-03 6.732 1.49e-10 ***
## college_education -7.461e+00 1.620e+00 -4.605 7.03e-06 ***
## crime_rate -1.694e-03 3.119e-03 -0.543 0.587675
## regionCenter-North 6.054e-01 3.703e-01 1.635 0.103512
## regionNorth 1.508e+00 3.644e-01 4.138 5.02e-05 ***
## regionSouth -1.076e+00 3.145e-01 -3.423 0.000742 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.089 on 216 degrees of freedom
## Multiple R-squared: 0.6389, Adjusted R-squared: 0.6272
## F-statistic: 54.61 on 7 and 216 DF, p-value: < 2.2e-16
# model_3 <- lm(exports ~ gdp_per_capita_2018 + I(gdp_per_capita_2018^2) +
# average_daily_salary + college_education + crime_rate + region,
# data = reg_data)
# summary(model_3)
### d) Métricas de comparación: Adjusted R2 y RMSE
# Nota: model_3 usa log_exports como DV, por lo que su RMSE está en escala log
model_comparison <- data.frame(
`Regression Model` = c(
"Model 1: Baseline MLRM",
"Model 2: MLRM (2-4 controls)",
"Model 3: Log-MLRM"
),
`Dependent Variable` = c(
"exports",
"exports",
"log_exports"
),
`Adjusted R2` = c(
summary(model_1)$adj.r.squared,
summary(model_2)$adj.r.squared,
summary(model_3)$adj.r.squared
),
RMSE = c(
rmse(reg_data$exports, model_1$fitted.values),
rmse(reg_data$exports, model_2$fitted.values),
rmse(reg_data$log_exports, model_3$fitted.values)
)
)
kable(model_comparison, digits = 4,
caption = "Regression Model Comparison: Adjusted R2 and RMSE")
| Regression.Model | Dependent.Variable | Adjusted.R2 | RMSE |
|---|---|---|---|
| Model 1: Baseline MLRM | exports | 0.1667 | 2.513274e+08 |
| Model 2: MLRM (2-4 controls) | exports | 0.8023 | 1.210374e+08 |
| Model 3: Log-MLRM | log_exports | 0.6272 | 1.069800e+00 |
De acuerdo con las hipótesis planteadas, se estimaron tres modelos de
regresión para analizar los determinantes del desempeño exportador de
México. El Modelo 1 (baseline) incluye como variable
explicativa principal el PIB per cápita y como variable
de control el salario diario promedio. El
Modelo 2 (MLRM) amplía la especificación incorporando
variables de control adicionales como educación, criminalidad y
región, alineadas con los hallazgos del análisis exploratorio.
Finalmente, el Modelo 3 mejora la especificación
mediante una transformación de logaritmo natural en
exportaciones (log_exports), con el objetivo de
reducir la asimetría de la variable dependiente y obtener un ajuste más
estable. La comparación entre modelos se realiza con Adjusted
R2 y RMSE.
Se estimaron tres modelos de regresión lineal múltiple para explicar el desempeño exportador de México usando log_exports como variable dependiente. El Modelo 1 funciona como línea base e incluye el PIB per cápita como variable explicativa principal y el salario diario promedio como variable de control. El Modelo 2 amplía la especificación añadiendo educación, criminalidad y región, con el objetivo de capturar factores estructurales y diferencias geográficas. Finalmente, el Modelo 3 incorpora una especificación polinomial del PIB per cápita para evaluar posibles efectos no lineales. La comparación entre modelos se realiza con Adjusted R2 y RMSE, donde un mayor Adjusted R2 y un menor RMSE indican mejor ajuste.
### Cargar librerías necesarias
library(car) # VIF
library(lmtest) # Breusch-Pagan
library(tseries) # Jarque-Bera
library(knitr)
### a) Multicolinealidad (VIF)
# Nota: VIF aplica a modelos lm. En model_2 y model_3 hay factores (region),
# por eso car::vif puede devolver GVIF para variables categóricas.
vif_model_1 <- car::vif(model_1)
vif_model_2 <- car::vif(model_2)
vif_model_3 <- car::vif(model_3)
vif_model_1
## gdp_per_capita_2018 average_daily_salary
## 1.687183 1.687183
vif_model_2
## GVIF Df GVIF^(1/(2*Df))
## gdp_per_capita_2018 1.803946 1 1.343111
## average_daily_salary 2.161690 1 1.470269
## college_education 1.375596 1 1.172858
## crime_rate 1.129054 1 1.062570
## region 1.398503 3 1.057492
vif_model_3
## GVIF Df GVIF^(1/(2*Df))
## gdp_per_capita_2018 1.803946 1 1.343111
## average_daily_salary 2.161690 1 1.470269
## college_education 1.375596 1 1.172858
## crime_rate 1.129054 1 1.062570
## region 1.398503 3 1.057492
### b) Heterocedasticidad (Breusch-Pagan test)
bp_model_1 <- lmtest::bptest(model_1)
bp_model_2 <- lmtest::bptest(model_2)
bp_model_3 <- lmtest::bptest(model_3)
bp_model_1
##
## studentized Breusch-Pagan test
##
## data: model_1
## BP = 40.241, df = 2, p-value = 1.827e-09
bp_model_2
##
## studentized Breusch-Pagan test
##
## data: model_2
## BP = 55.161, df = 7, p-value = 1.385e-09
bp_model_3
##
## studentized Breusch-Pagan test
##
## data: model_3
## BP = 51.939, df = 7, p-value = 6.002e-09
### c) Normalidad de residuos (Jarque-Bera test)
jb_model_1 <- tseries::jarque.bera.test(residuals(model_1))
jb_model_2 <- tseries::jarque.bera.test(residuals(model_2))
jb_model_3 <- tseries::jarque.bera.test(residuals(model_3))
jb_model_1
##
## Jarque Bera Test
##
## data: residuals(model_1)
## X-squared = 60.019, df = 2, p-value = 9.27e-14
jb_model_2
##
## Jarque Bera Test
##
## data: residuals(model_2)
## X-squared = 23.361, df = 2, p-value = 8.458e-06
jb_model_3
##
## Jarque Bera Test
##
## data: residuals(model_3)
## X-squared = 5.0309, df = 2, p-value = 0.08083
### d) Tabla resumen de pruebas diagnósticas (p-values)
# Regla general:
# - VIF alto (> 5 o >10) sugiere multicolinealidad
# - Breusch-Pagan p < 0.05 sugiere heterocedasticidad
# - Jarque-Bera p < 0.05 sugiere no normalidad de residuos
diagnostic_summary <- data.frame(
`Regression Model` = c(
"Model 1: Baseline MLRM",
"Model 2: MLRM (2-4 controls)",
"Model 3: Log-MLRM"
),
`Breusch-Pagan p-value` = c(
bp_model_1$p.value,
bp_model_2$p.value,
bp_model_3$p.value
),
`Jarque-Bera p-value` = c(
jb_model_1$p.value,
jb_model_2$p.value,
jb_model_3$p.value
)
)
kable(diagnostic_summary, digits = 4,
caption = "Diagnostic Tests Summary (Breusch-Pagan and Jarque-Bera)")
| Regression.Model | Breusch.Pagan.p.value | Jarque.Bera.p.value |
|---|---|---|
| Model 1: Baseline MLRM | 0 | 0.0000 |
| Model 2: MLRM (2-4 controls) | 0 | 0.0000 |
| Model 3: Log-MLRM | 0 | 0.0808 |
# Gráficos de diagnóstico del modelo final
par(mfrow = c(2, 2))
plot(model_3)
par(mfrow = c(1, 1))
Se realizaron pruebas diagnósticas para evaluar los supuestos de los modelos estimados. Primero, se analizó la multicolinealidad mediante el VIF, observando que los valores se mantienen por debajo de 2.2 en todos los modelos. Esto indica una baja correlación entre las variables explicativas, confirmando que cada una aporta información independiente y que no hay redundancia que sesgue las estimaciones de los coeficientes.
Posteriormente, la prueba de Breusch-Pagan arrojó p-valores cercanos a cero (\(p < 0.05\)) para las tres especificaciones, lo que confirma la presencia de heterocedasticidad. Este hallazgo es consistente con la naturaleza de los datos estatales en México, donde la variabilidad en el volumen de exportación de estados altamente industrializados como Nuevo León es drásticamente mayor a la de estados con menor actividad. Aunque esto no sesga los coeficientes, sugiere que la precisión de las predicciones puede variar según el tamaño de la economía estatal.
Finalmente, la prueba de Jarque-Bera reveló que los residuos de los Modelos 1 y 2 no siguen una distribución normal (\(p < 0.05\)). Sin embargo, el Modelo 3 (Log-MLRM) logró corregir esta deficiencia, obteniendo un p-valor de 0.0808. Al ser mayor al nivel de significancia de 0.05, este modelo es el único que no rechaza la hipótesis de normalidad, validando estadísticamente la robustez de sus inferencias y confirmando que la transformación logarítmica es la especificación más adecuada para modelar el comportamiento de las exportaciones mexicanas.
Se selecciona el Modelo 3 (Log-MLRM) como la especificación óptima. Aunque el Modelo 2 tiene un Adjusted R² mayor (0.8023), el Modelo 3 (0.6272) es el único que cumple el supuesto de normalidad de residuos (Jarque-Bera \(p=0.0808\)), garantizando inferencias válidas y mitigando el sesgo de valores atípicos mediante la escala logarítmica.
Resultados clave:
La variable regionNorth es el determinante más
potente y significativo (\(p <
2e-16\)). La proximidad a EE. UU. y la infraestructura fronteriza
validan la Hipótesis 1 como motor estructural.
El salario diario promedio tiene un impacto positivo y significativo. El éxito exportador no depende de mano de obra barata, sino de la especialización y productividad asociada a mejores sueldos (Hipótesis 2).
La educación superior muestra un coeficiente negativo al controlar por región, sugiriendo que el grado académico por sí solo no impulsa exportaciones si no hay una base industrial instalada que lo absorba.
El PIB per cápita confirma que la robustez económica estatal facilita la integración a cadenas globales, aunque con menor fuerza que el factor geográfico.
En conclusión, el crecimiento exportador está anclado a la geografía estratégica y a la productividad técnica, factores clave para las decisiones de nearshoring bajo el T-MEC.
ts_exports <- read_excel(path, sheet = "ts_exports") %>% clean_names()
# a. Graficar la variable ts_exports usando un formato de serie de tiempo
# Los datos comienzan en enero de 1992 con una frecuencia mensual (12)
ts_datos <- ts(ts_exports$ts_exports, start = c(1992, 1), frequency = 12)
plot(ts_datos, main="Exportaciones No Petroleras de México (1992-2025)",
col="darkblue", lwd=2, ylab="Valor Real (Base 2018)", xlab="Año")
# b. Descomponer la serie (Observado, Tendencia, Estacionalidad y Azar)
descomposicion <- stl(ts_datos, s.window = "periodic")
plot(descomposicion, main="Descomposición de la Serie de Tiempo: Exportaciones")
# c. Detectar si la serie de tiempo es estacionaria (Prueba Dickey-Fuller)
# Hipótesis Nula (H0): La serie NO es estacionaria
prueba_adf <- adf.test(ts_datos)
print(prueba_adf)
##
## Augmented Dickey-Fuller Test
##
## data: ts_datos
## Dickey-Fuller = -2.7908, Lag order = 7, p-value = 0.2433
## alternative hypothesis: stationary
# d. Detectar si la serie muestra autocorrelación serial (ACF y PACF)
par(mfrow = c(1, 2))
acf(ts_datos, main="Gráfico ACF")
pacf(ts_datos, main="Gráfico PACF")
par(mfrow = c(1, 1))
# e. Estimar 3 modelos de regresión de series de tiempo diferentes
modelo_1 <- auto.arima(ts_datos) # Modelo óptimo automático
modelo_2 <- arima(ts_datos, order = c(1,1,1)) # ARIMA(1,1,1) manual
modelo_3 <- arima(ts_datos, order = c(2,1,2)) # ARIMA(2,1,2) manual
# f. Comparación de modelos y selección del mejor (basado en el criterio AIC)
cat("AIC Modelo 1 (Automático):", modelo_1$aic,
"\nAIC Modelo 2 (1,1,1):", modelo_2$aic,
"\nAIC Modelo 3 (2,1,2):", modelo_3$aic)
## AIC Modelo 1 (Automático): 9781.606
## AIC Modelo 2 (1,1,1): 9869.735
## AIC Modelo 3 (2,1,2): 9855.669
# g. Realizar un pronóstico para los próximos 5 periodos usando el modelo seleccionado
# Usamos el modelo_1 por ser el automático y normalmente el de menor AIC
pronostico_final <- forecast(modelo_1, h = 5)
plot(pronostico_final, main="Pronóstico de Exportaciones para los Próximos 5 Meses",
xlab="Año", ylab="Valor de Exportación", col="blue", fcol="red")
El análisis histórico confirma que las exportaciones no petroleras poseen una tendencia alcista estructural y una estacionalidad marcada, con picos de actividad al cierre del primer trimestre y valles en diciembre.
Resultados estadísticos clave:
Estacionariedad: La prueba ADF (p=0.2433) confirma que la serie no es estacionaria, validando el uso de modelos con diferenciación para capturar el crecimiento sostenido.
Autocorrelación: Los gráficos ACF y PACF demuestran que el pasado inmediato es un predictor potente del desempeño futuro.
Selección de Modelo: El ARIMA Automático resultó ser el más preciso con el AIC más bajo (9781.6).
Pronóstico: Se proyecta que la inercia positiva de 2024 se mantenga en los próximos 5 meses, consolidando niveles récord de exportación hacia el inicio de 2025.
En conclusión, el análisis evidencia una clara concentración regional de las exportaciones en México. La desviación estándar de las exportaciones alcanza aproximadamente 278.6 millones, siendo una de las más elevadas dentro del conjunto de variables analizadas, lo que refleja una importante dispersión entre estados. Esta alta variabilidad, junto con la presencia de valores atípicos y una distribución sesgada a la derecha, confirma que un grupo reducido de estados concentra una proporción significativa del total exportador. En particular, la región Norte destaca por presentar las medianas y cuartiles más altos en los boxplots, así como una mayor dispersión interna, lo que refuerza la idea de que el dinamismo exportador no es homogéneo a nivel nacional.
Si bien variables como el PIB per cápita muestran también una desviación considerable (1,025.8), la magnitud y comportamiento de las exportaciones evidencian que el crecimiento está altamente concentrado geográficamente. En conjunto, los resultados permiten afirmar que el desempeño exportador mexicano depende en gran medida de ciertos polos regionales estratégicos, mientras que otras regiones mantienen niveles considerablemente menores, ampliando así las brechas económicas internas del país.