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)
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
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.
CASO 1: Si consideramos que los errores son normales
Se muestra las predicciones a 1 paso:
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:Si los residuos siguen una distribución t-student.
Se muestran las predicciones a 1 paso:
# 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
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
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:
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
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 |
Ruey Tsay, Analisis of Financial Time Series, 2005.
Capa Santos H., Valores extremos final