1. Introducción

En este documento se abordan las principales características de una base de datos de series de tiempo y su importancia para pronosticar cambios en los flujos de inversión extranjera directa (IED) asociados con decisiones de “Nearshoring” en México.

Características de las Series de Tiempo

Las series de tiempo contienen observaciones recolectadas en intervalos regulares (mensuales, trimestrales o anuales) y presentan dependencias o correlaciones temporales (autocorrelación). Su análisis permite identificar patrones de tendencia y estacionalidad que pueden influir en el comportamiento futuro de la variable estudiada. Además, las series de tiempo permiten evaluar la estacionalidad, tendencia, ciclos económicos y variabilidad estocástica de las variables de interés.

Contribución del Análisis al Nearshoring

El análisis de series de tiempo contribuye a: - Identificar tendencias y patrones cíclicos o estacionales en la IED. - Estimar modelos estadísticos (ARMA, ARIMA, VAR, Panel VAR) para generar pronósticos. - Informar decisiones estratégicas de empresas y gobiernos sobre la relocalización de operaciones. - Evaluar escenarios optimistas y pesimistas sobre la llegada de nuevas inversiones a México bajo el esquema de “Nearshoring”.

2. Visualización de Datos

En esta sección se presentan gráficos de series de tiempo que muestran el desempeño de las variables de interés (flujos de IED, tipo de cambio, exportaciones) para identificar posibles tendencias, estacionalidad y autocorrelación.

# Carga de librerías
library(readxl)
library(ggplot2)
library(plm)
library(forecast)
library(tseries)
library(zoo)
library(vars)
library(lmtest)
library(dplyr)
library(panelvar)
library(urca)
library(TSA)
library(xts)

# Carga de datos
data <- read_excel("/Users/gabrielmedina/Downloads/panel_data_actualizada.xlsx", sheet = "time series data")

# Comprobación de columnas y primeros datos
print(colnames(data))
## [1] "Year"            "Quarter"         "New_FDI_Inflows" "Exchange_Rate"  
## [5] "INPC"            "Exports"
print(head(data))
## # A tibble: 6 × 6
##   Year  Quarter New_FDI_Inflows Exchange_Rate  INPC Exports
##   <chr> <chr>             <dbl>         <dbl> <dbl>   <dbl>
## 1 2006  I                  897.          10.8  60.8  17375.
## 2 2006  II                2110.          10.9  60.6  17909.
## 3 2006  III               1284.          10.9  61.7  17505.
## 4 2006  IV                2678.          10.9  62.7  17486.
## 5 2007  I                 3108.          10.9  63.3  18499.
## 6 2007  II                2561.          10.9  63.1  19239.
# Eliminación de filas con valores faltantes
data <- na.omit(data)

# Procesamiento de la columna Quarter
data$Quarter <- trimws(as.character(data$Quarter))
valid_quarters <- c("I", "II", "III", "IV")
data <- data[data$Quarter %in% valid_quarters, ]
data$Quarter <- as.numeric(factor(data$Quarter, levels = valid_quarters, labels = c(1, 2, 3, 4)))

# Creación de fechas y series de tiempo
data$YearQuarter <- paste(data$Year, data$Quarter)
data$Date <- as.Date(as.yearqtr(data$YearQuarter, format="%Y %q"))

ts_fdi <- ts(data$New_FDI_Inflows, start=c(min(data$Year), min(data$Quarter)), frequency=4)
ts_exchange <- ts(data$Exchange_Rate, start=c(min(data$Year), min(data$Quarter)), frequency=4)
ts_exports <- ts(data$Exports, start=c(min(data$Year), min(data$Quarter)), frequency=4)

Gráficos de series de tiempo

Para comenzar el análisis exploratorio de los datos se visualizan los datos de la serie de tiempo de la base de datos.

# Gráficos de las variables de interés
par(mfrow=c(3,1))
plot(data$Date, data$New_FDI_Inflows, type="l", col="blue",
     main="Flujos de Inversión Extranjera Directa (FDI)",
     xlab="Fecha (Trimestres)", ylab="Millones USD")

plot(data$Date, data$Exchange_Rate, type="l", col="red",
     main="Evolución del Tipo de Cambio",
     xlab="Fecha (Trimestres)", ylab="Pesos por USD")

plot(data$Date, data$Exports, type="l", col="green",
     main="Evolución de las Exportaciones",
     xlab="Fecha (Trimestres)", ylab="Millones USD")

Las tres gráficas muestran la evolución de los flujos de Inversión Extranjera Directa (FDI), el tipo de cambio y las exportaciones en México a lo largo del tiempo. La primera gráfica indica que los flujos de FDI han sido volátiles, con algunos picos notables, como el registrado alrededor de 2014, seguido de fluctuaciones moderadas. Esto sugiere que la inversión extranjera en México ha respondido a eventos económicos y políticos específicos, reflejando posibles cambios en políticas de inversión o incentivos fiscales.

