El presente taller desarrolla conceptos básicos de análisis económico
y econométrico aplicados a series temporales. Primero se identifica qué
datos serían necesarios para investigar una caída de ventas. Luego se
analiza una noticia económica reciente y, finalmente, se aplica la
metodología de cointegración de Engle y Granger (1987) para estudiar si
existe una relación de largo plazo entre la producción industrial
(INDPRO) y la oferta monetaria (M1NSA) usando
el archivo QUARTERLY.xls.
La variable que se quiere explicar es la caída de ventas de la empresa, medida como el cambio porcentual de las ventas. Esta variable puede analizarse de dos formas:
En este caso, como la empresa reporta una caída del 15%, la variable dependiente sería:
\[ \text{Variación porcentual de ventas} = \frac{Ventas_t - Ventas_{t-1}}{Ventas_{t-1}} \times 100 \]
Las variables que podrían influir en la caída de ventas son:
Se necesitarían datos cuantitativos y cualitativos. Los principales datos serían:
Para investigar una caída de ventas, lo más adecuado sería usar una serie temporal, porque interesa analizar cómo las ventas cambiaron a lo largo del tiempo. Por ejemplo, se podrían observar ventas mensuales durante los últimos 2 o 3 años.
Sin embargo, también sería útil combinarlo con corte transversal, comparando productos, sucursales o regiones en un mismo periodo. Por eso, el enfoque ideal sería usar datos de panel, porque combinan tiempo y unidades de análisis.
Conclusión del inciso: la empresa debería analizar principalmente una serie temporal de ventas, pero complementarla con datos por producto, sucursal o cliente para entender mejor dónde ocurrió la caída.
La noticia seleccionada es el recorte de la tasa de interés del Banco de México. El 7 de mayo de 2026, el Banco de México decidió reducir su tasa de referencia en 25 puntos básicos, llevándola de 6,75% a 6,50%. La decisión fue dividida, con 3 votos a favor del recorte y 2 votos a favor de mantener la tasa. Además, el banco central señaló que este recorte cerraba el ciclo de reducción de tasas iniciado en marzo de 2024.
Fuente principal: Banco de México (2026), comunicado de política
monetaria.
Fuente periodística: Reuters (2026), noticia sobre la decisión de
Banxico.
La noticia utiliza principalmente datos macroeconómicos y financieros:
La conclusión principal es que el Banco de México decidió reducir la tasa de interés porque observó una economía más débil y una disminución reciente de la inflación. Sin embargo, la inflación todavía se encontraba por encima de la meta del 3%, por lo que la decisión no fue unánime.
Otra conclusión importante es que el banco central considera que la tasa actual de 6,50% sigue siendo restrictiva y suficiente para enfrentar los riesgos inflacionarios. Por eso, el comunicado sugiere que no se esperan más recortes inmediatos.
Las conclusiones son parcialmente válidas porque se basan en datos oficiales de inflación, crecimiento económico y política monetaria. Además, la decisión fue tomada por la autoridad monetaria correspondiente.
Sin embargo, deben interpretarse con cuidado. Una noticia no demuestra causalidad por sí sola. Por ejemplo, no se puede afirmar con certeza que bajar la tasa resolverá la desaceleración económica. También existen riesgos, porque la inflación sigue por encima de la meta y pueden aparecer presiones por tipo de cambio, conflictos internacionales o costos de producción.
Conclusión del inciso: la noticia es válida como análisis descriptivo de la coyuntura económica, pero sus conclusiones deben considerarse con cautela porque dependen de supuestos y proyecciones futuras.
La prueba Dickey-Fuller Aumentada, se utiliza para determinar si una serie temporal es estacionaria o si tiene una raíz unitaria.
Una serie es estacionaria cuando sus propiedades estadísticas, como la media y la varianza, se mantienen relativamente constantes en el tiempo. En cambio, una serie con raíz unitaria es no estacionaria, lo que significa que puede tener tendencia y shocks persistentes.
La forma general de la prueba es:
\[ \Delta Y_t = \alpha + \beta t + \gamma Y_{t-1} + \sum_{i=1}^{p}\delta_i \Delta Y_{t-i} + \varepsilon_t \]
Donde:
Las hipótesis son:
La regla de decisión es:
La prueba se llama “aumentada” porque agrega diferencias rezagadas de la variable para corregir problemas de autocorrelación en los errores.
El número de diferencias rezagadas se determina para asegurar que los errores de la prueba no presenten autocorrelación. Si se incluyen muy pocos rezagos, los errores pueden quedar autocorrelacionados. Si se incluyen demasiados, se pierde eficiencia y grados de libertad.
Los métodos más usados son:
El análisis de cointegración se usa cuando se requiere estimar relaciones de largo plazo, siempre y cuando haya un fundamento teórico que justifique la relación. El razonamiento es teóricamente elegante: Dos series son no estacionarias, pero su combinacion lineal sí lo es.
Dos variables están cointegradas si:
En palabras simples, aunque las variables se muevan con tendencia en el tiempo, pueden mantener una relación de equilibrio de largo plazo. Si los residuos de la regresión de largo plazo son estacionarios, significa que las desviaciones respecto al equilibrio son temporales y tienden a corregirse.
La metodología de Engle y Granger (1987) tiene dos pasos principales:
\[ INDPRO_t = \beta_0 + \beta_1 M1NSA_t + u_t \]
archivo <- "QUARTERLY.xls"
if (!file.exists(archivo)) {
archivo <- file.choose()
}
datos <- read_excel(archivo)
# Estandarizar nombres de variables a mayúsculas
names(datos) <- toupper(names(datos))
# Seleccionar variables necesarias y convertir a numéricas
datos <- datos %>%
select(DATE, M1NSA, INDPRO) %>%
mutate(
DATE = as.character(DATE),
M1NSA = as.numeric(M1NSA),
INDPRO = as.numeric(INDPRO)
) %>%
na.omit() %>%
mutate(TIEMPO = row_number())
head(datos)
## # A tibble: 6 × 4
## DATE M1NSA INDPRO TIEMPO
## <chr> <dbl> <dbl> <int>
## 1 1960Q1 141. 26.8 1
## 2 1960Q2 138. 26.2 2
## 3 1960Q3 140. 25.8 3
## 4 1960Q4 143. 25.2 4
## 5 1961Q1 142. 24.8 5
## 6 1961Q2 141. 25.8 6
summary(datos[, c("M1NSA", "INDPRO")])
## M1NSA INDPRO
## Min. : 138.4 Min. : 24.77
## 1st Qu.: 232.7 1st Qu.: 44.91
## Median : 530.7 Median : 60.08
## Mean : 650.5 Mean : 64.83
## 3rd Qu.:1095.5 3rd Qu.: 83.18
## Max. :1387.6 Max. :112.31
La variable INDPRO representa la producción industrial y
la variable M1NSA representa la oferta monetaria M1 no
ajustada estacionalmente. Como ambas son series macroeconómicas
observadas a lo largo del tiempo, es necesario revisar si son
estacionarias antes de estimar una relación de largo plazo.
ggplot(datos, aes(x = TIEMPO)) +
geom_line(aes(y = INDPRO, color = "INDPRO"), linewidth = 0.8) +
geom_line(aes(y = M1NSA / 10, color = "M1NSA / 10"), linewidth = 0.8) +
labs(
title = "Evolución de INDPRO y M1NSA",
x = "Tiempo trimestral",
y = "Valor",
color = "Variable"
) +
theme_minimal()
Interpretación: visualmente se observa que ambas variables presentan tendencia creciente durante gran parte del periodo. Esto sugiere que podrían ser no estacionarias en niveles, por lo que se debe aplicar la prueba DFA.
Vamos a convertir las variables a logaritmos para facilitar su interpretación y morigerar la volatilidad.
LM1NSA <- log(datos$M1NSA)
LINDPRO <- log(datos$INDPRO)
datos$lindpro <- log(datos$INDPRO)
datos$lm1nsa <- log(datos$M1NSA)
# Ahora el gráfico funcionará
ggplot(datos, aes(x = TIEMPO)) +
geom_line(aes(y = lindpro, color = "Log INDPRO"), linewidth = 0.8) +
geom_line(aes(y = lm1nsa, color = "Log M1NSA"), linewidth = 0.8) +
labs(
title = "Evolución de Log(INDPRO) y Log(M1NSA)",
x = "Tiempo trimestral",
y = "Logaritmo del Valor",
color = "Variable"
) +
theme_minimal()
Primero se aplica la prueba Dickey-Fuller Aumentada a cada variable
en niveles. Como las series muestran tendencia, se utiliza
type = "trend".
adf_m1_nivel <- ur.df(LM1NSA, type = "trend", selectlags = "AIC")
summary(adf_m1_nivel)
##
## ###############################################
## # Augmented Dickey-Fuller Test Unit Root Test #
## ###############################################
##
## Test regression trend
##
##
## Call:
## lm(formula = z.diff ~ z.lag.1 + 1 + tt + z.diff.lag)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.030470 -0.011732 -0.001255 0.012095 0.038278
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -0.0103981 0.0413090 -0.252 0.8015
## z.lag.1 0.0050475 0.0085551 0.590 0.5559
## tt -0.0001070 0.0001214 -0.882 0.3790
## z.diff.lag 0.1280265 0.0726037 1.763 0.0795 .
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.01513 on 188 degrees of freedom
## Multiple R-squared: 0.04268, Adjusted R-squared: 0.02741
## F-statistic: 2.794 on 3 and 188 DF, p-value: 0.04164
##
##
## Value of test-statistic is: 0.59 19.4512 1.8496
##
## Critical values for test statistics:
## 1pct 5pct 10pct
## tau3 -3.99 -3.43 -3.13
## phi2 6.22 4.75 4.07
## phi3 8.43 6.49 5.47
Estadístico de prueba (tau3): 0.59 Valores Críticos:1%: -3.995%: -3.4310%: -3.13 Análisis: Como 0.59 > -3.43 (el valor es mucho mayor que el límite negativo), no rechazamos la Hipótesis Nula. Conclusión: La serie M1NSA tiene raíz unitaria. Es una serie No Estacionaria. Esto confirma que la masa monetaria no regresa a una media y crece de forma persistente.
adf_indpro_nivel <- ur.df(LINDPRO, type = "trend", selectlags = "AIC")
summary(adf_indpro_nivel)
##
## ###############################################
## # Augmented Dickey-Fuller Test Unit Root Test #
## ###############################################
##
## Test regression trend
##
##
## Call:
## lm(formula = z.diff ~ z.lag.1 + 1 + tt + z.diff.lag)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.048200 -0.005682 -0.000085 0.005841 0.043227
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 1.493e-01 4.346e-02 3.435 0.000729 ***
## z.lag.1 -4.236e-02 1.279e-02 -3.312 0.001112 **
## tt 2.825e-04 9.277e-05 3.045 0.002660 **
## z.diff.lag 5.535e-01 5.909e-02 9.368 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.01218 on 188 degrees of freedom
## Multiple R-squared: 0.3454, Adjusted R-squared: 0.3349
## F-statistic: 33.06 on 3 and 188 DF, p-value: < 2.2e-16
##
##
## Value of test-statistic is: -3.3116 8.3523 6.2824
##
## Critical values for test statistics:
## 1pct 5pct 10pct
## tau3 -3.99 -3.43 -3.13
## phi2 6.22 4.75 4.07
## phi3 8.43 6.49 5.47
Estadístico calculado (tau3): 0.59 Valores Críticos:1%: -3.995%: -3.4310%: -3.13 Interpretación: Como el valor del estadístico (0.59) es mucho mayor que el valor crítico al 5% (-3.43), no tenemos evidencia para rechazar la hipótesis nula, Conclusión: La serie M1NSA tiene una raíz unitaria. Es una serie no estacionaria en niveles. Esto es consistente con la teoría económica, ya que los agregados monetarios suelen presentar tendencias crecientes persistentes.
Interpretación: si el estadístico de prueba no es más negativo que los valores críticos, no se rechaza la hipótesis nula de raíz unitaria. En ese caso, la serie no es estacionaria en niveles.
Con los datos del archivo, los resultados esperados muestran que
tanto M1NSA como INDPRO no son estacionarias
en niveles. Por lo tanto, se debe revisar si se vuelven estacionarias al
aplicar primeras diferencias.
d_lm1 <- diff(LM1NSA)
adf_lm1_dif <- ur.df(d_lm1, type = "drift", selectlags = "AIC")
summary(adf_lm1_dif)
##
## ###############################################
## # Augmented Dickey-Fuller Test Unit Root Test #
## ###############################################
##
## Test regression drift
##
##
## Call:
## lm(formula = z.diff ~ z.lag.1 + 1 + z.diff.lag)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.031112 -0.011232 -0.001629 0.011392 0.037487
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.007837 0.001537 5.098 8.32e-07 ***
## z.lag.1 -0.650716 0.091935 -7.078 2.82e-11 ***
## z.diff.lag -0.231754 0.070502 -3.287 0.00121 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.01485 on 188 degrees of freedom
## Multiple R-squared: 0.4546, Adjusted R-squared: 0.4488
## F-statistic: 78.35 on 2 and 188 DF, p-value: < 2.2e-16
##
##
## Value of test-statistic is: -7.078 25.0503
##
## Critical values for test statistics:
## 1pct 5pct 10pct
## tau2 -3.46 -2.88 -2.57
## phi1 6.52 4.63 3.81
Estadístico de prueba (tau2): -7.078 Valores Críticos:1%: -3.465%: -2.8810%: -2.57 Interpretación: Como -7.078 es mucho más negativo que el valor crítico de -2.88, rechazamos con total seguridad la hipótesis nula de raíz unitaria. Conclusión: Esta serie es Estacionaria \(I(0)\)
d_lindpro <- diff(LINDPRO)
adf_lindpro_dif <- ur.df(d_lindpro, type = "drift", selectlags = "AIC")
summary(adf_lindpro_dif)
##
## ###############################################
## # Augmented Dickey-Fuller Test Unit Root Test #
## ###############################################
##
## Test regression drift
##
##
## Call:
## lm(formula = z.diff ~ z.lag.1 + 1 + z.diff.lag)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.049319 -0.006599 0.000397 0.006093 0.041536
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.003884 0.001043 3.724 0.00026 ***
## z.lag.1 -0.505186 0.068691 -7.354 5.75e-12 ***
## z.diff.lag 0.100296 0.071952 1.394 0.16499
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.0125 on 188 degrees of freedom
## Multiple R-squared: 0.2402, Adjusted R-squared: 0.2321
## F-statistic: 29.71 on 2 and 188 DF, p-value: 6.141e-12
##
##
## Value of test-statistic is: -7.3545 27.0466
##
## Critical values for test statistics:
## 1pct 5pct 10pct
## tau2 -3.46 -2.88 -2.57
## phi1 6.52 4.63 3.81
Estadístico calculado: -7.3545 Valor Crítico (1%): -3.46 Valor Crítico (5%): -2.88 Interpretación: El valor -7.3545 es mucho más negativo que el valor crítico incluso al nivel de confianza más exigente (1%). Por lo tanto, rechazamos la hipótesis nula de raíz unitaria. Conclusión: La serie que has testeado aquí es Estacionaria \(I(0)\).
Interpretación: si las primeras diferencias sí son estacionarias, entonces las variables son integradas de orden uno, I(1). Esto permite continuar con la metodología de cointegración de Engle y Granger.
En este caso, los resultados esperados indican que las variables se vuelven estacionarias al diferenciarlas. Por ello, se puede continuar con la estimación de la relación de largo plazo.
Se estima la siguiente relación:
\[ LINDPRO_t = \beta_0 + \beta_1 LM1NSA_t + u_t \]
modelo_lp <- lm(LINDPRO ~ LM1NSA, data = datos)
summary(modelo_lp)
##
## Call:
## lm(formula = LINDPRO ~ LM1NSA, data = datos)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.26557 -0.09248 0.03688 0.09160 0.15612
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 1.013966 0.061930 16.37 <2e-16 ***
## LM1NSA 0.496473 0.009907 50.11 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.1087 on 192 degrees of freedom
## Multiple R-squared: 0.929, Adjusted R-squared: 0.9286
## F-statistic: 2511 on 1 and 192 DF, p-value: < 2.2e-16
tidy(modelo_lp) %>%
kable(digits = 4, caption = "Modelo de largo plazo: INDPRO explicado por M1NSA")
| term | estimate | std.error | statistic | p.value |
|---|---|---|---|---|
| (Intercept) | 1.0140 | 0.0619 | 16.3728 | 0 |
| LM1NSA | 0.4965 | 0.0099 | 50.1143 | 0 |
Con los datos del archivo, la ecuación estimada esperada es aproximadamente:
\[ \widehat{LINDPRO}_t = 28.4908 + 0.0559 LM1NSA_t \]
El coeficiente de LM1NSA es estadísticamente
significativo y el \(R^2\) es alto,
cercano a 0,929. A primera vista esto podría parecer una relación
fuerte. Sin embargo, en series temporales no estacionarias, un \(R^2\) alto y coeficientes significativos no
garantizan que la relación sea válida.
El siguiente paso de Engle y Granger consiste en obtener los residuos de la regresión y aplicarles una prueba de raíz unitaria.
datos$resid_lp <- resid(modelo_lp)
plot(datos$TIEMPO, datos$resid_lp,
type = "l",
main = "Residuos de la relación de largo plazo",
xlab = "Tiempo",
ylab = "Residuos")
abline(h = 0, col = "red")
adf_residuos <- ur.df(datos$resid_lp, type = "none", selectlags = "AIC")
summary(adf_residuos)
##
## ###############################################
## # Augmented Dickey-Fuller Test Unit Root Test #
## ###############################################
##
## Test regression none
##
##
## Call:
## lm(formula = z.diff ~ z.lag.1 - 1 + z.diff.lag)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.045490 -0.007311 0.001587 0.008875 0.042877
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## z.lag.1 -0.022091 0.009577 -2.307 0.0221 *
## z.diff.lag 0.513934 0.061767 8.321 1.67e-14 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.01427 on 190 degrees of freedom
## Multiple R-squared: 0.2769, Adjusted R-squared: 0.2693
## F-statistic: 36.38 on 2 and 190 DF, p-value: 4.192e-14
##
##
## Value of test-statistic is: -2.3067
##
## Critical values for test statistics:
## 1pct 5pct 10pct
## tau1 -2.58 -1.95 -1.62
Usamos los valores críticos de MacKinnon -3.90 ; -3.34; -3.04 para k=2 y muestras grandes.
Si miramos tu estadístico calculado: -2.3067, con los valores de MacKinnon (correctos): Como -2.3067 no es más negativo que -3.34, la conclusión es: No podemos rechazar la hipótesis nula de no cointegración al 5%.
Si los residuos no son estacionarios bajo los valores de MacKinnon, nos enfrentamos a un problema de Regresión Espuria en niveles. Esto implica que:
La relación de largo plazo no es sólida: LM1 e LINDPRO podrían estar moviéndose de forma independiente, y la correlación que ves es solo porque ambas tienen una tendencia (crecen con el tiempo).
No puedes usar el MCE: Si no hay cointegración, no existe un “error” que corregir, por lo que el Modelo de Corrección de Errores no tiene sentido estadístico.
# Durbin-Watson aproximado usando función básica
residuos <- resid(modelo_lp)
dw_aprox <- sum(diff(residuos)^2) / sum(residuos^2)
dw_aprox
## [1] 0.02365098
El estadístico Durbin-Watson esperado es muy bajo, cercano a 0,0236. Esto indica fuerte autocorrelación positiva en los residuos, lo cual es típico de una regresión espuria entre series no estacionarias.
Las variables no están cointegradas porque, aunque
LINDPRO y LM1NSA parecen ser variables I(1),
los residuos de la regresión de largo plazo no resultan estacionarios
bajo los valores críticos adecuados de Engle-Granger.
Esto significa que no existe evidencia suficiente de una relación de equilibrio de largo plazo entre la producción industrial y la oferta monetaria M1 en esta especificación. En otras palabras, las variables pueden crecer en el tiempo, pero sus movimientos no mantienen una conexión estable que corrija desviaciones de largo plazo.
Se sugiere una relación espuria porque la regresión en niveles presenta señales engañosas:
LM1NSA parece significativo.Una relación espuria ocurre cuando dos varables no estacionarias parecen estar relacionadas solo porque ambas se mueven con tendencia en el tiempo, no porque exista una relación económica real y estable entre ellas.
Por eso, aunque la regresión inicial parezca buena, no debe
interpretarse como evidencia suficiente de causalidad o equilibrio de
largo plazo. La conclusión econométrica correcta es que, al no existir
cointegración, la relación entre INDPRO y
M1NSA en niveles puede ser espuria.
En este taller se concluye que antes de estimar relaciones entre variables macroeconómicas es necesario revisar la estacionariedad de las series. La prueba DFA permite identificar si las variables tienen raíz unitaria. Si dos variables son I(1), se puede aplicar la metodología de Engle y Granger para verificar si existe cointegración.
En el caso de INDPRO y M1NSA, la regresión
de largo plazo muestra un coeficiente significativo y un \(R^2\) elevado. Sin embargo, la prueba sobre
los residuos no confirma cointegración. Por ello, no se encuentra
evidencia de una relación estable de largo plazo y se sugiere que la
regresión puede ser espuria.
La teoría económica no establece una relación entre el crecimiento de un agregado monetario y producción industrial a largo plazo. En el corto plazo es posible advertir un efecto inercial por el incremento de precios que podría incentivar la demanda de corto plazo, pero que se diluye en el largo plazo.