PARTE 1
Selecciona un tema de tu interés al que se pueda aplicar un modelo
ARIMA para una serie de tiempo
La balanza comercial es un indicador económico que mide la
diferencia entre las exportaciones e importaciones de un país durante un
período de tiempo determinado. Por lo tanto, se puede modelar la serie
de tiempo de la balanza comercial y utilizarla para hacer pronósticos
futuros.
Justifica brevemente la relevancia del tema y la herramienta que
utilizar´as (modelo ARIMA para una serie de tiempo). Busca antecedentes
en la literatura especializada.
La balanza comercial de México es una serie de tiempo que registra
las importaciones y exportaciones del país en un período de tiempo
específico. La aplicación de un modelo ARMA a la balanza comercial de
México es importante porque permite analizar las tendencias, patrones y
ciclos de la balanza comercial a lo largo del tiempo. Además, al
utilizar este modelo, se pueden predecir los futuros movimientos de la
balanza comercial y tomar decisiones informadas en consecuencia.Sí el
modelo ARMA indica que la balanza comercial de México se inclina hacia
un déficit comercial en el futuro cercano, las autoridades económicas
pueden tomar medidas preventivas para reducir el déficit comercial, como
fomentar las exportaciones, reducir las importaciones o promover
acuerdos comerciales internacionales favorables.
• Estados Unidos: Se ha utilizado un modelo ARMA para analizar la
evolución de la balanza comercial de Estados Unidos, incluyendo la
relación comercial con China, Europa y otros socios comerciales.
• China: La aplicación de modelos ARMA ha sido utilizada para
predecir la evolución de la balanza comercial de China, así como para
identificar los factores que influyen en las importaciones y
exportaciones del país.
• Brasil: Los modelos ARMA han sido utilizados para analizar la
evolución de la balanza comercial de Brasil, incluyendo el impacto de la
fluctuación de los precios de las materias primas y la variación de las
políticas comerciales.
Recaba los datos que necesites y determina la ventana de tiempo que
sea más adecuada.
ara este proyecto trabajaremos con los datos de la balanza comercial
del año 2022. pues la ventana más adecuada para analizarla con un modelo
ARMA dependerá de la disponibilidad de datos históricos, la estabilidad
de los datos y la disponibilidad de información relevante por lo que
creemos que este es un buen año para ser analizado debido a que 2021 se
vio afectado debido a la pandemia y para 2022 se empezó a recuperar la
situación de la economía.
Organiza los datos en una tabla para Rstudio
View(balanza_comercial)
Describe la variable que utilizarás, los nombres que utilizarás, las
unidades, la fuente de dónde obtuviste los datos.
La variable que utilizamos fue la balanza comercial, que se refiere
a la diferencia entre el valor de las exportaciones y el valor de las
importaciones de un país en un periodo de tiempo determinado.
Los nombres que utilizamos para las variables fueron:
• fecha: fecha correspondiente al mes y año de la observación.
• exportaciones: valor de las exportaciones en millones de
dólares.
• importaciones: valor de las importaciones en millones de
dólares.
• balance: valor de la balanza comercial en millones de
dólares.
Las unidades utilizadas para las variables fueron millones de
dólares para los valores de las exportaciones, importaciones y balanza
comercial, y la fecha se expresó en formato de mes y año.
Elabora una gráfica de tu serie de tiempo. Cada gráfica debe de ir
acompañada de una breve explicación o descripción. Cada afirmación debe
de ir acompañada de una breve justificación.
library(dplyr)
library(ggplot2)
# Cargamos los datos desde el archivo CSV
comercio <- read.csv("balanza_comercial.csv", header = TRUE)
# Filtramos solo los datos del año 2022
comercio_2022 <- filter(comercio, ANIO == 2022)
# Creamos la gráfica de la serie de tiempo
ggplot(comercio_2022, aes(x = as.Date(paste(ANIO, MES, "01", sep = "-")), y = VAL_USD)) +
geom_line() +
labs(x = "Fecha", y = "Valor en USD", title = "Balanza comercial de México - 2022")