La segunda gráfica muestra la evolución del tipo de cambio, que ha presentado una tendencia creciente desde 2008 hasta aproximadamente 2020, con periodos de estabilidad y algunas caídas recientes. Esto implica que el peso mexicano se ha depreciado frente al dólar en el largo plazo, lo que podría haber favorecido las exportaciones al hacerlas más competitivas. La tercera gráfica confirma esto con un crecimiento sostenido en las exportaciones, especialmente después de 2015, lo que sugiere que la depreciación del peso y el auge del nearshoring han impulsado la actividad comercial de México con el exterior.

Análisis detallado…

Flujos de Inversión Extranjera Directa (FDI)

  • Tendencia: No se observa una tendencia clara, sino fluctuaciones irregulares con picos esporádicos (por ejemplo, en 2014).
  • Estacionalidad: No hay una estacionalidad evidente, lo que sugiere que los flujos de inversión extranjera no siguen un patrón cíclico predecible.
  • Autocorrelación: Podría haber autocorrelación en ciertos periodos, dado que los picos de inversión pueden estar relacionados con políticas económicas o reformas.
  • Estacionariedad: La serie no parece estacionaria, ya que presenta variaciones en su media y varianza a lo largo del tiempo. Se requeriría una prueba estadística

Evolución del Tipo de Cambio

  • Tendencia: Presenta una tendencia creciente desde 2008 hasta 2020, con una ligera reducción en los últimos años.
  • Estacionalidad: No se observa una estacionalidad clara, aunque algunos cambios bruscos pueden estar relacionados con eventos económicos globales.
  • Autocorrelación: Probablemente tenga una alta autocorrelación, dado que el tipo de cambio suele depender de su valor en periodos previos.
  • Estacionariedad: No es estacionaria, ya que muestra una tendencia de largo plazo y cambios en la varianza. Se requeriría una transformación (como diferenciación) para hacerla estacionaria.

Evolución de las Exportaciones

  • Tendencia: Se observa una tendencia creciente en las exportaciones a lo largo del tiempo, lo que sugiere un fortalecimiento del comercio exterior.
  • Estacionalidad: Es posible que haya cierta estacionalidad, ya que las exportaciones pueden estar influenciadas por ciclos económicos globales o demanda en determinados periodos del año.
  • Autocorrelación: Es probable que exista autocorrelación, ya que las exportaciones tienden a crecer de manera persistente en el tiempo.
  • Estacionariedad: No parece ser estacionaria debido a su tendencia creciente. Se necesitaría una diferenciación para estabilizar la media y varianza.

En resumen, ninguna de las series parece ser estacionaria, ya que todas presentan tendencias o fluctuaciones en su varianza. Para realizar modelos predictivos robustos, sería necesario aplicar transformaciones como diferenciación o pruebas de estacionariedad.

3. Estimación de Modelos de Series de Tiempo

Modelo ARMA

# Ejemplo de modelo ARMA(1,1) sobre la serie ts_fdi
model_arma <- arima(ts_fdi, order = c(1, 0, 1))
summary(model_arma)
## 
## Call:
## arima(x = ts_fdi, order = c(1, 0, 1))
## 
## Coefficients:
##          ar1      ma1  intercept
##       0.7677  -1.0000  2957.8654
## s.e.  0.0839   0.0376    44.7353
## 
## sigma^2 estimated as 4744450:  log likelihood = -674.97,  aic = 1355.94
## 
## Training set error measures:
## Warning in trainingaccuracy(object, test, d, D): test elements must be within
## sample
##               ME RMSE MAE MPE MAPE
## Training set NaN  NaN NaN NaN  NaN
checkresiduals(model_arma)

## 
##  Ljung-Box test
## 
## data:  Residuals from ARIMA(1,0,1) with non-zero mean
## Q* = 8.6785, df = 6, p-value = 0.1925
## 
## Model df: 2.   Total lags used: 8

El modelo ARMA sugiere que la serie de flujos de inversión extranjera presenta una dependencia moderada con su valor inmediato anterior (ar1 = 0.7677) y un componente de media móvil (ma1) bastante pronunciado en -1.0000. El intercepto (2957.8654) representa el valor promedio de la serie cuando los efectos AR y MA se compensan. El hecho de que la prueba de Ljung-Box muestre un p-value de 0.1925 indica que no hay evidencia estadísticamente significativa de autocorrelación en los residuos, lo que sugiere que el modelo capta adecuadamente la dinámica de la serie.

