5 ene 2020

Valor en Riesgo (VaR) en R (3): basados en un Monte Carlo

La siguiente entrada forma parte de un conjunto de entradas donde se exponen diversas metodologías para estimar el Valor en Riesgo (VaR). En el caso de la estimación Monte Carlo, se simulan posibles trayectorias de rentabilidades ficticias para la serie de precios de interés. En nuestro caso utilizaremos las distribuciones normal y t-student, para simular n posibles rendimientos pseudo-aleatorios de nuestro vector de rentabilidades, aproximado los parámetros de esta función a partir de valores históricos de la serie de rendimientos.

library(ggfortify)
library(ggplot2)
library(forecast)
library(tseries)
library(gridExtra)

DAX <- EuStockMarkets[,"DAX"]
returnx <- diff(log(DAX))*100
autoplot(returnx)



# 1. Obtener los momentos de las series
Er <- mean(returnx)
Vr <- sd(returnx)

# 2. Generar rendimientos aleatorios
n<-10000
p <- runif(n, min=0, max=1)
RsimuladoN <- qnorm(p,Er,Vr)

# ********************************************
# 3.1 Var Monte Carlo - Normal
# ********************************************

alpha <- 0.01
VaRMonteCarlo <- quantile(RsimuladoN,alpha)
> VaRMonteCarlo
       1%
-2.356055

# ********************************************
# 3.1 Var Monte Carlo - t
# ********************************************

RsimuladoT <- qt(p,glb)
VaRMonteCarloT <- quantile(RsimuladoT,alpha)

VaRMonteCarloT
       1%
-2.352612

Estas estimaciones del VaR se pueden comparar con las estimaciones más tradicionales del VaR.

# ********************************************
# 3.3 Var paramétrico
# ********************************************

# VaR incondicional: enfoque Delta-Normal
VaRNormal <- Er + sqrt(Vr) * qnorm(alpha)

# VaR incondicional: enfoque Delta-t-student
glb <- length(returnx)-1
VaRt <- Er + sqrt(Vr) * qt(alpha,glb)

# ********************************************
# 3.4 Var histórico
# ********************************************

VaRhist <- quantile(returnx,alpha)

# ********************************************
# 4. Resultados del VaR
# ********************************************

vars <- t(c(VaRNormal,VaRt,VaRhist,VaRMonteCarlo,VaRMonteCarloT))
colnames(vars)<- c("VaR Normal paramétrico",
                   "VaR t paramétrico",
                   "VaR histórico",
                   "VaR Monte Carlo Normal",
                   "VaR Monte Carlo t")
print(t(vars))
                            [,1]
VaR Normal paramétrico -2.295877
VaR t paramétrico      -2.297916
VaR histórico          -2.775251
VaR Monte Carlo Normal -2.356055
VaR Monte Carlo t      -2.352612

qplot(returnx , geom = 'histogram') +
  geom_histogram(fill = 'lightblue' , bins = 30) +
  geom_histogram(aes(returnx[returnx < VaRNormal]) , fill = 'red' , bins = 30) +
  geom_vline(aes(xintercept = VaRNormal), colour="red") +
  geom_vline(aes(xintercept = VaRMonteCarlo), colour="black") +
  labs(x = 'Retornos diarios')


Creando variables por grupos en dplyr (group_by + mutate)

  Simulemos una base de hogares, donde se identifica el hogar, el sexo (1 mujer) y provincia y edad para cada miembro.   # Definir la lista ...