Econometría II: ARCH

Departamento de Economía

Carlos A. Yanes G.

2024-04-21

Paquetes con que se trabaja la sesión

Los paquetes que vamos a utilizar en la sesión de hoy son:

Note

Para trabajar en esta ocasión vamos a usar los paquetes de :

library(pacman)
p_load(readxl, TSstudio, tidyverse, stats, urca, forecast, ggfortify, ggplot2, tseries, fpp2, dynlm, broom))
  • Es importante resaltar el paquete dynlm, ya que con el estimaremos los modelos. Algo de lo que estará explicado aquí tiene mucho del libro (Colonescu 2016)

Preambulo

Modelo ARCH

Definición

Son modelos utilizados para modelar la media condicional de una serie y con esto su error. Son muy usados para pronostico de volatilidad o choque en el tiempo de la variable observada.

  • \[y_t=\phi+\varepsilon_{t}\]
  • \[\varepsilon_t=\rho_{t-1}+\nu_t\]
  • \[\nu_t \sim N(0, \sigma_t^2)\]

Contexto de los modelos

  • Con la heterocedasticidad los estimadores siguen siendo lineales e insesgados pero ya no con mínima varianza. \[Var(\epsilon_{t}|X)=\sigma^{2}_{i}; \ con \quad i=1,2,...,n\]
  • Suponga que tiene un modelo AR, de tal forma: \[Y_{t}= \phi Y_{t-1}+\epsilon_{t}, \quad |\phi| < 1\]
  • Se encuentra que su valor esperado (esperanza) y su varianza será: \[E(Y)=0 \quad Var= \frac{\sigma^{2}_{\epsilon}}{(1-\phi^{2})}\]

Contexto de los modelos

Un modelo ARCH es:

  • La forma matemática de \[Y_{t}= \phi Y_{t-1}+\epsilon_{t}, \quad |\phi| < 1\]
  • Si su varianza es: \[Var_{t-1}\epsilon_{t}=h^{2}_{t}= \alpha_{0}+\alpha_{1}\epsilon^{2}_{t-1}\]
  • Lo anterior puede ser reescrito como: \[h^{2}_{t}-\sigma^{2}= \alpha_{1}(\epsilon^{2}_{t-1}-\sigma^{2})\]

Datos

Cartera comercial de bancos (pero en crecimiento)

Datos a trabajar

Code
bd <- read_excel("cartera.xlsx")
bd <- bd |> select(Cartera)
bd <- bd |> mutate(rt = log(Cartera) - lag(log(Cartera)))
rcartera <- ts(bd$rt, frequency=12, start=c(2016,1))
rcartera
               Jan           Feb           Mar           Apr           May
2016            NA  0.0113423689 -0.0013808805  0.0054645843  0.0143072650
2017 -0.0099579117  0.0089734207  0.0040926323  0.0058287453  0.0067132948
2018 -0.0072869842  0.0046124227  0.0061942167  0.0039261808  0.0064224874
2019 -0.0089685136  0.0104725121  0.0084737600  0.0067576124  0.0103946742
2020 -0.0005332223  0.0128567617  0.0371648642  0.0062921845  0.0021920525
2021 -0.0039580020  0.0095716298  0.0057939311  0.0072935399  0.0083746472
2022  0.0011631814  0.0194560368  0.0150328918  0.0178367773  0.0158412595
2023 -0.0051473815  0.0060605071 -0.0021072533  0.0041548530  0.0019649037
2024 -0.0039752525                                                        
               Jun           Jul           Aug           Sep           Oct
2016  0.0061300410  0.0078190948  0.0042191543  0.0036608353  0.0038919141
2017  0.0092028116 -0.0005228006  0.0017695858  0.0071302856  0.0039400221
2018  0.0045049675 -0.0016141501  0.0022366549  0.0048404436  0.0122001040
2019  0.0049023235  0.0055053505  0.0096920951  0.0118865748  0.0041901234
2020  0.0014928139 -0.0069810976 -0.0105203468 -0.0033904572 -0.0029508486
2021  0.0096960714  0.0089965025  0.0110344494  0.0126487841  0.0101998133
2022  0.0189272008  0.0124375975  0.0127221986  0.0133045232  0.0124867977
2023  0.0066352545  0.0003132710  0.0023679837  0.0039886973  0.0001233310
2024                                                                      
               Nov           Dec