Por otra parte, el valor de sigma^2 (4744450) se interpreta como la varianza de los residuos y el AIC (1355.94) brinda una referencia para comparar con otros posibles modelos. En conjunto, los resultados apuntan a que un ARMA con intercepto logra explicar de manera razonable la variabilidad de los flujos de inversión.

Modelo ARIMA

arima_fdi <- auto.arima(ts_fdi, seasonal = FALSE)
summary(arima_fdi)
## Series: ts_fdi 
## ARIMA(0,0,0) with non-zero mean 
## 
## Coefficients:
##            mean
##       2890.7131
## s.e.   268.7113
## 
## sigma^2 = 5416412:  log likelihood = -678.18
## AIC=1360.36   AICc=1360.53   BIC=1364.97
## 
## Training set error measures:
##                         ME    RMSE      MAE      MPE    MAPE      MASE
## Training set -4.916188e-14 2311.54 1504.828 -56.3453 94.2923 0.6677783
##                    ACF1
## Training set 0.02674732

El modelo ARIMA(0,0,0) básicamente nos dice que los flujos de inversión extranjera directa (IED) no siguen una tendencia clara ni tienen una estructura predecible. La media estimada es de 2890.71 millones de USD, lo que indica que, en promedio, los valores fluctúan alrededor de ese nivel sin patrones evidentes de crecimiento o caída. Es como si los datos fueran puro ruido, sin un componente autoregresivo o de medias móviles que permita hacer buenas predicciones basadas en el pasado.

Además, el RMSE de 2311.54 y el MAPE del 94.29% nos dicen que el modelo no predice con mucha precisión, lo que sugiere que los flujos de IED han sido muy volátiles. La baja autocorrelación en los residuos confirma que no hay una estructura clara en los datos. En resumen, este modelo no ayuda mucho para hacer pronósticos confiables, y tal vez sería mejor probar enfoques más complejos que incorporen factores externos, como la política económica, cambios en tratados comerciales o el impacto del nearshoring.

Modelo VAR

# Cargar la librería necesaria
library(vars)

# Combinar las series en un solo objeto
data_var <- cbind(ts_fdi, ts_exchange, ts_exports)

