Cargar librerías:
library(readr)
library(ggplot2)
library(lmtest)
## Loading required package: zoo
##
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
##
## as.Date, as.Date.numeric
library(sandwich)
library(nlme)
Cargar datos (CSV):
df <- read_csv("inpc.csv")
## Rows: 300 Columns: 4
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (1): Fecha
## dbl (3): INPC, CPIAUCSL, t
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
Se estima una regresión lineal simple del índice de precios en función del tiempo (t), utilizando el método de Mínimos Cuadrados Ordinarios (MCO). El objetivo es identificar la tendencia de largo plazo del índice y obtener la recta que mejor ajusta su comportamiento a lo largo del tiempo, la cual se grafica junto con los datos observados.
Cálculo del Modelo: \[ INPC_t = \beta_0 + \beta_1 t + u_t \]
modelo_mx <- lm(INPC ~ t, data = df)
summary(modelo_mx)
##
## Call:
## lm(formula = INPC ~ t, data = df)
##
## Residuals:
## Min 1Q Median 3Q Max
## -7.5984 -2.0510 -0.3451 2.1021 5.8256
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 5.697151 0.361712 15.75 <2e-16 ***
## t 0.278673 0.002083 133.78 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 3.125 on 298 degrees of freedom
## Multiple R-squared: 0.9836, Adjusted R-squared: 0.9836
## F-statistic: 1.79e+04 on 1 and 298 DF, p-value: < 2.2e-16
# Recta estimada (intercepto y pendiente)
b0_mx <- coef(modelo_mx)[1]
b1_mx <- coef(modelo_mx)[2]
cat("\nRecta estimada (México): INPC_hat =", round(b0_mx, 6), "+", round(b1_mx, 6), "* t\n")
##
## Recta estimada (México): INPC_hat = 5.697151 + 0.278673 * t
# Predicción
df$INPC_hat <- fitted(modelo_mx)
# Gráfica
p_mx <- ggplot(df, aes(x = t)) +
# Datos observados
geom_point(aes(y = INPC, color = "INPC observado"), size = 1.6, alpha = 0.7) +
# Recta MCO
geom_line(aes(y = INPC_hat, color = "Recta MCO"), linewidth = 1.3) +
# Diseño de la gráfica
scale_color_manual( name = "", values = c("INPC observado" = "blue","Recta MCO" = "red")) + labs(title = "México: INPC vs tiempo (MCO)", subtitle = paste0("INPĈ = ", round(b0_mx, 3), " + ", round(b1_mx, 3), "·t"), x = "t (1 = Ene 1990, …)", y = "INPC") + theme_minimal(base_size = 13) + theme(legend.position = "top", legend.text = element_text(size = 11), plot.title = element_text(face = "bold"), plot.subtitle = element_text(size = 11))
print(p_mx)
Los resultados del modelo de Mínimos Cuadrados Ordinarios (MCO) muestran
que el Índice Nacional de Precios al Consumidor (INPC) en México
presenta una tendencia creciente y prácticamente lineal a lo largo del
periodo analizado (1990–2014).
La recta estimada es: \[ INPC_t = 5.697151 + 0.278673 t \] donde el intercepto representa el nivel estimado del índice al inicio del periodo, mientras que la pendiente indica que, en promedio, el INPC aumentó aproximadamente 0.279 pts. por mes.
La gráfica confirma visualmente este resultado, ya que la recta estimada por MCO se ajusta de manera estrecha a los valores observados del índice, lo que sugiere que el tiempo explica una proporción muy elevada de la variación del INPC durante el periodo considerado.
Cálculo del Modelo: \[ CPIAUCSL_t = \beta_0 + \beta_1 t + u_t \]
modelo_us <- lm(CPIAUCSL ~ t, data = df)
summary(modelo_us)
##
## Call:
## lm(formula = CPIAUCSL ~ t, data = df)
##
## Residuals:
## Min 1Q Median 3Q Max
## -4.2830 -1.7884 0.3979 1.4644 8.9015
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 1.270e+02 2.611e-01 486.4 <2e-16 ***
## t 3.726e-01 1.504e-03 247.8 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 2.256 on 298 degrees of freedom
## Multiple R-squared: 0.9952, Adjusted R-squared: 0.9952
## F-statistic: 6.139e+04 on 1 and 298 DF, p-value: < 2.2e-16
# Recta estimada (intercepto y pendiente)
b0_us <- coef(modelo_us)[1]
b1_us <- coef(modelo_us)[2]
cat("\nRecta estimada (USA): CPIAUCSL_hat =", round(b0_us, 6), "+", round(b1_us, 6), "* t\n")
##
## Recta estimada (USA): CPIAUCSL_hat = 127.0142 + 0.372648 * t
# Predicción
df$CPIAUCSL_hat <- fitted(modelo_us)
# Gráfica
p_us <- ggplot(df, aes(x = t)) +
# Datos observados
geom_point(aes(y = CPIAUCSL, color = "CPIAUCSL observado"), size = 1.6, alpha = 0.7) +
# Recta MCO
geom_line(aes(y = CPIAUCSL_hat, color = "Recta MCO"), linewidth = 1.3) +
# Diseño de la gráfica
scale_color_manual( name = "", values = c("CPIAUCSL observado" = "blue","Recta MCO" = "red")) + labs(title = "USA: CPIAUCSL vs tiempo (MCO)", subtitle = paste0("CPIAUCSL̂ = ", round(b0_us, 3), " + ", round(b1_us, 3), "·t"), x = "t (1 = Ene 1990, …)", y = "CPIAUCSL") + theme_minimal(base_size = 13) + theme(legend.position = "top", legend.text = element_text(size = 11), plot.title = element_text(face = "bold"), plot.subtitle = element_text(size = 11))
print(p_us)
Los resultados del modelo de Mínimos Cuadrados Ordinarios (MCO) muestran
que el Índice de Precios al Consumidor de Estados Unidos (CPIAUCSL)
presenta una tendencia creciente y prácticamente lineal a lo largo del
periodo analizado (1990–2014).
La recta estimada es: \[ CPIAUCSL_t = 127.014 + 0.373t \] donde el intercepto representa el nivel estimado del índice al inicio del periodo, mientras que la pendiente indica que, en promedio, el CPIAUCSL aumentó aproximadamente 0.373 puntos por mes.
La gráfica confirma visualmente este resultado, ya que la recta estimada por MCO se ajusta de manera estrecha a los valores observados del índice, lo que sugiere que el tiempo explica una proporción muy elevada de la variación del CPIAUCSL durante el periodo considerado.
# Errores de estimación
df$u_mx <- residuals(modelo_mx)
# Gráfica de residuos
p_res_mx <- ggplot(df, aes(x = t, y = u_mx)) +
geom_hline(yintercept = 0, linetype = "dashed") +
geom_point(color = "blue", alpha = 0.7) +
labs(title = "México: Errores de estimación (MCO)",
x = "t (1 = Ene 1990, …)",
y = expression(hat(u)[t])) +
theme_minimal(base_size = 13)
print(p_res_mx)
La gráfica de los residuos muestra que, aunque los errores tienen media
cercana a cero, no se distribuyen aleatoriamente en el tiempo. Se
observan patrones sistemáticos, con periodos de sobreestimación y
subestimación del INPC, lo que indica que el modelo lineal captura la
tendencia general, pero no refleja completamente la dinámica temporal
del índice.
# Errores de estimación
df$u_us <- residuals(modelo_us)
# Gráfica de residuos
p_res_us <- ggplot(df, aes(x = t, y = u_us)) +
geom_hline(yintercept = 0, linetype = "dashed") +
geom_point(color = "blue", alpha = 0.7) +
labs(title = "USA: Errores de estimación (MCO)",
x = "t (1 = Ene 1990, …)",
y = expression(hat(u)[t])) +
theme_minimal(base_size = 13)
print(p_res_us)
Los residuos del modelo para Estados Unidos presentan media cercana a
cero, pero muestran patrones claros a lo largo del tiempo, incluyendo
periodos prolongados de errores positivos y negativos. Esto sugiere
autocorrelación y posibles cambios estructurales, por lo que, aunque el
modelo lineal capta bien la tendencia general del CPI, no explica
completamente la dinámica del índice en todo el periodo.
summary(modelo_mx)$r.squared
## [1] 0.9836209
summary(modelo_us)$r.squared
## [1] 0.9951695
# Crear residuo rezagado
df$u_mx <- residuals(modelo_mx)
df$u_mx_lag1 <- c(NA, df$u_mx[-nrow(df)])
# Gráfica: residuo actual vs residuo rezagado
p_lag_mx <- ggplot(subset(df, !is.na(u_mx_lag1)), aes(x = u_mx_lag1, y = u_mx)) +
geom_hline(yintercept = 0, linetype = "dashed") +
geom_vline(xintercept = 0, linetype = "dashed") +
geom_point(color = "blue", alpha = 0.7) +
labs(title = "México: Residuos vs residuo rezagado (t-1)",
x = expression(hat(u)[t-1]),
y = expression(hat(u)[t])) +
theme_minimal(base_size = 13)
print(p_lag_mx)
* La gráfica de residuos contra su rezago muestra una relación positiva
casi lineal, lo que indica fuerte autocorrelación positiva de primer
orden. * Esto implica que los errores no son independientes en el
tiempo, violando un supuesto clave del modelo MCO.
# Crear residuo rezagado
df$u_us <- residuals(modelo_us)
df$u_us_lag1 <- c(NA, df$u_us[-nrow(df)])
# Gráfica: residuo actual vs residuo rezagado
p_lag_us <- ggplot(subset(df, !is.na(u_us_lag1)), aes(x = u_us_lag1, y = u_us)) +
geom_hline(yintercept = 0, linetype = "dashed") +
geom_vline(xintercept = 0, linetype = "dashed") +
geom_point(color = "blue", alpha = 0.7) +
labs(title = "USA: Residuos vs residuo rezagado (t-1)",
x = expression(hat(u)[t-1]),
y = expression(hat(u)[t])) +
theme_minimal(base_size = 13)
print(p_lag_us)
* La gráfica de residuos contra su rezago muestra una relación positiva
clara, indicando autocorrelación positiva de primer orden. * Aunque con
mayor dispersión que en México, los errores no son independientes en el
tiempo, violando el supuesto clásico del MCO.
cor_mx <- cor(df$u_mx[-1], df$u_mx[-nrow(df)])
cor_mx
## [1] 0.9970596
cor_us <- cor(df$u_us[-1], df$u_us[-nrow(df)])
cor_us
## [1] 0.9727953
dwtest(modelo_mx)
##
## Durbin-Watson test
##
## data: modelo_mx
## DW = 0.0058907, p-value < 2.2e-16
## alternative hypothesis: true autocorrelation is greater than 0
dwtest(modelo_us)
##
## Durbin-Watson test
##
## data: modelo_us
## DW = 0.054312, p-value < 2.2e-16
## alternative hypothesis: true autocorrelation is greater than 0
VEREDICTO: Existe fuerte evidencia de autocorrelación positiva de primer orden en los errores tanto para México como para Estados Unidos. Los tres métodos (gráfico, Pearson y Durbin–Watson) coinciden, por lo que se viola el supuesto de independencia de los errores del MCO.
# 1) Construir primeras diferencias (se pierde 1 observación)
df$dINPC <- c(NA, diff(df$INPC))
df$dt <- c(NA, diff(df$t))
# 2) Crear data frame SOLO con observaciones válidas
df_diff_mx <- subset(df, !is.na(dINPC) & !is.na(dt))
# 3) Estimar modelo en diferencias
modelo_mx_diff <- lm(dINPC ~ dt, data = df_diff_mx)
summary(modelo_mx_diff)
##
## Call:
## lm(formula = dINPC ~ dt, data = df_diff_mx)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.8238 -0.1583 -0.0143 0.1319 1.0869
##
## Coefficients: (1 not defined because of singularities)
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.26560 0.01385 19.18 <2e-16 ***
## dt NA NA NA NA
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.2395 on 298 degrees of freedom
# 4) Guardar residuos del modelo en diferencias
df_diff_mx$u_mx_diff <- residuals(modelo_mx_diff)
# 5) Verificar autocorrelación (Durbin-Watson) sobre el modelo en diferencias
dwtest(modelo_mx_diff)
##
## Durbin-Watson test
##
## data: modelo_mx_diff
## DW = 0.69796, p-value < 2.2e-16
## alternative hypothesis: true autocorrelation is greater than 0
Tras estimar el modelo en primeras diferencias, el estadístico de Durbin–Watson continúa siendo significativamente menor que 2 (DW = 0.69796, p-value < 0.01), lo que indica la persistencia de autocorrelación positiva de primer orden en los errores. Por tanto, si bien la diferenciación atenúa parcialmente la dinámica de los errores, no resulta suficiente para corregir completamente la violación del supuesto de independencia temporal, justificando la aplicación de una diferenciación adicional conforme a las instrucciones del ejercicio.
# 1) Construir primeras diferencias (se pierde 1 observación)
df$dCPI <- c(NA, diff(df$CPIAUCSL))
df$dt <- c(NA, diff(df$t))
# 2) Crear data frame solo con observaciones válidas
df_diff_us <- subset(df, !is.na(dCPI) & !is.na(dt))
# 3) Estimar modelo en primeras diferencias
modelo_us_diff <- lm(dCPI ~ dt, data = df_diff_us)
summary(modelo_us_diff)
##
## Call:
## lm(formula = dCPI ~ dt, data = df_diff_us)
##
## Residuals:
## Min 1Q Median 3Q Max
## -4.2057 -0.1702 0.0163 0.2363 2.3363
##
## Coefficients: (1 not defined because of singularities)
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.3637 0.0304 11.96 <2e-16 ***
## dt NA NA NA NA
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.5257 on 298 degrees of freedom
# 4) Guardar residuos del modelo en diferencias
df_diff_us$u_us_diff <- residuals(modelo_us_diff)
# 5) Verificar autocorrelación (Durbin–Watson) sobre el modelo en diferencias
dwtest(modelo_us_diff)
##
## Durbin-Watson test
##
## data: modelo_us_diff
## DW = 1.1314, p-value = 1.551e-14
## alternative hypothesis: true autocorrelation is greater than 0
Al estimar el modelo en primeras diferencias, el estadístico de Durbin–Watson continúa siendo significativamente inferior a 2 (DW = 1.1314, p-value < 0.01), lo que evidencia la persistencia de autocorrelación positiva en los errores. En consecuencia, la transformación en primeras diferencias no resulta suficiente para corregir completamente la dependencia temporal de los residuos, por lo que es metodológicamente pertinente considerar una diferenciación adicional para atender el problema de autocorrelación.
# 1) Construir segundas diferencias (se pierden 2 observaciones)
df$d2INPC <- c(NA, NA, diff(diff(df$INPC)))
# 2) Crear data frame solo con observaciones válidas
df_diff2_mx <- subset(df, !is.na(d2INPC))
# 3) Estimar modelo en segundas diferencias
# Nota: la segunda diferencia del tiempo es cero (Δ²t = 0),
# por lo que el modelo se reduce a un intercepto
modelo_mx_diff2 <- lm(d2INPC ~ 1, data = df_diff2_mx)
summary(modelo_mx_diff2)
##
## Call:
## lm(formula = d2INPC ~ 1, data = df_diff2_mx)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.75305 -0.10076 -0.00113 0.09981 0.60617
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.000836 0.011608 0.072 0.943
##
## Residual standard error: 0.2004 on 297 degrees of freedom
# 4) Guardar residuos del modelo en diferencias
df_diff2_mx$u_mx_diff2 <- residuals(modelo_mx_diff2)
# 5) Verificar autocorrelación (Durbin–Watson) sobre el modelo en diferencias
# en este caso debido a la degeneración del modelo (singularidad)
Al aplicar segundas diferencias al INPC, la tendencia temporal se elimina completamente, dado que la segunda diferencia del tiempo es idénticamente cero. En consecuencia, el modelo se reduce a una regresión con solo intercepto, lo que refleja una situación de sobrediferenciación. En este contexto, no es posible aplicar el estadístico de Durbin-Watson debido a la degeneración del modelo. Este resultado sugiere que la autocorrelación observada en primeras diferencias no puede corregirse mediante diferenciaciones adicionales.
# 1) Construir segundas diferencias (se pierden 2 observaciones)
df$d2CPI <- c(NA, NA, diff(diff(df$CPIAUCSL)))
# 2) Crear data frame SOLO con observaciones válidas
df_diff2_us <- subset(df, !is.na(d2CPI))
# 3) Estimar modelo en segundas diferencias
# Nota: la segunda diferencia del tiempo es cero (Δ²t = 0),
# por lo que el modelo se reduce a un intercepto
modelo_us_diff2 <- lm(d2CPI ~ 1, data = df_diff2_us)
summary(modelo_us_diff2)
##
## Call:
## lm(formula = d2CPI ~ 1, data = df_diff2_us)
##
## Residuals:
## Min 1Q Median 3Q Max
## -2.39587 -0.19587 0.00413 0.28163 2.29413
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -0.004131 0.032443 -0.127 0.899
##
## Residual standard error: 0.5601 on 297 degrees of freedom
# 4) Guardar residuos del modelo en segundas diferencias
df_diff2_us$u_us_diff2 <- residuals(modelo_us_diff2)
# 5) Nota metodológica:
# No se aplica Durbin-Watson aquí porque el modelo degenera (solo constante)
# y no corresponde evaluar autocorrelación con esta especificación.
Al aplicar segundas diferencias a la serie del CPI para Estados Unidos, el modelo se reduce a una regresión con intercepto únicamente, dado que la segunda diferencia de la variable temporal es nula. El intercepto estimado no resulta estadísticamente significativo, lo que sugiere que, una vez eliminadas tendencias deterministas mediante segundas diferencias, no persiste un componente sistemático en la dinámica media del crecimiento del CPI.
La especificación del modelo degenera, por lo que no es metodológicamente apropiado aplicar pruebas formales de autocorrelación como Durbin–Watson. Este resultado indica que el uso de diferencias adicionales no aporta mayor corrección estructural al problema inicial y sugiere que la autocorrelación observada en especificaciones previas responde a patrones más complejos en la estructura de los errores.
# Asegurarse que el tiempo esté alineado al df de segundas diferencias
df_diff2_mx$t2 <- df$t[!is.na(df$d2INPC)] # mismo filtro que usaste al crear df_diff2_mx
# 1) Residuos vs tiempo
ggplot(df_diff2_mx, aes(x = t2, y = u_mx_diff2)) +
geom_line(color = "steelblue") +
geom_hline(yintercept = 0, linetype = "dashed") +
labs(
title = "México: Residuos del modelo en segundas diferencias",
x = "Tiempo",
y = expression(hat(u)[t])
) +
theme_minimal()
# 2) Residuos vs residuo rezagado
df_diff2_mx$u_mx_diff2_lag1 <- c(NA, df_diff2_mx$u_mx_diff2[-nrow(df_diff2_mx)])
ggplot(subset(df_diff2_mx, !is.na(u_mx_diff2_lag1)),
aes(x = u_mx_diff2_lag1, y = u_mx_diff2)) +
geom_point(color = "steelblue", alpha = 0.7) +
geom_hline(yintercept = 0, linetype = "dashed") +
geom_vline(xintercept = 0, linetype = "dashed") +
labs(
title = "México: Residuos vs residuo rezagado (segundas diferencias)",
x = expression(hat(u)[t-1]),
y = expression(hat(u)[t])
) +
theme_minimal()
Residuos del modelo en segundas diferencias: La gráfica de residuos en
función del tiempo muestra que los errores del modelo en segundas
diferencias oscilan alrededor de cero, sin presentar tendencia
determinística ni patrones sistemáticos persistentes. Esto sugiere que,
tras aplicar segundas diferencias, la serie es estacionaria en media. No
obstante, se observa un aumento gradual en la amplitud de las
fluctuaciones hacia el final de la muestra, lo que indica la presencia
de heterocedasticidad y posibles cambios en la volatilidad de los
choques inflacionarios a lo largo del tiempo.
Residuos vs residuo rezagado (segundas diferencias): La gráfica de dispersión entre los residuos contemporáneos y sus rezagos muestra una nube aproximadamente simétrica y centrada en el origen, sin evidencia de una relación lineal o patrón sistemático. La ausencia de una estructura clara en esta relación sugiere que los residuos no presentan autocorrelación serial, lo que indica que el proceso de segundas diferencias logra capturar adecuadamente la dependencia temporal presente en la serie original.
# Varianza del error
var(df_diff2_mx$u_mx_diff2)
## [1] 0.04015689
# Autocovarianza lag 1
cov(df_diff2_mx$u_mx_diff2[-1],
df_diff2_mx$u_mx_diff2[-length(df_diff2_mx$u_mx_diff2)])
## [1] -0.005473204
La varianza estimada de los residuos del modelo en segundas diferencias es relativamente baja (0.0402), lo que indica que, una vez eliminada la tendencia y la dependencia temporal mediante diferenciación, los choques inflacionarios presentan una dispersión acotada alrededor de su media.
Por su parte, la autocovarianza de primer orden es pequeña y negativa (−0.0055), lo que sugiere que no existe una dependencia serial relevante entre los errores contemporáneos y sus rezagos inmediatos. Este resultado es consistente con la evidencia gráfica y respalda la conclusión de que las segundas diferencias atenúan de manera efectiva el problema de autocorrelación presente en las especificaciones previas.
# Asegurarse que el tiempo esté alineado al df de segundas diferencias
df_diff2_us$t2 <- df$t[!is.na(df$d2CPI)] # mismo filtro que usaste al crear df_diff2_us
# 1) Residuos vs tiempo
ggplot(df_diff2_us, aes(x = t2, y = u_us_diff2)) +
geom_line(color = "steelblue") +
geom_hline(yintercept = 0, linetype = "dashed") +
labs(
title = "Estados Unidos: Residuos del modelo en segundas diferencias",
x = "Tiempo",
y = expression(hat(u)[t])
) +
theme_minimal()
# 2) Residuos vs residuo rezagado
df_diff2_us$u_us_diff2_lag1 <- c(NA, df_diff2_us$u_us_diff2[-nrow(df_diff2_us)])
ggplot(subset(df_diff2_us, !is.na(u_us_diff2_lag1)),
aes(x = u_us_diff2_lag1, y = u_us_diff2)) +
geom_point(color = "steelblue", alpha = 0.7) +
geom_hline(yintercept = 0, linetype = "dashed") +
geom_vline(xintercept = 0, linetype = "dashed") +
labs(
title = "Estados Unidos: Residuos vs residuo rezagado (segundas diferencias)",
x = expression(hat(u)[t-1]),
y = expression(hat(u)[t])
) +
theme_minimal()
Residuos vs tiempo (segundas diferencias) El gráfico de residuos en el
tiempo muestra que, tras aplicar segundas diferencias, los errores
oscilan alrededor de cero sin una tendencia sistemática clara. No
obstante, se observa heterogeneidad en la varianza, con episodios de
mayor volatilidad en ciertos periodos, lo que sugiere la posible
presencia de cambios estructurales o choques transitorios. Aun así, no
se aprecia un patrón persistente que indique autocorrelación serial
evidente.
Residuos vs residuo rezagado (segundas diferencias): El diagrama de dispersión entre los residuos y su rezago inmediato no exhibe una relación lineal clara ni un patrón definido. Los puntos se concentran de forma aproximadamente simétrica alrededor del origen, lo que indica que, bajo segundas diferencias, la autocorrelación de primer orden se reduce sustancialmente. La dispersión restante parece responder más a variabilidad idiosincrática que a dependencia serial sistemática.
# Varianza del error
var(df_diff2_us$u_us_diff2)
## [1] 0.3136595
# Autocovarianza lag 1
cov(df_diff2_us$u_us_diff2[-1],
df_diff2_us$u_us_diff2[-length(df_diff2_us$u_us_diff2)])
## [1] -0.03931409
La varianza estimada de los errores del modelo en segundas diferencias es positiva y de magnitud moderada, lo que refleja una dispersión relevante de los choques no explicados por la especificación.
La autocovarianza de primer orden es negativa y de pequeña magnitud, lo que indica que no existe dependencia serial positiva significativa entre los errores consecutivos.
En conjunto, estos resultados sugieren que la aplicación de segundas diferencias logra mitigar de forma sustancial el problema de autocorrelación, quedando principalmente variabilidad idiosincrática en los residuos.
No se justifica avanzar a una tercera diferenciación. Tras aplicar segundas diferencias, la autocorrelación desaparece en términos prácticos y los residuos se comportan como ruido no correlacionado. Una iteración adicional implicaría sobre-diferenciar la serie sin un beneficio econométrico claro.
Idea: * Se pronostica la segunda diferencia del índice en T+1: Δ^2 Y_{T+1} * Se reconstruye el nivel en T+1 usando: Δ^2 Y_{T+1} = Y_{T+1} - 2Y_T + Y_{T-1} por lo tanto: Y_{T+1} = 2Y_T - Y_{T-1} + (Δ^2 Y_{T+1})^
Nota: * En esta especificación con tiempo lineal, Δ^2 t = 0, por lo que el modelo suele degenerar a constante: d2Y ~ 1 (solo intercepto). * El intervalo en niveles se obtiene trasladando linealmente el intervalo de predicción de Δ^2Y.
# Predicción de INPC_{T+1} desde el modelo en segundas diferencias (México)
# (Modelo: d2INPC ~ 1)
# 1) Pronóstico de Δ^2 INPC_{T+1}
# Nota: newdata debe tener AL MENOS 1 fila; si no, predict() devuelve 0 predicciones.
pred_d2INPC_next <- predict(
modelo_mx_diff2,
newdata = data.frame(dummy = 1), # 1 fila (la variable dummy no se usa)
interval = "prediction",
level = 0.95
)
# 2) Asegurar formato data.frame con columnas fit/lwr/upr
pred_df <- as.data.frame(pred_d2INPC_next)
# Extraer valores (primera y única fila)
d2_hat <- as.numeric(pred_df$fit[1])
d2_lwr <- as.numeric(pred_df$lwr[1])
d2_upr <- as.numeric(pred_df$upr[1])
# 3) Últimos dos niveles observados del INPC
INPC_T <- tail(df$INPC, 1)
INPC_Tm1 <- tail(df$INPC, 2)[1]
# 4) Reconstrucción del nivel INPC_{T+1}
# Δ^2 INPC_{T+1} = INPC_{T+1} - 2·INPC_T + INPC_{T-1}
INPC_T1_hat <- 2 * INPC_T - INPC_Tm1 + d2_hat
INPC_T1_lwr <- 2 * INPC_T - INPC_Tm1 + d2_lwr
INPC_T1_upr <- 2 * INPC_T - INPC_Tm1 + d2_upr
# 5) Reporte
cat("\n--- MÉXICO (INPC) ---\n")
##
## --- MÉXICO (INPC) ---
cat("INPC_T :", INPC_T, "\n")
## INPC_T : 87.18898
cat("INPC_T+1 (pred) :", INPC_T1_hat, "\n")
## INPC_T+1 (pred) : 87.61503
cat("PI 95% aprox : [", INPC_T1_lwr, ",", INPC_T1_upr, "]\n")
## PI 95% aprox : [ 87.22 , 88.01005 ]
# Nota metodológica:
# En segundas diferencias con t lineal, Δ^2 t = 0 ⇒ el modelo se reduce a constante.
# La predicción de Δ^2 INPC_{T+1} corresponde al intercepto estimado.
| VALOR REAL INPC ENERO 2015: 87.110103000000 |
| Fuente: Banco de México |
El modelo estimado en segundas diferencias para el Índice Nacional de Precios al Consumidor de México produce una predicción para el nivel del INPC del siguiente periodo de 87.62, a partir de un último valor observado de 87.19. El intervalo de predicción al 95 % se encuentra entre 87.22 y 88.01, lo que incorpora la incertidumbre asociada al proceso estocástico estimado.
Al contrastar esta predicción con el dato oficial correspondiente a enero de 2015 (87.11, Banco de México), se observa que el valor real se sitúa ligeramente por debajo de la estimación puntual, pero dentro del intervalo de predicción. Esto sugiere que el modelo presenta una leve sobreestimación en el punto central, aunque captura adecuadamente la evolución de corto plazo del índice.
# Predicción de INPC_US_{T+1} desde el modelo en segundas diferencias (EE. UU.)
# (Modelo: d2CPI_US ~ 1)
# 1) Pronóstico de Δ^2 CPI_US_{T+1}
# Nota: newdata debe tener AL MENOS 1 fila; si no, predict() devuelve 0 predicciones.
pred_d2CPI_us_next <- predict(
modelo_us_diff2,
newdata = data.frame(dummy = 1), # 1 fila (la variable dummy no se usa)
interval = "prediction",
level = 0.95
)
# 2) Asegurar formato data.frame con columnas fit/lwr/upr
pred_df_us <- as.data.frame(pred_d2CPI_us_next)
# Extraer valores (primera y única fila)
d2_hat_us <- as.numeric(pred_df_us$fit[1])
d2_lwr_us <- as.numeric(pred_df_us$lwr[1])
d2_upr_us <- as.numeric(pred_df_us$upr[1])
# 3) Últimos dos niveles observados del CPI (EE. UU.)
CPI_US_T <- tail(df$CPIAUCSL, 1)
CPI_US_Tm1 <- tail(df$CPIAUCSL, 2)[1]
# 4) Reconstrucción del nivel CPI_US_{T+1}
# Δ^2 CPI_{T+1} = CPI_{T+1} − 2·CPI_T + CPI_{T−1}
CPI_US_T1_hat <- 2 * CPI_US_T - CPI_US_Tm1 + d2_hat_us
CPI_US_T1_lwr <- 2 * CPI_US_T - CPI_US_Tm1 + d2_lwr_us
CPI_US_T1_upr <- 2 * CPI_US_T - CPI_US_Tm1 + d2_upr_us
# 5) Reporte
cat("\n--- ESTADOS UNIDOS (CPI) ---\n")
##
## --- ESTADOS UNIDOS (CPI) ---
cat("CPI_US_T :", CPI_US_T, "\n")
## CPI_US_T : 236.252
cat("CPI_US_T+1 (pred):", CPI_US_T1_hat, "\n")
## CPI_US_T+1 (pred): 235.5169
cat("PI 95% aprox : [", CPI_US_T1_lwr, ",", CPI_US_T1_upr, "]\n")
## PI 95% aprox : [ 234.4128 , 236.6209 ]
# Nota metodológica:
# En segundas diferencias con tendencia lineal, Δ^2 t = 0 → el modelo se reduce a constante.
# La predicción de Δ^2 CPI_US_{T+1} corresponde al intercepto estimado.
| VALOR REAL CPI ENERO 2015 234.747 |
| Fuente: Federal Reserve Bank of St. Louis |
El modelo estimado en segundas diferencias para el índice de precios al consumidor de Estados Unidos genera una predicción para el nivel del CPI del siguiente periodo de 235.52, a partir de un último nivel observado de 236.25. El intervalo de predicción al 95 % se ubica entre 234.41 y 236.62, reflejando la incertidumbre inherente al proceso estimado.
Al comparar esta predicción con el dato oficial observado en enero de 2015 (234.747, Federal Reserve Bank of St. Louis), se encuentra que el valor real se localiza dentro del intervalo de predicción, aunque por debajo de la estimación puntual. Esto indica que, si bien el modelo presenta una ligera sobreestimación en el punto central, reproduce adecuadamente la dinámica de corto plazo del índice.
En conjunto, los resultados sugieren que la especificación en segundas diferencias logra reducir de manera sustantiva la autocorrelación en los errores y produce predicciones coherentes y estadísticamente compatibles con los datos observados, sin que sea necesario aplicar una tercera iteración de diferenciación.
El análisis econométrico realizado sobre los índices de precios al consumidor de México (INPC) y Estados Unidos (CPI) nos permiten evaluar de manera rigurosa la dinámica de corto plazo de ambas series y la capacidad predictiva de modelos en diferencias. A partir de evidencia empírica, se observa que los modelos en niveles presentan problemas claros de autocorrelación en los errores, lo que invalida la inferencia estadística bajo los supuestos clásicos y hace necesaria la transformación de las variables.
La estimación en primeras diferencias redujo parcialmente estos problemas, pero no logró eliminarlos por completo. En contraste, la especificación en segundas diferencias logra un comportamiento más cercano al de un proceso estacionario, con errores centrados alrededor de cero, sin patrones sistemáticos en el tiempo y con autocovarianzas de primer rezago cercanas a cero. Este resultado justifica metodológicamente detener el proceso de diferenciación en el segundo orden, ya que una tercera iteración implicaría una pérdida innecesaria de información sin beneficios adicionales claros en términos estadísticos.
Bajo esta especificación, el modelo se reduce a una constante, lo que implica que el pronóstico de la segunda diferencia corresponde directamente al intercepto estimado. A partir de este resultado, fue posible reconstruir el nivel del índice para el periodo siguiente mediante la relación algebraica entre niveles y segundas diferencias. Las predicciones obtenidas para enero de 2015, tanto para México como para Estados Unidos, resultan consistentes con los datos oficiales: en ambos casos, el valor observado se encuentra dentro del intervalo de predicción al 95 %, lo que sugiere que el modelo captura adecuadamente la dinámica de corto plazo de los precios.
Si bien las predicciones puntuales presentan ligeras desviaciones respecto a los valores reales, estas diferencias no son estadísticamente significativas y reflejan la incertidumbre inherente a procesos inflacionarios afectados por choques transitorios. En conjunto, los resultados muestran que el uso de modelos en segundas diferencias es una estrategia válida y suficiente para corregir la autocorrelación y generar pronósticos coherentes, sin necesidad de complejizar la especificación con órdenes adicionales de diferenciación o estructuras más restrictivas.