Introducción

Principales características de una base de datos de series de tiempo

  Observaciones a lo largo del tiempo: Cada registro en la base de datos representa una medición en un momento específico en el tiempo. Estas mediciones se realizan con una frecuencia regular y se registran en orden cronológico.

  Variables temporales: Además de las variables de interés, las bases de datos de series de tiempo también contienen variables de tiempo, como la fecha, el día de la semana, la hora del día, el mes o el año.

  Tendencias y patrones: Las bases de datos de series de tiempo a menudo muestran patrones de tendencia, estacionalidad y ciclos. Estos patrones pueden ser analizados para determinar patrones y tendencias a lo largo del tiempo.

  Descomposición: La mayoría de las series de tiempo se pueden descomponer en componentes que incluyen tendencia, estacionalidad y variación aleatoria. Este proceso ayuda a separar los efectos temporales de otras influencias en las mediciones.

  Métodos estadísticos: Las bases de datos de series de tiempo se analizan típicamente utilizando métodos estadísticos especializados, como el análisis de regresión de series de tiempo, la autocorrelación y la prueba de raíz unitaria.

  Pronóstico: Una de las aplicaciones más comunes de las bases de datos de series de tiempo es el pronóstico. Los modelos de series de tiempo se utilizan para predecir valores futuros en función de patrones históricos.

El análisis de datos de series de tiempo puede contribuir a pronosticar cambios y/o patrones en los flujos de inversión extranjera directa (IED) asociadas con decisiones de “Nearshoring” para el caso de México.

  Nearshoring es el termino que se refiere a cuando una compañia multinacional busca traer sus procesos operacionales a un lugar geográficamente mas cercano. La razón de esto ocurre debido a que buscan disminuir el nivel de riesgo que pueden ocurrir directamente a varios niveles. El analisis de datos de la serie de tiempo contribuye a estos pronósticos porque nos puede demostrar tendencias de múltiples variables que nosotros creamos tienen algún impacto directo en el tema de Nearshoring.  
# Importar base de datos
data <- read_excel("~/Desktop/timeseries.new_fdi.xlsx")
datos <- read_excel("~/Desktop/fid.xlsx")
datos <- pdata.frame(datos, index= c("state","year"))

El siguiente analisis tiene la intención de identificar sobre los datos de serie de tiempo, si México atraera inversión extranjera.

Visualización de Datos

Visualización de las nuevas inversiones extranjeras en Mexico de 1980 a 2021.

# Graficar los flujos de inversión extranjera en México por año
ggplot(data, aes(x = year, y = new_fdi, fill = year)) +
  geom_bar(stat = "identity", position = "dodge") +
  labs(x = "Year", y = "New_FDI", title = "Foreign investment per year")

Visualización del crecimiento de la población en México

# Graficar la evolución de la población en México
pob_total <- datos %>% 
  group_by(year) %>% 
  summarise(suma_pop_density = sum(pop_density))


ggplot(pob_total, aes(x = year, y = suma_pop_density, group = 1)) +
  geom_line(color = "blue", size = 1.5) +
  labs(title = "Population in Mexico by year") +
  theme_bw() +
  theme(plot.title = element_text(hjust = 0.5, size = 16),
        legend.position = "none") +
  ylab("") +
  xlab("Year")
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.

Prueba de estacionariedad a new_fdi

### H0: Non-stationary and HA: Stationary.
adf.test(data$new_fdi)
## 
##  Augmented Dickey-Fuller Test
## 
## data:  data$new_fdi
## Dickey-Fuller = -1.2842, Lag order = 3, p-value = 0.8558
## alternative hypothesis: stationary

Tenemos un p-value de 0.86, por lo que no podemos rechazar la hipotesis nula y podemos concluir que la serie de tiempo no es estacionaria.

Prueba de ACF a new_fdi

# Autocorrelation Function Plot
acf(data$new_fdi,main="Significant Autocorrelations")

En la gráfica anterior se puede ver autocorrelación de los ultimos 6 años.

Estimación de Modelo de Series de Tiempo