# Seleccionar el orden óptimo del VAR (p) con un máximo de 8 rezagos
lag_select <- VARselect(data_var, lag.max = 8, type = "const")
print(lag_select)
## $selection
## AIC(n)  HQ(n)  SC(n) FPE(n) 
##      1      1      1      1 
## 
## $criteria
##                   1            2            3            4            5
## AIC(n) 3.045252e+01 3.058149e+01 3.063477e+01 3.069686e+01 3.085145e+01
## HQ(n)  3.060984e+01 3.085679e+01 3.102806e+01 3.120814e+01 3.148072e+01
## SC(n)  3.085064e+01 3.127820e+01 3.163007e+01 3.199075e+01 3.244393e+01
## FPE(n) 1.680954e+13 1.916084e+13 2.030379e+13 2.179089e+13 2.578973e+13
##                   6            7            8
## AIC(n) 3.099795e+01 3.108901e+01 3.118014e+01
## HQ(n)  3.174520e+01 3.195424e+01 3.216336e+01
## SC(n)  3.288901e+01 3.327866e+01 3.366838e+01
## FPE(n) 3.048291e+13 3.437840e+13 3.918325e+13
# Ajustar el modelo VAR con el número de rezagos recomendado (por ejemplo, p=2)
var_model <- VAR(data_var, p = 2, type = "const")
summary(var_model)
## 
## VAR Estimation Results:
## ========================= 
## Endogenous variables: ts_fdi, ts_exchange, ts_exports 
## Deterministic variables: const 
## Sample size: 72 
## Log Likelihood: -1378.207 
## Roots of the characteristic polynomial:
## 0.9755 0.8898 0.2845 0.2845 0.2042 0.2042
## Call:
## VAR(y = data_var, p = 2, type = "const")
## 
## 
## Estimation results for equation ts_fdi: 
## ======================================= 
## ts_fdi = ts_fdi.l1 + ts_exchange.l1 + ts_exports.l1 + ts_fdi.l2 + ts_exchange.l2 + ts_exports.l2 + const 
## 
##                  Estimate Std. Error t value Pr(>|t|)  
## ts_fdi.l1         0.03265    0.12133   0.269   0.7887  
## ts_exchange.l1 -498.05573  406.29671  -1.226   0.2247  
## ts_exports.l1     0.13679    0.14972   0.914   0.3643  
## ts_fdi.l2        -0.01699    0.12144  -0.140   0.8892  
## ts_exchange.l2  602.47127  429.27423   1.403   0.1652  
## ts_exports.l2    -0.20397    0.14735  -1.384   0.1710  
## const          3268.29108 1374.74210   2.377   0.0204 *
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## 
## Residual standard error: 2367 on 65 degrees of freedom
## Multiple R-Squared: 0.06753, Adjusted R-squared: -0.01855 
## F-statistic: 0.7845 on 6 and 65 DF,  p-value: 0.5852 
## 
## 
## Estimation results for equation ts_exchange: 
## ============================================ 
## ts_exchange = ts_fdi.l1 + ts_exchange.l1 + ts_exports.l1 + ts_fdi.l2 + ts_exchange.l2 + ts_exports.l2 + const 
## 
##                  Estimate Std. Error t value Pr(>|t|)    
## ts_fdi.l1       1.643e-05  3.878e-05   0.424    0.673    
## ts_exchange.l1  9.250e-01  1.299e-01   7.122 1.05e-09 ***
## ts_exports.l1  -3.152e-05  4.786e-05  -0.659    0.512    
## ts_fdi.l2       1.555e-05  3.882e-05   0.401    0.690    
## ts_exchange.l2  3.990e-02  1.372e-01   0.291    0.772    
## ts_exports.l2   3.455e-05  4.710e-05   0.734    0.466    
## const           4.860e-01  4.394e-01   1.106    0.273    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## 
## Residual standard error: 0.7568 on 65 degrees of freedom
## Multiple R-Squared: 0.9584,  Adjusted R-squared: 0.9546 
## F-statistic: 249.8 on 6 and 65 DF,  p-value: < 2.2e-16 
## 
## 
## Estimation results for equation ts_exports: 
## =========================================== 
## ts_exports = ts_fdi.l1 + ts_exchange.l1 + ts_exports.l1 + ts_fdi.l2 + ts_exchange.l2 + ts_exports.l2 + const 
## 
##                  Estimate Std. Error t value Pr(>|t|)    
## ts_fdi.l1      -4.859e-03  9.844e-02  -0.049   0.9608    
## ts_exchange.l1 -3.415e+02  3.296e+02  -1.036   0.3041    
## ts_exports.l1   7.835e-01  1.215e-01   6.449 1.61e-08 ***
## ts_fdi.l2      -7.532e-03  9.853e-02  -0.076   0.9393    
## ts_exchange.l2  6.319e+02  3.483e+02   1.814   0.0743 .  
## ts_exports.l2   1.074e-01  1.196e-01   0.898   0.3725    
## const          -6.742e+02  1.115e+03  -0.604   0.5476    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## 
## Residual standard error: 1921 on 65 degrees of freedom
## Multiple R-Squared: 0.9629,  Adjusted R-squared: 0.9595 
## F-statistic: 281.4 on 6 and 65 DF,  p-value: < 2.2e-16 
## 
## 
## 
## Covariance matrix of residuals:
##                ts_fdi ts_exchange ts_exports
## ts_fdi      5604969.7    103.7937  -106553.9
## ts_exchange     103.8      0.5727     -216.7
## ts_exports  -106553.9   -216.6976  3689649.5
## 
## Correlation matrix of residuals:
##               ts_fdi ts_exchange ts_exports
## ts_fdi       1.00000     0.05793   -0.02343
## ts_exchange  0.05793     1.00000   -0.14907
## ts_exports  -0.02343    -0.14907    1.00000
# Prueba de autocorrelación en los residuos del VAR
serial_test <- serial.test(var_model, lags.pt = 16, type = "PT.asymptotic")
print(serial_test)
## 
##  Portmanteau Test (asymptotic)
## 
## data:  Residuals of VAR object var_model
## Chi-squared = 129.92, df = 126, p-value = 0.3872
## $serial
## 
##  Portmanteau Test (asymptotic)
## 
## data:  Residuals of VAR object var_model
## Chi-squared = 129.92, df = 126, p-value = 0.3872

El modelo VAR de orden 2 evidencia que, en la ecuación de los flujos de IED, ninguno de los rezagos de las variables resulta estadísticamente significativo, salvo el intercepto, lo que sugiere que la dinámica de la IED podría estar influenciada por factores no incluidos en este sistema o por shocks externos. En contraste, la ecuación del tipo de cambio muestra una alta persistencia, ya que el primer rezago de la tasa de cambio (ts_exchange.l1) es altamente significativo, lo que indica que el valor actual del tipo de cambio depende fuertemente de su valor pasado. De igual manera, en la ecuación de exportaciones, el primer rezago de exportaciones (ts_exports.l1) resulta significativo, sugiriendo un comportamiento inercial en esta variable.