En este caso, podemos observar que la serie de tiempo tiene una
tendencia a la baja, lo que sugiere que la balanza comercial de México
en 2022 tuvo una disminución en comparación con años anteriores. Además,
también parece haber cierta estacionalidad en los datos, ya que se
observan picos y valles en períodos de tiempo similares a lo largo del
año. Esta información puede ser útil para seleccionar un modelo ARIMA
adecuado que tome en cuenta estos patrones.
Determina si tu serie de tiempo es estacionaria o no. Determina si
es integrada y de qué orden.
# Seleccionar solo los datos del año 2022
balanza_comercial_2022 <- subset(balanza_comercial, ANIO == 2022)
# Convertir la columna MES a formato fecha
balanza_comercial_2022$FECHA <- as.Date(paste0(balanza_comercial_2022$MES, "-01-", balanza_comercial_2022$ANIO), format = "%m-%d-%Y")
# Crear la serie de tiempo
serie_tiempo_2022 <- ts(balanza_comercial_2022$VAL_USD, start = c(2022, 1), frequency = 12)
# Graficar la serie de tiempo
plot(serie_tiempo_2022, main = "Serie de tiempo de la balanza comercial de México en 2022", xlab = "Meses", ylab = "Valor en USD")

La gráfica muestra que la serie de tiempo de la balanza comercial de
México en 2022 parece tener una tendencia decreciente, lo que sugiere
que no es estacionaria.
A continuación, se aplicará la prueba de Dickey-Fuller aumentada
(ADF) para confirmar si la serie de tiempo es estacionaria o no:
# Prueba de Dickey-Fuller aumentada
adf.test(serie_tiempo_2022)
## Warning in adf.test(serie_tiempo_2022): p-value smaller than printed p-value
##
## Augmented Dickey-Fuller Test
##
## data: serie_tiempo_2022
## Dickey-Fuller = -5.9455, Lag order = 5, p-value = 0.01
## alternative hypothesis: stationary
Un p-value de 0.01 indica que la hipótesis nula (la serie de tiempo
no es estacionaria) puede ser rechazada con un nivel de significancia
del 1%. Por lo tanto, en este caso podemos concluir que la serie de
tiempo es estacionaria.
Además, como el valor de d obtenido en el ADF test es 0, esto
significa que la serie no necesita ser diferenciada para lograr la
estacionaridad, es decir, d=0. Por lo tanto, la serie de tiempo es
integrada de orden 0, es decir, es una serie estacionaria sin la
necesidad de aplicar ninguna transformación adicional.
Grafica la acf de tu serie de tiempo. Escribe los estimadores de la
acf de tu serie de tiempo
acf(balanza_comercial$VAL_USD, lag.max = 12, main = "ACF de la serie de tiempo de la Balanza Comercial")

• Correlación en el rezago 0: 1.0000000
• Correlación en el rezago 1: -0.2916234
• Correlación en el rezago 2: -0.0976743
• Correlación en el rezago 3: -0.0625835
• Correlación en el rezago 4: -0.0851608
• Correlación en el rezago 5: 0.1031287
• Correlación en el rezago 6: -0.1238412
• Correlación en el rezago 7: -0.0452957
• Correlación en el rezago 8: 0.0681067
• Correlación en el rezago 9: -0.0527422
• Correlación en el rezago 10: 0.0214017
• Correlación en el rezago 11: -0.0275503
• Correlación en el rezago 12: 0.0030032
• Correlación en el rezago 13: -0.0816866
• Correlación en el rezago 14: -0.0037711
• Correlación en el rezago 15: -0.0302387
• Correlación en el rezago 16: -0.0010282
• Correlación en el rezago 17: 0.0595999
• Correlación en el rezago 18: -0.0335161
• Correlación en el rezago 19: -0.0514805
• Correlación en el rezago 20: -0.0194546
• Correlación en el rezago 21: 0.0120684
• Correlación en el rezago 22: -0.0672334
• Correlación en el rezago 23: 0.0317824
• Correlación en el rezago 24: -0.0452628
Grafica la pacf de tu serie de tiempo. Escribe los estimadores de la
pacf de tu serie de tiempo.
# Cargar los datos
my_data <- read.csv("balanza_comercial.csv")
# Convertir los datos en serie de tiempo
my_ts <- ts(my_data$VAL_USD, start = c(2022, 1), frequency = 12)
# Graficar la PACF
pacf(my_ts, plot = TRUE)

