Preparación de los datos

Se procede con la lectura de los datos, en la cual se muestran 9190 datos.

#datos previos 
valor_posicion=10000000 #valor de la posicion
p=0.05 #probabilidad p


library(readr) #permite la lectura de archivos .csv
IBM <- read_csv("C:/Users/conde/Dropbox/modelos de riesgo/VaR/IBM.csv")
IBM=IBM$`Adj Close`
rIBM=diff(log(IBM)) #log retornos de la serie 
length(rIBM)
## [1] 9190

Se obtiene el gráfico de los log retornos de una posición de acciones de la empresa IBM (03 de julio de 1962 hasta el 31 de diciembre de 1998)

Cálculo mediante el método Riskmetrics

Las librerías que se utilizarán son:

library(readxl)
library(fTrading)
library(quantmod)
source("RMfit.R")
mm <- RMfit(rIBM)
## [1] -26042.74
##   0:    -26042.737: 0.939600
##   3:    -26070.067: 0.968125
##   6:    -26071.228: 0.964255
## 
## coeficientes(s):
##        Estimacion  error estandar  t valor   Pr(>|t|)    
## alpha  0.93960000      0.00265658  362.968 < 2.22e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
##  prediccion de la volatilidad:
##      Orig      Vpred
## [1,] 9190 0.01833792
## 
##  Valor en riesgo mediante Riskmetrics:
##       prob        VaR         ES
## [1,] 0.950 0.03016319 0.03782586
## [2,] 0.990 0.04266037 0.04887448
## [3,] 0.999 0.05666842 0.06174542

Así para una posición larga de $10 000 000 y lambda igual a 0.9396 se tiene un valor en riesgo de

0.03016319*valor_posicion
## [1] 301631.9

Cálculo utilizando modelos ARIMA-E GARCH

La serie de los log-retornos sigue un AR(2)-GARCH(1,1), y dado que consideramos una posición larga trabajaremos con el inverso aditivo de la serie de los log-retornos.

library(fGarch)
xt_vect <--rIBM #inverso aditivo de los log retornos
m1 <- garchFit(~arma(2,0)+garch(1,1),data=xt_vect,trace=F,cond.dist = "norm") #estimacion del modelo garch
prediccion=round(predict(m1,1),7)#calculo de las predicciones a 1 paso
names(prediccion)=c("media estimada","error medio", "desviación estándar estimada")
prediccion
##   media estimada error medio desviación estándar estimada
## 1     -0.0007259   0.0181665                    0.0181665
a=prediccion[1]+qnorm(1-p)*prediccion[3] #calculo del VaR a un paso
names(a)="cuantil p"
a
##    cuantil p
## 1 0.02915533

Así para una posición larga de $10 000 000 se tiene un valor de

v=a*valor_posicion
names(v)=NULL
v
##           
## 1 291553.3

De la misma manera, el VaR para la posición con una probabilidad del 0.01 es $415 357.

a=prediccion[1]+qnorm(1-0.01)*prediccion[3] #calculo del VaR a un paso
names(a)="cuantil p"
a*valor_posicion
##   cuantil p
## 1    415357
# caso 2: arma(2,0) garch(1,1) con innovaciones t-student
x=garchFit(formula=~arma(2,0)+garch(1,1),data=xt_vect, cond.dist="std",trace=F)
sigma=predict(x, n.ahead = 1) #proyeccion de la varianza a un paso
names(sigma)=c("media estimada","error medio", "desviación estándar estimada")
sigma
##   media estimada error medio desviación estándar estimada
## 1  -0.0005170822  0.01800724                   0.01800724

El cuantil estandarizado \(5\%\) de la distribución t-student es

v=5 #grados de libertad
#cuantil t-student standar
cuantil_t=qt(p, v) 
#cuantil estandarizado
v=v/(v-2)
cuantilt=(cuantil_t)/sqrt(v)
cuantilt
## [1] -1.56085

Entonces, el cuantil 0.05 de la distribución condicional es:

b=sigma[1,1]+cuantilt*sigma[1,3]
b
## [1] -0.02862368

Así para una posición larga de $10 000 000 se tiene un valor de

abs(b)*valor_posicion
## [1] 286236.8

De la misma manera, el VaR con una probabilidad del 0.01 es $474 523.

b=sigma[1,1]+cuantilt*sigma[1,3]
abs(b)*valor_posicion
## [1] 474523.1

Cálculo utilizando Cuantiles empíricos

sibm <- sort(rIBM) #estadisticos de orden
cuantiles <- round(quantile(sibm,p),7)
cuantiles
##         5% 
## -0.0216122

El VaR para una posición larga de $10 millones es

abs(cuantiles)*valor_posicion
##     5% 
## 216122