Por otro lado, las pruebas de autocorrelación, como el test de Portmanteau (p-value = 0.3872), indican que los residuos del VAR no presentan autocorrelación significativa, lo cual respalda la adecuación del modelo. En conjunto, estos resultados sugieren que, si bien el tipo de cambio y las exportaciones tienen una dinámica interna marcada por sus propios rezagos, la IED podría requerir la incorporación de otros factores o variables para captar de manera adecuada su comportamiento o natural.

Pruebas de Diagnóstico

ARMA

# Obtener los residuos del modelo ARMA
res_arma <- residuals(model_arma)

# a. Prueba de autocorrelación serial: Test de Ljung-Box
lb_test <- Box.test(res_arma, lag = 16, type = "Ljung-Box")
print(lb_test)
## 
##  Box-Ljung test
## 
## data:  res_arma
## X-squared = 13.773, df = 16, p-value = 0.6156
# b. Prueba de estacionariedad: Test de Dickey-Fuller aumentado (ADF)
library(tseries)
adf_test <- adf.test(res_arma)
## Warning in adf.test(res_arma): p-value smaller than printed p-value
print(adf_test)
## 
##  Augmented Dickey-Fuller Test
## 
## data:  res_arma
## Dickey-Fuller = -4.7591, Lag order = 4, p-value = 0.01
## alternative hypothesis: stationary

El test de Ljung-Box muestra un valor de chi-cuadrado de 13.773 con 16 grados de libertad y un p-value de 0.6156. Esto indica que no se rechaza la hipótesis nula de ausencia de autocorrelación en los residuos, lo que sugiere que estos se comportan como ruido blanco, es decir, no presentan patrones seriales que el modelo no haya captado.

Por otro lado, el test de Dickey-Fuller Aumentado arroja un estadístico de -4.7591 con un p-value de 0.01, lo que permite rechazar la hipótesis nula de la presencia de una raíz unitaria. Esto confirma que la serie (o los residuos, en este caso) es estacionaria. En conjunto, ambos resultados indican que el modelo ARMA se ajusta adecuadamente a la estructura temporal de la serie, ya que captura la dependencia temporal sin dejar autocorrelación en los residuos y asegura la estacionariedad requerida.

ARIMA

# Supongamos que tu modelo ARIMA ya está estimado y se llama 'model_arima'
# Por ejemplo:
# model_arima <- arima(ts_fdi, order = c(1, 0, 1))

# 1. Extraer los residuos del modelo ARIMA
res_arima <- residuals(arima_fdi)

# 2. Prueba de autocorrelación serial: Ljung-Box test
lb_test <- Box.test(res_arima, lag = 16, type = "Ljung-Box")
print(lb_test)
## 
##  Box-Ljung test
## 
## data:  res_arima
## X-squared = 12.901, df = 16, p-value = 0.68
# 3. Prueba de estacionariedad: Augmented Dickey-Fuller (ADF)
library(tseries)
adf_test <- adf.test(res_arima)
## Warning in adf.test(res_arima): p-value smaller than printed p-value
print(adf_test)
## 
##  Augmented Dickey-Fuller Test
## 
## data:  res_arima
## Dickey-Fuller = -5.014, Lag order = 4, p-value = 0.01
## alternative hypothesis: stationary

El test de Ljung-Box aplicado a los residuos del modelo ARIMA arroja un estadístico chi-cuadrado de 12.901 con 16 grados de libertad y un p-value de 0.68. Dado que el p-value es alto, no se rechaza la hipótesis nula de que los residuos son ruido blanco, lo que indica que el modelo ha capturado bien la estructura temporal de la serie y no deja patrones de autocorrelación significativos.

Por otro lado, el test de Dickey-Fuller Aumentado (ADF) muestra un estadístico de -5.014 con un p-value de 0.01, lo que permite rechazar la hipótesis nula de que los residuos tienen una raíz unitaria. Esto confirma que los residuos del modelo son estacionarios, un requisito clave para validar la adecuación del ARIMA.

En conjunto, estos resultados indican que el modelo ARIMA está correctamente especificado, ya que sus residuos se comportan como ruido blanco y no presentan problemas de autocorrelación ni de no estacionariedad.

VAR

library(vars)