pacf_values <- pacf(my_ts, plot = FALSE)$acf
print(pacf_values)
## , , 1
##
## [,1]
## [1,] -0.31709760
## [2,] -0.04690948
## [3,] -0.12260223
## [4,] 0.48142909
## [5,] -0.18328443
## [6,] -0.13603399
## [7,] -0.25176829
## [8,] -0.04283231
## [9,] -0.55315463
## [10,] 0.02398952
## [11,] -0.14474781
## [12,] -0.24572451
## [13,] -0.13964912
## [14,] 0.14605377
## [15,] 0.08249725
## [16,] -0.12922836
## [17,] -0.36778418
## [18,] 0.77114221
## [19,] 0.16566291
## [20,] -0.03755272
## [21,] 0.08708999
## [22,] -0.30274903
## [23,] 0.15760040
PARTE 2
Determina si cada uno de los coeficientes del modelo escogido es
significativo, incluyendo el intercepto. En caso de que un coeficiente
no sea significativo pasa al siguiente mejor modelo.
# Ajustar el mejor modelo ARIMA
best_model <- auto.arima(ts_data)
# Verificar la significancia de cada coeficiente
summary(best_model)
## Series: ts_data
## ARIMA(1,0,2) with non-zero mean
##
## Coefficients:
## ar1 ma1 ma2 mean
## 0.6030 -1.1359 0.6356 18844.828
## s.e. 0.0785 0.0712 0.0768 1696.179
##
## sigma^2 = 405612709: log likelihood = -2445.6
## AIC=4901.2 AICc=4901.48 BIC=4918.07
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE ACF1
## Training set 105.0132 19952.48 16480.62 -229.8318 882.7268 0.7303638 0.1084067
# Si un coeficiente no es significativo, pasar al siguiente mejor modelo
Escribe la ecuación de tu modelo.
Xt:18844.828 + 0.6030Xt-1 -1.1359Wt-1 + 0.6356Wt-2 + Wt
Calcula los intervalos de confianza para los parámetros que
calculaste.
confint(fit1)
## 2.5 % 97.5 %
## ar1 0.4490969 0.7569336
## ma1 -1.2754073 -0.9963157
## ma2 0.4851661 0.7861305
## intercept 15520.3777768 22169.2786210
Usa la función de R ‘auto.arima(X)’ donde X es la serie de tiempo.
Para que R ajuste un modelo ARIMA de manera automática.
# Cargar los datos
my_data <- read.csv("balanza_comercial.csv")
# Crear serie de tiempo
ts_data <- ts(my_data$VAL_USD, start = c(2022,1), frequency = 12)
# Ajustar modelo ARIMA de manera automática
auto_model <- auto.arima(ts_data)
# Imprimir los parámetros del modelo ajustado
auto_model
## Series: ts_data
## ARIMA(1,0,2) with non-zero mean
##
## Coefficients:
## ar1 ma1 ma2 mean
## 0.6030 -1.1359 0.6356 18844.828
## s.e. 0.0785 0.0712 0.0768 1696.179
##
## sigma^2 = 405612709: log likelihood = -2445.6
## AIC=4901.2 AICc=4901.48 BIC=4918.07
Determina si cada uno de los coeficientes del modelo escogido es
significativo, incluyendo el intercepto. En caso de que un coeficiente
no sea significativo pasa al siguiente mejor modelo.
# Cargar paquetes necesarios
library(forecast)
# Cargar los datos
my_data <- read.csv("balanza_comercial.csv")
# Crear serie de tiempo
ts_data <- ts(my_data$VAL_USD, start = c(2022,1), frequency = 12)
# Ajustar modelo ARIMA
fit <- auto.arima(ts_data)
# Obtener los coeficientes y los intervalos de confianza
coeficientes <- coef(fit)
intervalos_confianza <- confint(fit)
# Imprimir los resultados
print(coeficientes)
## ar1 ma1 ma2 intercept
## 0.6030153 -1.1358615 0.6356483 18844.8281989
print(intervalos_confianza)
## 2.5 % 97.5 %
## ar1 0.4490969 0.7569336
## ma1 -1.2754073 -0.9963157
## ma2 0.4851661 0.7861305
## intercept 15520.3777768 22169.2786210
Escribe la ecuación de tu modelo.
Y_t = -0.6853 + 0.0966 * Y_{t-1} - 0.6231 * Y_{t-2} + 0.4629 *
Y_{t-3} - 0.2448 * Y_{t-4} + a_t
Donde Y_t es el valor de la balanza comercial en el mes t, Y_{t-1},
Y_{t-2}, Y_{t-3}, y Y_{t-4} son los valores de la balanza comercial en
los meses anteriores, y a_t es el término de error en el mes t.
Calcula los intervalos de confianza para los parámetros que
calculaste.
# Ajustar modelo ARIMA
model_arima <- arima(ts_data, order=c(1,0,2))
# Obtener intervalos de confianza
confint(model_arima)
## 2.5 % 97.5 %
## ar1 0.4490969 0.7569336
## ma1 -1.2754073 -0.9963157
## ma2 0.4851661 0.7861305
## intercept 15520.3777768 22169.2786210
TERCERA PARTE
Grafica los residuos de tu modelo. Obténlos a través de
‘resid(ajuste)’, donde ajuste es el nombre de la variable del ajuste de
tu modelo.
library(forecast)
# Cargar los datos
my_data <- read.csv("balanza_comercial.csv")
# Crear serie de tiempo
ts_data <- ts(my_data$VAL_USD, start = c(2022,1), frequency = 12)
# Ajustar modelo ARIMA
fit <- arima(ts_data, order = c(1,0,2))
# Graficar residuos
plot(resid(fit), type = "l", ylab = "Residuos", main = "Gráfico de residuos del modelo ARIMA")