Para el cuantil de orden 0,01

cuantiles <- round(quantile(sibm,0.01),7)
cuantiles
##         1% 
## -0.0365701

El VaR con horizonte 1 y probabilidad \(1\%\) para la posición larga es:

abs(cuantiles)*valor_posicion
##     1% 
## 365701

Cálculo utilizando la teoría de Valores extremos

library(evir)
rIBM=rIBM*100 #considerando los log retornos en porcentaje
nRibm=-rIBM # para considerar el minimo, es decir una posicion larga
VaR_ve=function(data,n,p)
{
  m1=gev(data,block=n) #gev estima los parámetros de forma, escala y posicion
  beta=m1$par.ests[3] #parametro de posicion
  alpha=m1$par.ests[2] #parametro de escala
  k=m1$par.ests[1] #parametro de forma
  n=n #bloques
  VaR=beta-(alpha/k)* (1-(-n*log(1-p,exp(1)))^-k)
  VaR=VaR/100
  V=10000000*VaR
  resultado=list(V,alpha,beta,k,n,VaR)
  names(resultado)=c("VaR", "alfa", "beta","k","n","v")
  return(resultado)
}

Para diferentes valores de n y con probabilidad 0.01, tenemos la siguiente tabla:

longitud del subperiodo escala Centralización foma
retornos mínimos
1 mes (n=21, m=437) 0.828 1.916 0.189
1 trimestre (n=63, m=145) 0.938 2.586 0.304
6 meses (n=126, m=72) 1.171 3.170 0.331
1 año (n=252, m=36) 1.578 3.828 0.313
retornos máximos
1 mes (n=21, m=437) 0.979 2.252 0.163
1 trimestre (n=63, m=145) 1.262 3.208 0.158
6 meses (n=126, m=72) 1.423 3.709 0.248
1 año (n=252, m=36) 1.712 4.721 0.184

Considerando n=63 , p=0.01 y una posición larga; tenemos la siguiente estimación de los parámetros:

  1. escala
alpha=VaR_ve(nRibm,63,0.01)[[2]]
names(alpha)=NULL
alpha
## [1] 0.9386851
  2. posicion
beta=VaR_ve(nRibm,63,0.01)[[3]]
names(beta)=NULL
beta
## [1] 2.586207
  3. forma
k=VaR_ve(nRibm,63,0.01)[[4]]
names(k)=NULL
k
## [1] 0.3341974

El 0,01-cuantil de la distribución de valores extremos es:

V=VaR_ve(nRibm,63,0.01)[[6]]
names(V)=NULL
V
## [1] 0.03049694

Para una posición larga de $10 000 000 se tiene un valor en riesgo de :

V=VaR_ve(nRibm,63,0.01)[[1]]
names(V)=NULL
V
## [1] 304969.4

Si la probabilidad es 0,05, entonces el VaR correspondiente es $167.534.

V=VaR_ve(nRibm,63,0.05)[[1]]
names(V)=NULL
V
## [1] 167534.6

Si se elige n = 21 (es decir, aproximadamente 1 mes), entonces los estimadores de los párametros son:

  1. escala
alpha=VaR_ve(nRibm,21,0.01)[[2]]
names(alpha)=NULL
alpha
## [1] 0.8282797
  2. posicion
beta=VaR_ve(nRibm,21,0.01)[[3]]
names(beta)=NULL
beta
## [1] 1.915816
  3. forma
k=VaR_ve(nRibm,21,0.01)[[4]]
names(k)=NULL
k
## [1] 0.1893901

El 0,01-cuantil de la distribución de valores extremos es:

V=VaR_ve(nRibm,21,0.01)[[6]]
names(V)=NULL
V
## [1] 0.03414216

Para una posición larga de $10 000 000 se tiene un valor en riesgo de:

V=VaR_ve(nRibm,21,0.01)[[1]]
names(V)=NULL
V
## [1] 341421.6

Si la probabilidad es 0,05, entonces el VaR correspondiente es

V=VaR_ve(nRibm,21,0.05)[[1]]
names(V)=NULL
V
## [1] 185468.3

Comparación entre métodos

Se han aplicado varios métodos para el cálculo del VaR de los log-retornos diarios de cierto tipo de acciones para una posición larga de $10 millones. Consideremos el VaR de la posición para el siguiente día comercial a través de la siguiente tabla:

Método / Probabilidad 5% 1% 0.1%
RiskMetrics 301 631 426 603 566 684
AR(2)-GARCH(1,1) gaussiano 291 562 415 357 554 128
AR(2)-GARCH(1,1) * 286 236 474 523 827 207
Cuantiles empíricos 216 122 365 701 744 985
Teoría de Valores Extremos 167 534 341 421 663 177

Bibliografía