# 1. Prueba de autocorrelación serial (Portmanteau)
serial_test <- serial.test(var_model, lags.pt = 16, type = "PT.asymptotic")
print(serial_test)
## 
##  Portmanteau Test (asymptotic)
## 
## data:  Residuals of VAR object var_model
## Chi-squared = 129.92, df = 126, p-value = 0.3872
## $serial
## 
##  Portmanteau Test (asymptotic)
## 
## data:  Residuals of VAR object var_model
## Chi-squared = 129.92, df = 126, p-value = 0.3872
# 2. Prueba de normalidad de los residuos
normality_test <- normality.test(var_model)
print(normality_test)
## $JB
## 
##  JB-Test (multivariate)
## 
## data:  Residuals of VAR object var_model
## Chi-squared = 499.78, df = 6, p-value < 2.2e-16
## 
## 
## $Skewness
## 
##  Skewness only (multivariate)
## 
## data:  Residuals of VAR object var_model
## Chi-squared = 82.054, df = 3, p-value < 2.2e-16
## 
## 
## $Kurtosis
## 
##  Kurtosis only (multivariate)
## 
## data:  Residuals of VAR object var_model
## Chi-squared = 417.73, df = 3, p-value < 2.2e-16
## $jb.mul
## $jb.mul$JB
## 
##  JB-Test (multivariate)
## 
## data:  Residuals of VAR object var_model
## Chi-squared = 499.78, df = 6, p-value < 2.2e-16
## 
## 
## $jb.mul$Skewness
## 
##  Skewness only (multivariate)
## 
## data:  Residuals of VAR object var_model
## Chi-squared = 82.054, df = 3, p-value < 2.2e-16
## 
## 
## $jb.mul$Kurtosis
## 
##  Kurtosis only (multivariate)
## 
## data:  Residuals of VAR object var_model
## Chi-squared = 417.73, df = 3, p-value < 2.2e-16
# 3. Prueba de heterocedasticidad (ARCH test)
arch_test <- arch.test(var_model)
print(arch_test)
## 
##  ARCH (multivariate)
## 
## data:  Residuals of VAR object var_model
## Chi-squared = 192.87, df = 180, p-value = 0.2427
## $arch.mul
## 
##  ARCH (multivariate)
## 
## data:  Residuals of VAR object var_model
## Chi-squared = 192.87, df = 180, p-value = 0.2427
# 4. Verificación de estabilidad: obtener y graficar las raíces del polinomio característico
roots_var <- roots(var_model)
print(roots_var)
## [1] 0.9754563 0.8898220 0.2845121 0.2845121 0.2042252 0.2042252
plot(roots(var_model), main = "Raíces del VAR", xlab = "Parte Real", ylab = "Parte Imaginaria")

Interpretación de las pruebas de diagnóstico del VAR:

Autocorrelación (Portmanteau Test): El test arroja un p-value de 0.3872, lo que indica que no hay evidencia significativa de autocorrelación en los residuos. Esto sugiere que el modelo VAR captura adecuadamente la dependencia temporal.

Normalidad (Jarque-Bera Multivariado): El p-value < 2.2e-16 revela que los residuos no siguen una distribución normal. Esta desviación de normalidad podría indicar la presencia de colas gruesas o asimetría en los datos. Heterocedasticidad (ARCH Test): El p-value de 0.2427 sugiere que no hay evidencia estadísticamente significativa de heterocedasticidad en los residuos, por lo que la varianza parece ser constante en el tiempo.

Estabilidad (Raíces del polinomio característico): Todas las raíces están por debajo de 1 (en valor absoluto), lo que implica que el modelo VAR es estable. En otras palabras, las perturbaciones tienden a disiparse en lugar de amplificarse a lo largo del tiempo.

En conjunto, el VAR no presenta problemas de autocorrelación ni heterocedasticidad, y sus ecuaciones son estables. Sin embargo, la no normalidad de los residuos podría requerir ajustes o transformaciones adicionales si la normalidad es un supuesto crítico para la inferencia.

Selección de Modelo e Interpretación de Resultados

En términos de pronóstico específico para la serie de flujos de IED, el modelo ARIMA(1,0,1) ofrece un mejor ajuste. Las pruebas de diagnóstico muestran que sus residuos son estacionarios (test ADF con p-value < 0.05) y no presentan autocorrelación (test de Ljung-Box con p-value > 0.05), lo que indica que el modelo capta de manera adecuada la estructura temporal de la variable sin dejar patrones sin explicar. Esto lo convierte en una opción confiable para predecir el comportamiento de la IED en el tiempo.

Por su parte, el modelo VAR es valioso si se busca capturar relaciones dinámicas entre múltiples variables (IED, tipo de cambio y exportaciones). Si bien no presenta autocorrelación serial y es estable (todas las raíces por debajo de 1), el incumplimiento de la normalidad de los residuos y la falta de significancia en la ecuación de IED sugieren que, para un pronóstico univariante de la IED, el ARIMA(1,0,1) resulta más apropiado. El VAR es recomendable cuando el interés radica en el efecto conjunto y la interacción entre las distintas variables.

Mejora de ARIMA

# Cargar librerías
library(forecast)
library(tseries)