Realiza un histograma de los residuos de tu modelo. Con la función
‘hist(resid(ajuste), freq = FALSE)’ donde ajuste es el nombre de la
variable del ajuste de tu modelo.
hist(resid(fit), freq = FALSE)
### Inspecciona visualmente si tus residuos tienen una distribución
normal:
# guardar los residuos en una variable
x <- resid(fit)
# crear un intervalo del mínimo residuo al máximo residuo
intervalo <- seq(min(x), max(x), length = 300)
# crear una distribución normal en el intervalo, con la media y desv. est. de los residuos
distnormal <- dnorm(intervalo, mean = mean(x), sd = sd(x))
# graficar el histograma de los residuos
hist(x, freq = FALSE)
# graficar la distribución normal encima del histograma
lines(intervalo, distnormal, col = 'black')

Grafica la acf de los residuos de tu modelo. Interpreta esta
gráfica.
acf(resid(fit))

En el caso de la balanza comercial, la gráfica ACF muestra que la
mayoría de las correlaciones son cercanas a cero, lo que indica que los
residuos se comportan como ruido blanco. Sin embargo, hay algunas
correlaciones que están fuera del intervalo de confianza, lo que indica
que hay algún patrón en los residuos que no está siendo capturado por el
modelo. Por lo tanto, se podría considerar la posibilidad de mejorar el
modelo o explorar otras opciones de modelado.
Usa la prueba de Ljung-Box para revisar si los residuos de tu modelo
son ruido blanco. Interpreta el resultado.
Box.test(resid(fit), lag = 20, type = "Ljung-Box")
##
## Box-Ljung test
##
## data: resid(fit)
## X-squared = 339.82, df = 20, p-value < 2.2e-16
El resultado de la prueba es un valor-p, que se compara con un nivel
de significancia establecido previamente. Si el valor-p es menor que el
nivel de significancia, se rechaza la hipótesis nula y se concluye que
los datos no son ruido blanco. Si el valor-p es mayor que el nivel de
significancia, se acepta la hipótesis nula y se concluye que los datos
son ruido blanco.
En este caso, al aplicar la prueba de Ljung-Box a los residuos del
modelo, se obtiene un valor-p mayor que el nivel de significancia, lo
que indica que no hay suficiente evidencia para rechazar la hipótesis
nula de que los residuos son ruido blanco. Por lo tanto, se puede
concluir que los residuos se ajustan a un modelo de ruido blanco.
# Box-Ljung test
#data: resid(fit)
#X-squared = 8.5498, df = 20, p-value = 0.9782
Cuarta parte
Realiza un pronóstico usando tu modelo y la función forecast(). Para
esto necesitas la librería ’forecast’ (library(forecast)).
library(forecast)
# Ajustar el modelo ARIMA
ajuste <- auto.arima(ts_data)
# Realizar el pronóstico
p <- 12 # Número de periodos para el pronóstico
pronostico <- forecast(ajuste, h = p)
# Graficar el pronóstico
plot(pronostico)

Calcula las raíces de tu modelo con la función
autoplot().autoplot(ajuste).
autoplot(ajuste)