ARMA

# Fitting the ARMA(1,1) - no log transformation
summary(ARMA.nears<-arma(data$new_fdi, order=c(1,1)))
## 
## Call:
## arma(x = data$new_fdi, order = c(1, 1))
## 
## Model:
## ARMA(1,1)
## 
## Residuals:
##    Min     1Q Median     3Q    Max 
##  -8362  -1746   -806   1205  14989 
## 
## Coefficient(s):
##            Estimate  Std. Error  t value Pr(>|t|)    
## ar1         0.95325     0.03318   28.731  < 2e-16 ***
## ma1        -0.81517     0.11745   -6.941  3.9e-12 ***
## intercept 669.34149   287.44401    2.329   0.0199 *  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Fit:
## sigma^2 estimated as 17429158,  Conditional Sum-of-Squares = 697617712,  AIC = 825.48
# La espicificacion del modelo es buena
plot(ARMA.nears)

ARMA.residuals<-(ARMA.nears$residuals)
ARMA.residuals<-na.omit(ARMA.residuals)
acf(ARMA.residuals,main="ACF - ARMA (1,1)")

#Ho: Regression Residuals are independently distributed.
# Ha: Regression Residuals are not independently distributed, but exhibit serial correlation.
Box.test(ARMA.residuals,lag=1,type="Ljung-Box")
## 
##  Box-Ljung test
## 
## data:  ARMA.residuals
## X-squared = 1.1976, df = 1, p-value = 0.2738

P-value 0.27, por lo que fallamos en rechazar la hipotesis nula y los datos son independientes.

Forecasting ARMA

ARMA.nearf<-forecast(data$new_fdi,h=5)
autoplot(ARMA.nearf)

ARMA.nearf
##    Point Forecast    Lo 80    Hi 80      Lo 95    Hi 95
## 43       9886.586 3722.700 16050.47   459.7363 19313.44
## 44       9900.492 3523.790 16277.19   148.1674 19652.82
## 45       9914.397 3193.594 16635.20  -364.1843 20192.98
## 46       9928.303 2714.352 17142.25 -1104.4832 20961.09
## 47       9942.209 2078.626 17805.79 -2084.1032 21968.52

Con un nivel de confianza del 95%, y 0.05% de probabilidad de cometer error. El modelo ARMA pronostica los siguientes flujos de inversión extranjera a México, para los proximos 5 años.

Año Pronostico Pesimista Pronostico Optimista
2022 459.74 19,313.44
2023 148.17 19,652.82
2024 -364.18 20,192.98
2025 -1,104.48 20,961.09
2026 -2,084.10 21,968.52

Ya que la serie de datos no es estacionaria, probaremos el modelo ARIMA. Ya que el modelo ARIMA toma en consideración la transformación de diferencias de la serie temporal para convertirla en estacionaria.

ARIMA

ARIMA.nears<-arima(log(data$new_fdi), order=c(1,2,1))
print(ARIMA.nears)
## 
## Call:
## arima(x = log(data$new_fdi), order = c(1, 2, 1))
## 
## Coefficients:
##           ar1      ma1
##       -0.5594  -1.0000
## s.e.   0.1313   0.1625
## 
## sigma^2 estimated as 0.2279:  log likelihood = -29.66,  aic = 65.31

El modelo ARIMA por el momento, es mejor ooción que el modelo ARMA ya que tiene un valor mucho menor de AIC.

plot(ARIMA.nears$residuals,main="ARIMA(1,2,1) - Foreign investment in Mexico")

acf(ARIMA.nears$residuals,main="ACF - ARIMA (1,2,1)")

La serie no muestra correlación serial.

Box.test(ARIMA.nears$residuals,lag=1,type="Ljung-Box")
## 
##  Box-Ljung test
## 
## data:  ARIMA.nears$residuals
## X-squared = 2.7863, df = 1, p-value = 0.09507

El modelo falla en rechazar la hipotesis nula, lo que significa que los residuales son independientes.

