1 Introducción

En este trabajo seleccionamos las siguientes series para su análisis:

1.1 Objetivos del análisis

  • Estudiar la evolución temporal del IPC y del tipo de cambio en Uruguay.
  • Identificar tendencias, patrones y eventos significativos que afectaron a ambas series.
  • Analizar la relación entre ambas variables y su potencial influencia en la dinámica de precios.
  • Preparar las series para la modelización univariante y multivariante bajo la metodología Box-Jenkins.

1.2 Justificación de las series seleccionadas

El IPC es una variable esencial para medir el nivel de precios y evaluar la evolución de la inflación en el país. Su análisis permite comprender el comportamiento del poder adquisitivo, los costos de vida y las presiones inflacionarias a lo largo del tiempo.

El tipo de cambio USD/UYU es una variable clave en la economía uruguaya, dado su impacto directo sobre los precios internos a través de la transmisión de precios internacionales, especialmente en economías abiertas y dolarizadas como la uruguaya. Además, el tipo de cambio influye en las expectativas de inflación, las decisiones de inversión y la competitividad internacional.

Además, es razonable suponer que existe una relación económica entre el tipo de cambio y el nivel de precios internos. En economías abiertas como la uruguaya, las variaciones en el tipo de cambio pueden trasladarse a los precios a través de varios canales: el encarecimiento de bienes importados, los costos de insumos extranjeros y la formación de expectativas inflacionarias. Este posible vínculo sugiere que el tipo de cambio puede tener una influencia significativa sobre la evolución del IPC, lo cual será explorado en las etapas siguientes del análisis.

# Cargar Librerías
library(readr)
library(ggplot2)
library(forecast)
library(tseries)

# Leer los datos
data <- read_csv("series_comb.csv", show_col_types = FALSE)

# Eliminar la columna innecesaria
data <- data[ , -1]

# Convertir la columna Fecha a formato Date
data$Fecha <- as.Date(data$Fecha, format = "%Y-%m-%d")

# Calcular primer año múltiplo de 5 hacia arriba
start_year <- 5 * ceiling(as.numeric(format(min(data$Fecha), "%Y")) / 5)

# Crear vector de años múltiplos de 5 (1975, 1980, 1985, etc.)
breaks_5 <- seq(from = as.Date(paste0(start_year, "-01-01")),
                to = as.Date(paste0(format(max(data$Fecha), "%Y"), "-01-01")),
                by = "5 years")

# Gráfico IPC
ggplot(data, aes(x = Fecha, y = IPC)) +
  geom_line(color = "blue") +
  labs(title = "IPC Uruguay", x = "Fecha", y = "IPC") +
  scale_x_date(date_labels = "%Y", breaks = breaks_5, minor_breaks = NULL) +
  theme_minimal()

# Gráfico Tipo de Cambio
ggplot(data, aes(x = Fecha, y = Tipo_Cambio)) +
  geom_line(color = "red") +
  labs(title = "Tipo de Cambio USD/UYU", x = "Fecha", y = "Precio del Dólar") +
  scale_x_date(date_labels = "%Y", breaks = breaks_5, minor_breaks = NULL) +
  theme_minimal()

2 Comentarios

Ambas series presentan una tendencia creciente sostenida.

En el caso del tipo de cambio, se observa un salto brusco alrededor de 2002, coincidente con la crisis económica de ese año, lo que sugiere la necesidad de considerar un análisis de intervención en etapas posteriores.

No se detectan patrones estacionales evidentes a simple vista, aunque se confirmará formalmente en los siguientes pasos.

3 Paso 2 - Especificación y estimación de modelos univariantes SARIMA

# Crear la serie temporal
ipc_ts <- ts(data$IPC, start = c(1972, 4), frequency = 12)

# Logaritmo de la serie
log_ipc <- log(ipc_ts)

# ========================
# Primera diferencia del log(IPC)
# ========================
diff_log_ipc <- diff(log_ipc)

# Varianza de la primera diferencia
var_diff_log_ipc <- var(diff_log_ipc, na.rm = TRUE)
print(paste("Varianza de la primera diferencia log(IPC):", round(var_diff_log_ipc, 6)))
## [1] "Varianza de la primera diferencia log(IPC): 0.000591"
# ECM de la primera diferencia
ecm_diff_log_ipc <- sqrt(mean(diff_log_ipc^2, na.rm = TRUE))
print(paste("ECM de la primera diferencia log(IPC):", round(ecm_diff_log_ipc, 6)))
## [1] "ECM de la primera diferencia log(IPC): 0.033097"
# Gráfico de la primera diferencia
autoplot(diff_log_ipc) +
  ggtitle("Serie temporal: Primera Diferencia log(IPC)") +
  xlab("Tiempo") +
  ylab("Primera Diferencia log(IPC)")

