En series de tiempo multivariadas, los modelos más utilizados para describir la dinámica conjunta de varias variables son:
Estos modelos permiten analizar interdependencias dinámicas entre múltiples variables económicas o financieras.
Sea \(y_t\) un vector de dimensión \(k \times 1\) de variables de series de tiempo.
Un modelo VAR de orden \(p\) se define como
\[ y_t = c + A_1 y_{t-1} + A_2 y_{t-2} + \cdots + A_p y_{t-p} + \varepsilon_t \]
donde:
\[ \varepsilon_t \sim N(0,\Sigma) \]
El modelo puede escribirse como
\[ y_t = c + \sum_{i=1}^{p} A_i y_{t-i} + \varepsilon_t \]
donde
\[ A_i = \begin{pmatrix} a_{11}^{(i)} & \dots & a_{1k}^{(i)} \\ \vdots & \ddots & \vdots \\ a_{k1}^{(i)} & \dots & a_{kk}^{(i)} \end{pmatrix} \]
Cada ecuación es una regresión lineal de una variable sobre rezagos de todas las variables.
El proceso VAR(p) es estacionario si las raíces del polinomio característico
\[ \det(I_k - A_1 z - A_2 z^2 - \cdots - A_p z^p) = 0 \]
están fuera del círculo unitario, es decir:
\[ |z| > 1 \]
Teorema (Wold):
Todo proceso estacionario multivariado puede representarse como un promedio móvil infinito:
\[ y_t = \mu + \sum_{i=0}^{\infty} \Psi_i \varepsilon_{t-i} \]
donde:
Esto implica que un VAR(p) es una aproximación finita de esta representación.
Sea \(y_t\) un vector de variables I(1).
Las variables están cointegradas si existe un vector \(\beta\) tal que
\[ \beta' y_t \]
es estacionario.
Si las variables están cointegradas, el VAR puede escribirse como un modelo VEC:
\[ \Delta y_t = \Pi y_{t-1} + \sum_{i=1}^{p-1} \Gamma_i \Delta y_{t-i} + \varepsilon_t \]
donde:
\[ \Pi = \alpha \beta' \]
Teorema (Granger Representation Theorem)
Si un vector \(y_t\) de variables I(1) está cointegrado con rango \(r\), entonces existe una representación VECM:
\[ \Delta y_t = \alpha \beta' y_{t-1} + \sum_{i=1}^{p-1} \Gamma_i \Delta y_{t-i} + \varepsilon_t \]
donde
El término
\[ \beta' y_{t-1} \]
representa el error de equilibrio de largo plazo.
El parámetro
\[ \alpha \]
mide qué tan rápido las variables regresan al equilibrio.
Simulación de un VAR(1)
library(vars)
## Cargando paquete requerido: MASS
## Cargando paquete requerido: strucchange
## Cargando paquete requerido: zoo
##
## Adjuntando el paquete: 'zoo'
## The following objects are masked from 'package:base':
##
## as.Date, as.Date.numeric
## Cargando paquete requerido: sandwich
## Cargando paquete requerido: urca
## Cargando paquete requerido: lmtest
set.seed(123)
y1 <- arima.sim(n=200,list(ar=0.5))
y2 <- arima.sim(n=200,list(ar=0.3))
data <- cbind(y1,y2)
var_model <- VAR(data,p=1,type="const")
summary(var_model)
##
## VAR Estimation Results:
## =========================
## Endogenous variables: y1, y2
## Deterministic variables: const
## Sample size: 199
## Log Likelihood: -549.785
## Roots of the characteristic polynomial:
## 0.4151 0.2793
## Call:
## VAR(y = data, p = 1, type = "const")
##
##
## Estimation results for equation y1:
## ===================================
## y1 = y1.l1 + y2.l1 + const
##
## Estimate Std. Error t value Pr(>|t|)
## y1.l1 0.416735 0.065193 6.392 1.17e-09 ***
## y2.l1 0.013204 0.066976 0.197 0.844
## const -0.003336 0.067326 -0.050 0.961
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
##
## Residual standard error: 0.9496 on 196 degrees of freedom
## Multiple R-Squared: 0.1731, Adjusted R-squared: 0.1647
## F-statistic: 20.51 on 2 and 196 DF, p-value: 8.142e-09
##
##
## Estimation results for equation y2:
## ===================================
## y2 = y1.l1 + y2.l1 + const
##
## Estimate Std. Error t value Pr(>|t|)
## y1.l1 -0.017292 0.068407 -0.253 0.800701
## y2.l1 0.277592 0.070278 3.950 0.000109 ***
## const -0.002551 0.070645 -0.036 0.971230
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
##
## Residual standard error: 0.9964 on 196 degrees of freedom
## Multiple R-Squared: 0.07546, Adjusted R-squared: 0.06603
## F-statistic: 7.999 on 2 and 196 DF, p-value: 0.0004579
##
##
##
## Covariance matrix of residuals:
## y1 y2
## y1 0.90181 -0.09162
## y2 -0.09162 0.99291
##
## Correlation matrix of residuals:
## y1 y2
## y1 1.00000 -0.09682
## y2 -0.09682 1.00000
Las ecuaciones de Yule–Walker multivariadas extienden las ecuaciones del modelo AR al caso de series de tiempo multivariadas, particularmente para procesos VAR(p).
Estas ecuaciones relacionan las matrices de autocovarianza con los parámetros del modelo VAR.
Sea \(y_t\) un vector aleatorio de dimensión \(k \times 1\).
Un modelo VAR(p) se define como
\[ y_t = A_1 y_{t-1} + A_2 y_{t-2} + \cdots + A_p y_{t-p} + \varepsilon_t \]
donde
Definimos la matriz de autocovarianza
\[ \Gamma(h) = E(y_t y_{t-h}') \]
para \(h = 0,1,2,...\)
donde
\[ \Gamma(0) = Var(y_t) \]
Partimos del modelo VAR(p):
\[ y_t = \sum_{i=1}^p A_i y_{t-i} + \varepsilon_t \]
Multiplicamos por \(y_{t-h}'\) y tomamos esperanza:
\[ E(y_t y_{t-h}') = E\left(\sum_{i=1}^p A_i y_{t-i} y_{t-h}'\right) + E(\varepsilon_t y_{t-h}') \]
Para \(h>0\)
\[ E(\varepsilon_t y_{t-h}') = 0 \]
Entonces
\[ \Gamma(h) = \sum_{i=1}^p A_i \Gamma(h-i) \]
Estas son las ecuaciones de Yule–Walker multivariadas.
Para \(h=0\):
\[ y_t y_t' = \left(\sum_{i=1}^p A_i y_{t-i} + \varepsilon_t \right) \left(\sum_{i=1}^p A_i y_{t-i} + \varepsilon_t \right)' \]
Tomando esperanza:
\[ \Gamma(0) = \sum_{i=1}^p A_i \Gamma(i)' + \Sigma \]
donde
Las ecuaciones pueden escribirse como
\[ \Gamma(1) = A_1 \Gamma(0) + A_2 \Gamma(1) + \cdots + A_p \Gamma(p-1) \]
\[ \Gamma(2) = A_1 \Gamma(1) + A_2 \Gamma(0) + \cdots \]
Esto forma un sistema lineal matricial que permite estimar los parámetros del VAR.
Simulación de un VAR(1)
library(vars)
library(MASS)
set.seed(123)
n <- 200
A <- matrix(c(0.5,0.2,
0.1,0.4),2,2)
Sigma <- matrix(c(1,0.3,
0.3,1),2,2)
y <- matrix(0,n,2)
for(t in 2:n){
e <- mvrnorm(1,c(0,0),Sigma)
y[t,] <- A %*% y[t-1,] + e
}
data <- as.data.frame(y)
colnames(data) <- c("y1","y2")
par(mfrow=c(2,1))
plot(data$y1,type="l",col="blue",
main="Serie y1")
plot(data$y2,type="l",col="red",
main="Serie y2")
par(mfrow=c(2,1))
acf(data$y1,main="ACF y1")
acf(data$y2,main="ACF y2")
irf_model <- irf(var_model)
plot(irf_model)
La causalidad de Granger es un concepto introducido por Clive Granger (1969) para evaluar si una serie de tiempo ayuda a predecir otra.
La idea es:
Una variable \(X_t\) causa en el sentido de Granger a \(Y_t\) si el pasado de \(X_t\) mejora la predicción de \(Y_t\) más allá del pasado de \(Y_t\).
Consideremos dos series:
\[ X_t , Y_t \]
Se plantea el siguiente modelo VAR(p)
\[ Y_t = \alpha_0 + \sum_{i=1}^{p} \alpha_i Y_{t-i} + \sum_{i=1}^{p} \beta_i X_{t-i} + \varepsilon_{1t} \]
\[ X_t = \gamma_0 + \sum_{i=1}^{p} \gamma_i X_{t-i} + \sum_{i=1}^{p} \delta_i Y_{t-i} + \varepsilon_{2t} \]
Para verificar si X causa a Y, se plantea:
\[ H_0: \beta_1 = \beta_2 = \cdots = \beta_p = 0 \]
\[ H_1: \exists i \text{ tal que } \beta_i \neq 0 \]
Interpretación:
La prueba usa un estadístico F comparando dos modelos.
\[ Y_t = \alpha_0 + \sum_{i=1}^{p} \alpha_i Y_{t-i} + u_t \]
\[ Y_t = \alpha_0 + \sum_{i=1}^{p} \alpha_i Y_{t-i} + \sum_{i=1}^{p} \beta_i X_{t-i} + \varepsilon_t \]
El estadístico es
\[ F = \frac{(RSS_R - RSS_U)/p}{RSS_U/(T-2p-1)} \]
donde
Existen cuatro posibles casos:
Simulación de dos series donde X causa Y.
library(vars)
set.seed(123)
n <- 200
x <- arima.sim(n=n,list(ar=0.6))
y <- numeric(n)
for(t in 2:n){
y[t] <- 0.5*y[t-1] + 0.8*x[t-1] + rnorm(1)
}
data <- data.frame(x,y)
par(mfrow=c(2,1))
plot(data$x,type="l",col="blue",
main="Serie X")
plot(data$y,type="l",col="red",
main="Serie Y")
var_model <- VAR(data,p=2,type="const")
summary(var_model)
##
## VAR Estimation Results:
## =========================
## Endogenous variables: x, y
## Deterministic variables: const
## Sample size: 198
## Log Likelihood: -545.345
## Roots of the characteristic polynomial:
## 0.7287 0.3553 0.3553 0.09254
## Call:
## VAR(y = data, p = 2, type = "const")
##
##
## Estimation results for equation x:
## ==================================
## x = x.l1 + y.l1 + x.l2 + y.l2 + const
##
## Estimate Std. Error t value Pr(>|t|)
## x.l1 0.528566 0.071783 7.363 5.06e-12 ***
## y.l1 -0.087819 0.068936 -1.274 0.2042
## x.l2 0.035526 0.092961 0.382 0.7028
## y.l2 0.096231 0.053848 1.787 0.0755 .
## const 0.003704 0.067665 0.055 0.9564
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
##
## Residual standard error: 0.952 on 193 degrees of freedom
## Multiple R-Squared: 0.2821, Adjusted R-squared: 0.2672
## F-statistic: 18.96 on 4 and 193 DF, p-value: 3.656e-13
##
##
## Estimation results for equation y:
## ==================================
## y = x.l1 + y.l1 + x.l2 + y.l2 + const
##
## Estimate Std. Error t value Pr(>|t|)
## x.l1 0.781103 0.074863 10.434 < 2e-16 ***
## y.l1 0.478216 0.071894 6.652 2.91e-10 ***
## x.l2 0.085236 0.096950 0.879 0.380
## y.l2 -0.008736 0.056158 -0.156 0.877
## const 0.011546 0.070568 0.164 0.870
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
##
## Residual standard error: 0.9929 on 193 degrees of freedom
## Multiple R-Squared: 0.6962, Adjusted R-squared: 0.6899
## F-statistic: 110.5 on 4 and 193 DF, p-value: < 2.2e-16
##
##
##
## Covariance matrix of residuals:
## x y
## x 0.90632 0.05466
## y 0.05466 0.98576
##
## Correlation matrix of residuals:
## x y
## x 1.00000 0.05783
## y 0.05783 1.00000
causality(var_model,cause="x")
## $Granger
##
## Granger causality H0: x do not Granger-cause y
##
## data: VAR object var_model
## F-Test = 67.43, df1 = 2, df2 = 386, p-value < 2.2e-16
##
##
## $Instant
##
## H0: No instantaneous causality between: x and y
##
## data: VAR object var_model
## Chi-squared = 0.65995, df = 1, p-value = 0.4166
irf_model <- irf(var_model)
plot(irf_model)
La ecuación principal es
\[ Y_t = \alpha_0 + \sum_{i=1}^{p}\alpha_i Y_{t-i} + \sum_{i=1}^{p}\beta_i X_{t-i} + \varepsilon_t \]
y la prueba consiste en verificar
\[ H_0: \beta_1=\beta_2=\dots=\beta_p=0 \]
✅ Si quieres, también puedo darte la demostración matemática completa de la causalidad de Granger desde el VAR, incluyendo:
(esto normalmente lo piden en econometría de maestría o doctorado).