ARIMA.residuals<-(ARIMA.nears$residuals)
ARIMA.residuals<-na.omit(ARIMA.residuals)
ARIMA.nearsf<-forecast(ARIMA.nears,h=5)
ARIMA.nearsf$upper
## Time Series:
## Start = 43 
## End = 47 
## Frequency = 1 
##          80%      95%
## 43  9.834781 10.16262
## 44 10.157555 10.51898
## 45 10.259516 10.70371
## 46 10.466728 10.95650
## 47 10.597078 11.14372
autoplot(ARIMA.nearsf)

Con un nivel de confianza del 95%, y 0.05% de probabilidad de cometer error. El modelo ARIMA pronostica los siguientes flujos de inversión extranjera en México, para los proximos 5 años.

Año Pronostico Pesimista Pronostico Optimista
2022 3,898.51 25,916.03
2023 8,483.83 62,927.53
2024 11,902.86 107,448.29
2025 15,285.95 164,773.85
2026 18,223.10 233,902.04

El modelo ARIMA será complementado con el modelo Panel Var para identificar posibles variables independientes que sean significativas y tengan un impacto positivo o negativo en los proximos flujos de inversión extranjera en México.

Panel VAR

# Panel Var 1
# Panel de datos con variables del año 2005 - 2021
# Exchange_rate fue tomada en cuanta como la variable que no cambia por estados, unicamente por año.
# Variables independentes a analizar : densidad de población, actividad empresarial y tasa de homicidios.

panel_var1 <-pvargmm(
dependent_vars = c("new_fdi"),
lags = 1,
predet_vars = c("pop_density","business_activity","homocide_rate"),
exog_vars = c("exchange_rate"),
transformation = "fd",
data = datos,
panel_identifier = c("state", "year"),
steps = c("twostep"))

summary(panel_var1)

Dynamic Panel VAR estimation, two-step GMM

Transformation: First-differences
Group variable: state
Time variable: year
Number of observations = 480
Number of groups = 32
Obs per group: min = 15
Obs per group: avg = 15
Obs per group: max = 15
Number of instruments = 526

  new_fdi
lag1_new_fdi -0.0850
  (0.0460)
pop_density 0.4232
  (0.6653)
business_activity 0.5592
  (4.0503)
homocide_rate -2.1885
  (2.4596)
exchange_rate -4.8311
  (7.2118)
***p < 0.001; **p < 0.01; *p < 0.05

Instruments for equation

Standard
exchange_rate

GMM-type
Dependent vars: L(2,15)
Predet vars: L(1, 15)
Collapse = FALSE

Hansen test of overid. restrictions: chi2(521) = 26.41 Prob > chi2 = 1
(Robust, but weakened by many instruments.)

Ya que ninguna variable demostro significancia, se transformaran las variables a log para suavizar sus valores atípicos.

# Calcular la mediana de la variable "new_fdi"
mediana_new_fdi <- median(datos$new_fdi)
# Reemplazar los valores negativos de "new_fdi" por la mediana
datos$new_fdi <- ifelse(datos$new_fdi < 0.1, mediana_new_fdi, datos$new_fdi)
# Crear una nueva variable con los valores reemplazados
datos <- datos %>%
  mutate(new_fdi_rem = ifelse(new_fdi < 0.1, mediana_new_fdi, new_fdi))

# Convertiremos las variables de intéres a log
datos$log_new_fdi<-log(datos$new_fdi_rem)
datos$log_pop_density<-log(datos$pop_density)
datos$log_business_activity<-log(datos$business_activity)
datos$log_homocide_rate<-log(datos$homocide_rate)
datos$log_exchange_rate<-log(datos$exchange_rate)
# Panel Var 2
# con variables en log
panel_var2 <-pvargmm(
dependent_vars = c("log_new_fdi"),
lags = 1,
predet_vars = c("log_pop_density","log_business_activity","log_homocide_rate"),
exog_vars = c("log_exchange_rate"),
transformation = "fd",
data = datos,
panel_identifier = c("state", "year"),
steps = c("onestep"))