# ACF y PACF de la primera diferencia
acf(diff_log_ipc, main = "ACF - Primera Diferencia log(IPC)")

pacf(diff_log_ipc, main = "PACF - Primera Diferencia log(IPC)")

# ========================
# Diferencia estacional sobre la primera diferencia
# ========================
seasonal_diff_of_diff_log_ipc <- diff(diff_log_ipc, lag = 12)

# Varianza de la diferencia estacional sobre la primera diferencia
var_seasonal_diff <- var(seasonal_diff_of_diff_log_ipc, na.rm = TRUE)
print(paste("Varianza de la diferencia estacional sobre la primera diferencia:", round(var_seasonal_diff, 6)))
## [1] "Varianza de la diferencia estacional sobre la primera diferencia: 0.00042"
# ECM de la diferencia estacional sobre la primera diferencia
ecm_seasonal_diff <- sqrt(mean(seasonal_diff_of_diff_log_ipc^2, na.rm = TRUE))
print(paste("ECM de la diferencia estacional sobre la primera diferencia:", round(ecm_seasonal_diff, 6)))
## [1] "ECM de la diferencia estacional sobre la primera diferencia: 0.020497"
# Gráfico de la diferencia estacional sobre la primera diferencia
autoplot(seasonal_diff_of_diff_log_ipc) +
  ggtitle("Serie temporal: Diferencia Estacional sobre la Primera Diferencia log(IPC)") +
  xlab("Tiempo") +
  ylab("Diferencia Estacional sobre la Primera Diferencia log(IPC)")

# ACF y PACF de la diferencia estacional sobre la primera diferencia
acf(seasonal_diff_of_diff_log_ipc, main = "ACF - Dif. Estacional sobre Primera Dif. log(IPC)")

pacf(seasonal_diff_of_diff_log_ipc, main = "PACF - Dif. Estacional sobre Primera Dif. log(IPC)")

# Estimación del modelo SARIMA
modelo_sarima <- arima(log_ipc, order = c(2,1,2), seasonal = list(order = c(2,1,0), period = 12))


# Cargar modelo y calcular residuos
residuos <- residuals(modelo_sarima)

# Estadísticas
media_res <- mean(residuos)
sd_res <- sd(residuos)
t_stat <- media_res / sd_res

# Mostrar resultados como texto continuo
cat("mean (residuos) =", format(media_res, digits=8), "\n")
## mean (residuos) = -0.00061497119
cat("sd (residuos) =", format(sd_res, digits=8), "\n")
## sd (residuos) = 0.0175409
cat("t = mean(residuos) / sd(residuos) =", format(t_stat, digits=8), "\n\n")
## t = mean(residuos) / sd(residuos) = -0.035059272
# Prueba Ljung-Box lag 6
cat("Box-Ljung test (lag = 6)\n")
## Box-Ljung test (lag = 6)
box_ljung_6 <- Box.test(residuos, lag = 6, type = "Ljung-Box")
cat(paste0("X-squared = ", round(box_ljung_6$statistic, 4), ", df = ", box_ljung_6$parameter, ", p-value = ", format(box_ljung_6$p.value, digits=4)), "\n\n")
## X-squared = 17.3644, df = 6, p-value = 0.008033
# Prueba Ljung-Box lag 10
cat("Box-Ljung test (lag = 10)\n")
## Box-Ljung test (lag = 10)
box_ljung_10 <- Box.test(residuos, lag = 10, type = "Ljung-Box")
cat(paste0("X-squared = ", round(box_ljung_10$statistic, 4), ", df = ", box_ljung_10$parameter, ", p-value = ", format(box_ljung_10$p.value, digits=4)), "\n\n")
## X-squared = 24.549, df = 10, p-value = 0.006269
# Prueba Jarque-Bera
cat("Jarque-Bera Test\n")
## Jarque-Bera Test
jb_test <- jarque.bera.test(residuos)
cat(paste0("X-squared = ", round(jb_test$statistic, 4), ", df = ", jb_test$parameter, ", p-value = ", format(jb_test$p.value, digits=4)), "\n")
## X-squared = 7206.3907, df = 2, p-value = 0