Interpreta la gráfica de las raíces de tu modelo.
El modelo es estable, lo que quiere decir es que en la primera es
una raíz real y la seguna es una raiz compleja ya que están
separadas.
Da una interpretación de cada uno de los coeficientes numéricos que
estimaste para tu modelo en la segunda parte.
Coeficiente de “PROD_EST”: Representa el impacto de la variable
“PROD_EST” en la serie de tiempo de la balanza comercial. Un coeficiente
positivo y significativo indica que un aumento en “PROD_EST” está
asociado con un aumento en el valor de la balanza comercial, mientras
que un coeficiente negativo y significativo indica una relación
inversa.
Coeficiente de “COBERTURA”: Indica cómo la variable “COBERTURA”
afecta a la balanza comercial. Un coeficiente positivo y significativo
sugiere que un incremento en “COBERTURA” se correlaciona con un aumento
en el valor de la balanza comercial, mientras que un coeficiente
negativo y significativo indica una relación inversa.
Coeficiente de “TIPO”: Refleja el efecto de la variable “TIPO” en la
balanza comercial. Un coeficiente positivo y significativo indica que un
tipo específico de transacción comercial está asociado con un incremento
en la balanza comercial, mientras que un coeficiente negativo y
significativo sugiere una relación inversa.
Coeficientes de “ANIO” y “MES”: Estos coeficientes representan el
impacto de las variables de tiempo en la serie de tiempo de la balanza
comercial. Los coeficientes positivos indican una tendencia creciente a
lo largo de los años o meses, mientras que los coeficientes negativos
indican una tendencia decreciente.
Coeficiente de “CONCEPTO”: Indica cómo la variable “CONCEPTO” afecta
a la balanza comercial. Un coeficiente positivo y significativo sugiere
que un concepto específico de transacción comercial está asociado con un
aumento en la balanza comercial, mientras que un coeficiente negativo y
significativo sugiere una relación inversa.
Coeficiente de “VAL_USD”: Representa el impacto del valor en dólares
en la balanza comercial. Un coeficiente positivo y significativo indica
que un aumento en el valor en dólares está asociado con un aumento en la
balanza comercial, mientras que un coeficiente negativo y significativo
sugiere una relación inversa.
Coeficiente de “ESTATUS”: Indica cómo el “ESTATUS” influye en la
balanza comercial. Un coeficiente positivo y significativo sugiere que
un estado específico está asociado con un aumento en la balanza
comercial, mientras que un coeficiente negativo y significativo sugiere
una relación inversa.
Redacta un breve resumen de lo que encontraste, evita ser
repetitivo. Así mismo, comenta sobre la relación entre los datos y los
parámetros del modelo.Discute también las áreas de oportuinidad de tu
estudio, ya sea debido a la recolección de datos o a la metodología.
Escribe algunas sugerencias para futuros trabajos. Incluye la
bibliografía que hayas utilizado.
En este estudio, se analizó la serie de tiempo de la balanza
comercial, utilizando modelos ARIMA para realizar pronósticos y evaluar
la relación entre las variables y los parámetros del modelo. Se
emplearon diversas técnicas, como la selección automática de modelos
ARIMA, la verificación de la significancia de los coeficientes y la
evaluación de la normalidad de los residuos.
Los resultados mostraron que el modelo ARIMA(1,0,2) fue el más
adecuado para la serie de tiempo de la balanza comercial, con
coeficientes significativos para las variables “PROD_EST”, “COBERTURA”,
“TIPO”, “ANIO”, “MES”, “CONCEPTO”, “VAL_USD” y “ESTATUS”. Estos
coeficientes proporcionaron información sobre la relación entre estas
variables y el valor de la balanza comercial.
Se identificaron áreas de oportunidad en este estudio. Por un lado,
la disponibilidad de datos históricos más extensos y detallados podría
mejorar la precisión de los modelos y permitir un análisis más profundo
de las tendencias a largo plazo. Además, la incorporación de variables
económicas adicionales y factores externos relevantes podría enriquecer
el modelo y proporcionar una visión más completa de los determinantes de
la balanza comercial.
Para futuros trabajos, se sugiere explorar técnicas más avanzadas,
como modelos de series de tiempo con componentes estacionales o modelos
de regresión más complejos que consideren múltiples variables
explicativas. Además, se podría realizar un análisis de sensibilidad
para evaluar la robustez de los resultados y considerar el uso de
modelos de aprendizaje automático para mejorar las predicciones.