summary(panel_var2)

Dynamic Panel VAR estimation, one-step GMM

Transformation: First-differences
Group variable: state
Time variable: year
Number of observations = 237
Number of groups = 31
Obs per group: min = 3
Obs per group: avg = 7.64516129032258
Obs per group: max = 11
Number of instruments = 526

  log_new_fdi
lag1_log_new_fdi -0.0846
  (0.0643)
log_pop_density 5.1239*
  (2.3548)
log_business_activity -0.1183
  (0.0744)
log_homocide_rate -0.2971
  (0.2072)
log_exchange_rate -0.5648
  (0.5805)
***p < 0.001; **p < 0.01; *p < 0.05

Instruments for equation

Standard
log_exchange_rate

GMM-type
Dependent vars: L(2,11)
Predet vars: L(1, 11)
Collapse = FALSE

Hansen test of overid. restrictions: chi2(521) = 169.26 Prob > chi2 = 1
(Robust, but weakened by many instruments.)

La única variable que demostro significancia fue “pop_density”, lo que quiere decir que a medida que la población incremente 1% en México, los flujos de inversión a México incrementarian 5.1%.

Pruebas de Diagnóstico

Mediante Pruebas de Diagnóstico, identificar la posible presencia de los siguientes problemas en cada una de las estimaciones anteriores: a. Autocorrelación Serial (serial correlation) b. Estacionariedad (stationary)

ARMA

### H0: Non-stationary and HA: Stationary.
adf.test(ARMA.residuals)
## 
##  Augmented Dickey-Fuller Test
## 
## data:  ARMA.residuals
## Dickey-Fuller = -2.0433, Lag order = 3, p-value = 0.5565
## alternative hypothesis: stationary
# Autocorrelation Function Plot
acf(ARMA.residuals,main="Significant Autocorrelations")

El modelo ARMA determina que la serie de tiempo no es estacionaria y no muestra autocorrelación serial.

ARIMA

### H0: Non-stationary and HA: Stationary.
adf.test(ARIMA.nears$residuals)
## 
##  Augmented Dickey-Fuller Test
## 
## data:  ARIMA.nears$residuals
## Dickey-Fuller = -3.768, Lag order = 3, p-value = 0.03176
## alternative hypothesis: stationary
# Autocorrelation Function Plot
acf(ARIMA.residuals,main="Significant Autocorrelations")

El modelo ARIMA determina que la serie de tiempo es estacionaria y no muestra autocorrelación serial.

Selección de Modelo e Interpretación de Resultados

El modelo que seleccionamos fue ARIMA, ya que la serie de tiempo es estacionaria y no muestra correlación serial, a comparación del modelo ARMA que la serie no estacionaria. En cuanto al AIC del modelo, ARIMA tiene un valor de 65, menor al de ARMA el cual es 825.

Por lo tanto el pronostico de los proximos 5 años según el modelo ARIMA, con un nivel de confianza del 95% es :

Año Pronostico Pesimista Pronostico Optimista
2022 3,898.51 25,916.03
2023 8,483.83 62,927.53
2024 11,902.86 107,448.29
2025 15,285.95 164,773.85
2026 18,223.10 233,902.04

Para complementar los resultados del modelo ARIMA, utilizaremos el modelo Panel Var 2, en el cual las variables fueron transformadas a log con intención de suavizar los valores atípicos. Obtuvimos el resultado que la variable “pop_density” es significativa, a medida que la población incremento 1% en México, los flujos de inversión a México incrementarian 5.1%.

Conclusiones

Para seleccionar el mejor modelo nos enfocamos en que la serie fuera estacionaria, no hubiera correlación serial y que el AIC fuera el menor. Para complementar nuestros resultados, buscamos variables significativas que tuvieran un impacto positivo o negativo en las futuras inversiones a México.

Como conclusión según los resultados de nuestro modelo, la inversión en México por países extranjeros incrementara año con año en los próximos 5 años, y una variable que impactará positivamente este flujo de inversiones sería que la población continue aumentando.