# 1. Transformación Box-Cox para estabilizar la varianza (opcional, pero recomendable si la serie muestra heterocedasticidad)
lambda <- BoxCox.lambda(ts_fdi)         # Determina el mejor lambda automáticamente
## Warning in guerrero(x, lower, upper): Guerrero's method for selecting a Box-Cox
## parameter (lambda) is given for strictly positive data.
ts_fdi_bc <- BoxCox(ts_fdi, lambda)     # Aplica la transformación Box-Cox

# 2. Ajuste exhaustivo de ARIMA con auto.arima
#    - stepwise=FALSE y approximation=FALSE realizan una búsqueda más amplia en el espacio de modelos.
#    - seasonal=FALSE asume que no hay componente estacional, ajusta según tus datos (si trimestral con estacionalidad, pon seasonal=TRUE).
model_improved <- auto.arima(
  ts_fdi_bc,
  stepwise = FALSE,
  approximation = FALSE,
  seasonal = FALSE
)

# 3. Revisar el resumen del modelo
summary(model_improved)
## Series: ts_fdi_bc 
## ARIMA(4,0,0) with non-zero mean 
## 
## Coefficients:
##          ar1      ar2     ar3      ar4     mean
##       0.2661  -0.2752  0.2749  -0.3068  42.0289
## s.e.  0.1112   0.1111  0.1093   0.1099   1.8823
## 
## sigma^2 = 297.4:  log likelihood = -313.44
## AIC=638.88   AICc=640.13   BIC=652.7
## 
## Training set error measures:
##                        ME    RMSE      MAE      MPE    MAPE      MASE
## Training set -0.008155347 16.6524 10.23466 3.483506 24.5342 0.6190454
##                    ACF1
## Training set 0.04706985
# 4. Verificación de los residuos
checkresiduals(model_improved)

## 
##  Ljung-Box test
## 
## data:  Residuals from ARIMA(4,0,0) with non-zero mean
## Q* = 4.667, df = 4, p-value = 0.3232
## 
## Model df: 4.   Total lags used: 8

El nuevo modelo ARIMA(4,0,0) con Box-Cox exhibe criterios de información (AIC, BIC) considerablemente más bajos que el ARIMA(1,0,1) original, y su log-likelihood es más elevado, lo que indica un mejor ajuste. Adicionalmente, las medidas de error (RMSE, MAE) en el conjunto de entrenamiento se reducen, sugiriendo que la transformación Box-Cox y la búsqueda exhaustiva de órdenes han permitido capturar de forma más precisa la dinámica de la serie.

En cuanto a los residuos, se observa que estos presentan menor autocorrelación y se distribuyen de manera más cercana a la normal, cumpliendo con los supuestos de ruido blanco. En conjunto, estas mejoras apuntan a que el ARIMA(4,0,0) con Box-Cox describe mejor la evolución de la variable estudiada y ofrece mayor confiabilidad para fines de pronóstico.

Pronóstico

# Cargar librerías necesarias
library(forecast)
library(ggplot2)
library(strucchange)  # Para detectar posibles cambios estructurales

# -----------------------------------------------------------------
# 1. Pronóstico de los flujos de IED para los siguientes 4 períodos

forecast_improved <- forecast(model_improved, h = 4)

# Graficar el pronóstico
autoplot(forecast_improved) +
  ggtitle("Pronóstico de Flujos de IED para México - Próximos 4 Períodos") +
  xlab("Tiempo") +
  ylab("Flujos de IED (Millones USD)") +
  theme_minimal()

# Imprimir resumen del pronóstico
print(forecast_improved)
##         Point Forecast    Lo 80    Hi 80     Lo 95    Hi 95
## 2024 Q3       42.00014 19.89954 64.10075  8.200186 75.80010
## 2024 Q4       46.83206 23.96222 69.70190 11.855663 81.80846
## 2025 Q1       41.69780 18.38635 65.00925  6.046015 77.34959
## 2025 Q2       48.02892 24.49130 71.56655 12.031229 84.02661
# -----------------------------------------------------------------


# -----------------------------------------------------------------
# 3. Análisis de posibles cambios estructurales en la serie de IED

bp_model <- breakpoints(ts_fdi ~ 1)  # 'ts_fdi' es la serie original de flujos de IED
summary(bp_model)
## 
##   Optimal (m+1)-segment partition: 
## 
## Call:
## breakpoints.formula(formula = ts_fdi ~ 1)
## 
## Breakpoints at observation number:
##                       
## m = 1      30         
## m = 2   18 29         
## m = 3   18 29 41      
## m = 4   18 29 41 56   
## m = 5   18 29 41 52 63
## 
## Corresponding to breakdates:
##                                                
## m = 1           2013(2)                        
## m = 2   2010(2) 2013(1)                        
## m = 3   2010(2) 2013(1) 2016(1)                
## m = 4   2010(2) 2013(1) 2016(1) 2019(4)        
## m = 5   2010(2) 2013(1) 2016(1) 2018(4) 2021(3)
## 
## Fit:
##                                                                
## m   0         1         2         3         4         5        
## RSS 395398046 391645995 381468084 373262852 372179565 373202570
## BIC      1365      1373      1380      1387      1395      1404
plot(bp_model, main = "Detección de puntos de quiebre en flujos de IED")