2016  0.0103610892  0.0023106913
2017  0.0057527192  0.0055471143
2018  0.0128743676  0.0080044644
2019  0.0128023460  0.0003695568
2020 -0.0009316101 -0.0035530803
2021  0.0185225006  0.0111566507
2022  0.0098966031  0.0094549866
2023  0.0022081319 -0.0012882544
2024                            
Code
par(mfrow = c(1, 2))
plot.ts(rcartera)
hist(rcartera, main="", breaks=20, freq=FALSE, col="grey")

Modelo

Modelo

Code
tcartera.prom <- dynlm(rcartera~1)
summary(tcartera.prom )

Time series regression with "ts" data:
Start = 2016(2), End = 2024(1)

Call:
dynlm(formula = rcartera ~ 1)

Residuals:
      Min        1Q    Median        3Q       Max 
-0.016399 -0.003962 -0.000067  0.004362  0.031287 

Coefficients:
             Estimate Std. Error t value Pr(>|t|)    
(Intercept) 0.0058783  0.0007339    8.01 2.87e-12 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 0.00719 on 95 degrees of freedom
  (1 observation deleted due to missingness)

Modelo

  • A continuación lo que requerimos es tener el comportamiento del residuo
  • Las noticias son las que alimentan la volatilidad de la serie.
  • Una vez estimado el modelo en media (solo con constante), procedemos aplicar el Test de Lagrange \[(T-q)R^2 \sim \chi^2_{(1-\alpha, q)}\] Siendo \(H_0:\gamma_i=\gamma_j=0\).
  • El cual contrasta a: \[H_a: \gamma_1\neq\gamma_2\neq0\]
  • Al estimar vamos a tener la siguiente ecuación \[\varepsilon_t^2=\gamma_0+\gamma_1\varepsilon_{t-1}^2\]

Modelo de error

Code
errorsq <- ts(resid(tcartera.prom)^2)
tcar.ARCH <- dynlm(errorsq~L(errorsq))
summary(tcar.ARCH)

Time series regression with "ts" data:
Start = 2, End = 96

Call:
dynlm(formula = errorsq ~ L(errorsq))

Residuals:
       Min         1Q     Median         3Q        Max 
-6.402e-05 -4.746e-05 -3.437e-05 -9.000e-07  9.275e-04 

Coefficients:
             Estimate Std. Error t value Pr(>|t|)    
(Intercept) 5.069e-05  1.271e-05   3.988 0.000133 ***
L(errorsq)  1.380e-02  1.038e-01   0.133 0.894512    
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 0.0001128 on 93 degrees of freedom
Multiple R-squared:  0.0001901, Adjusted R-squared:  -0.01056 
F-statistic: 0.01768 on 1 and 93 DF,  p-value: 0.8945

Modelo

Estamos al punto de aplicar entonces el Test de Lagrange

Code
T <- nobs(tcartera.prom)
q <- length(coef(tcar.ARCH))-1
Rsq <- glance(tcar.ARCH)[[1]]
LM <- (T-q)*Rsq
alpha <- 0.05
Chicr <- qchisq(1-alpha, q)

Lo cual nos arroja un valor de 0.0180553 < 3.8415, que es prácticamente cero -A veces este valor viene en notación cientifica-. En este caso nuestra serie no tiene efectos autoregresivos o ARCH.

Para decir que nuestra serie posee efectos ARCH este valor o test de Lagrange debe ser siempre mayor al estadístico crítico de la distribución \(\chi^2\).

Una forma automática del Test

Code
library(FinTS)
carteraArchTest <- ArchTest(rcartera, lags=1, demean=TRUE)
carteraArchTest

    ARCH LM-test; Null hypothesis: no ARCH effects

data:  rcartera
Chi-squared = 0.018055, df = 1, p-value = 0.8931

Graficando volatilidad

Code
hhat <- ts(2*tcar.ARCH$fitted.values^2)
plot.ts(hhat)

Gracias por su atención!!

Referencias

Colonescu, Constantin. 2016. Principles of Econometrics. Boston.