Los resultados del pronóstico mediante el modelo ARIMA(4,0,0) con Box-Cox muestran que los flujos de IED en México se mantendrán relativamente estables durante los próximos cuatro trimestres, con un rango de incertidumbre que permite distinguir escenarios optimistas (límite superior) y pesimistas (límite inferior). El punto medio del pronóstico sugiere una ligera recuperación frente a los valores más recientes, aunque no se proyecta un crecimiento acelerado; más bien, se estima una trayectoria moderada. Esta perspectiva se alinea con la idea de que el nearshoring puede impulsar la llegada de inversiones, pero también depende de otros factores como la estabilidad económica y las condiciones del mercado global.

En cuanto a la detección de puntos de quiebre, la prueba sugiere posibles rupturas estructurales en 2010(2), 2013(1), 2016(1), 2019(4) y 2021(3). Sin embargo, de acuerdo con el criterio BIC, el modelo sin quiebres (m=0) exhibe el valor más bajo (BIC=1365), lo que indica que no hay evidencia concluyente de que estos cambios hayan alterado significativamente la media de la serie en comparación con un modelo sin rupturas. Dicho de otra forma, aunque pueden existir eventos relevantes en esas fechas que afecten temporalmente la dinámica de la IED, el ajuste global de la serie no mejora sustancialmente al incorporar esos posibles cambios estructurales, por lo que se considera que la serie no presenta un quiebre estadísticamente definitivo en el período analiz+.

El escenario optimista se refleja en el límite superior de los intervalos de confianza, donde se prevé que los flujos de IED aumenten gradualmente, apoyados por las oportunidades del nearshoring y la competitividad de México en manufactura y logística. En contraste, el escenario pesimista se observa en el límite inferior de dichos intervalos, sugiriendo una desaceleración o estancamiento de la IED ante factores como incertidumbre política, volatilidad económica o menor demanda externa.

Conclusiones

El análisis de series de tiempo de los flujos de IED, el tipo de cambio y las exportaciones en México permitió identificar patrones y dinámicas relevantes para entender el comportamiento de la inversión extranjera, especialmente en el contexto del nearshoring. Se evidenció que los modelos univariantes y multivariantes capturan distintos aspectos de la dinámica, aunque la serie de IED presenta cierta volatilidad y posibles puntos de quiebre que requieren atención. El modelo ARIMA, optimizado a través de una transformación Box-Cox y una búsqueda exhaustiva de órdenes, mostró un mejor desempeño que la especificación inicial. Los criterios de información (AIC, BIC) mejorados, junto con residuos que se comportan como ruido blanco y muestran estacionariedad, respaldan la fiabilidad del modelo para pronosticar la evolución de los flujos de IED en el corto plazo. En el pronóstico a 4 períodos, se observa una tendencia moderada en la evolución de los flujos de IED, con un escenario optimista que sugiere un incremento gradual, impulsado por oportunidades vinculadas al nearshoring. Por el contrario, el escenario pesimista, representado por el límite inferior de los intervalos de confianza, indica la posibilidad de estancamiento o desaceleración, reflejando la incertidumbre inherente a factores económicos y políticos. Finalmente, el análisis de rupturas estructurales indicó la presencia de posibles puntos de quiebre en fechas clave, aunque según el criterio BIC, el modelo sin quiebres resulta el más parsimonioso. En conjunto, estos hallazgos ofrecen una visión integral que permite valorar tanto el potencial de crecimiento de la IED en México como los riesgos y limitaciones, proporcionando una base sólida para la toma de decisiones estratégicas en el marco del nearshoring.

De acuerdo con el análisis realizado, se observa que existen condiciones favorables que podrían impulsar el nearshoring en México, reflejadas en un escenario optimista donde se proyecta un incremento gradual de los flujos de IED. Sin embargo, la presencia de un escenario pesimista, que señala la posibilidad de estancamiento o incluso una desaceleración en la entrada de inversiones, resalta que la concreción del nearshoring dependerá de la evolución de factores económicos y políticos tanto a nivel local como global. En síntesis, aunque el potencial para que se materialicen decisiones de nearshoring es real, su éxito dependerá de la estabilidad y la convergencia de múltiples variables

Referencias