Valor en Riesgo (VaR), parte II

Valor en Riesgo (VaR), parte 2

Anteriormente, había escrito una entrada referente a qué es el Valor en Riesgo (VaR, por sus siglas en inglés) y cómo se podía usar el paquete OCA para estimar, en R, el VaR de vectores univariantes a distintos niveles de significancia. Ahora, voy a presentar, a partir de 4 ejemplos, cómo estimar el VaR con vectores bivariantes.

Ejemplo 1

Este ejemplo es tomado de la página 7 del documento del siguiente enlace: http://www.yieldcurve.com/Mktresearch/LearningCurve/LearningCurve3.pdf

Consider the following hypothetical portfolio, invested in two assets, as shown in Table 1. The standard deviation of each asset has been calculated on historical observation of asset returns. Note that returns are returns of asset prices, rather than the prices themselves; they are calculated from the actual prices by taking the ratio of closing prices. The returns are then calculated as the logarithm of the price relatives. The mean and standard deviation of the returns are then calculated using standard statistical formulae. This would then give the standard deviation of daily price relatives, which is converted to an annual figure by multiplying it by the square root of the number of days in a year, usually taken to be 250.

Table 1 Bond 1 Bond 2
Standard deviation 11.83% 17.65%
Portfolio weighting 60% 40%
Correlation coefficient 0.647
Portfolio value £10,000,000
Standard deviation 12.848%
95% c.i. standard deviation 1.644853
Value-at-Risk 0.211349136
Value-at-Risk £ £2,113,491
library(OCA)
VaR(variance = 0.016506998 ) # resultado del ejemplo
##                 0.95
## VaR normal 0.2113301

Considerando la correlación de los componentes del portafolio

cov <- prod(c(.647, .1183, .1765))
vacov <- matrix(c(0.1183^2, cov, cov, 0.1765^2), 2)
wt <- c(.6,.4)
VaR(variance=vacov, weights = wt)*1E7  # La diferencia se debe redondeos.
          0.95

VaR normal 2113301

Voy a explicar un poco lo que ocurre en este procedimiento:

  1. La parte cov <- prod(c(.647, .1183, .1765)) construye la covarianza a partir de los datos de la correlación y las desvaciones, ya que la función VaRrequiere una matriz de covarianzas. Así, debemos construir las covarianzas como el producto de la correlación por las desviaciones, esto viene del hecho de la defnición de correlación:

\[ \rho_{x,y} = \dfrac{cov(x, y)}{\sigma_x \sigma_y} \rightarrow cov(x, y) = \rho_{x,y}\sigma_x \sigma_y \]

  1. La parte vacov <- matrix(c(0.1183^2, cov, cov, 0.1765^2), 2) construye la matriz de covarianzas, la cual se constituye por las varianzas en su diagonal principal y por las covarianzas en los elementos fuera de la diagonal principal. Recordemos que las varianzas son las desviaciones estándar al cuadrado y que las covarianzas las definimos anteriormente.

Podríamos fácilmente, definir un constructor de matriz de covarianzas a partir de la correlación y las desviaciones para evitarnos estar escribiendo recurrentemente los pasos 1 y 2 anteriores. Así, podemos definir la siguiente función:

varcov_mat <- function(correlation, sd1, sd2){
  cov <- prod(c(correlation, sd1, sd2))
  varcov <- matrix(c(sd1^2, cov, cov, sd2^2), 2)*100
  return(varcov)
}

Esta función está definida para tomar el valor de la correlación (correlation) y las dos desviaciones (sd1 y sd2) y construir y devolver la matriz de covarianzas, ejemplo:

varcov_mat(.647, .1183, .1765)
##          [,1]     [,2]
## [1,] 1.399489 1.350933
## [2,] 1.350933 3.115225

Así podemos resolver el ejemplo 1 usando varcov_mat como constructor de la matriz de covarianzas:

VaR(variance=varcov_mat(.647, .1183, .1765), weights = wt)*1E7 
##                0.95
## VaR normal 21133007

Ejemplo 2

Tomado de: https://www.bionicturtle.com/forum/threads/how-is-portfolio-var-for-assets-with-some-correlation-calculated.1440/ El ejercicio en cuestión es el siguiente:

Assume a two-asset portfolio with a portfolio value of $20 million. Each asset weighs 50% of the portfolio. Asset A has a volatility of 10% and asset B has a volatility of 20%. If the desired confidence is 99%, what is the portfolio VaR if:

  1. the assets are uncorrelated [i.e.., correlation = 0] and
  2. the assets are perfectly correlated [i.e., correlation = 1] and
  3. the assets are partially correlated [i.e., correlation = 0.5]

(i) the assets are uncorrelated [i.e.., correlation = 0]

# VaR asset 1 and 2 individually
VaR(variance = 1,  alpha = .99 ) # VaR for each asset individually
##                0.99
## VaR normal 2.326348
# VaR for two uncorrelated assets
varcov <- diag(2)
VaR( variance = varcov, weights = c(.1,.2), alpha = .99 ) * 10E6 # VaR is expressed in dollars not in million of dollars
##               0.99
## VaR normal 5201872

(ii) the assets are perfectly correlated [i.e., correlation = 1]

varcov <- matrix(rep(1,4), 2)
VaR( variance = varcov, weights = c(.1,.2), alpha = .99 ) * 10E6
##               0.99
## VaR normal 6979044

(iii) the assets are partially correlated [i.e., correlation = 0.5]

varcov <- matrix(c(1, .5, .5, 1), 2)
VaR( variance = varcov, weights = c(.1,.2), alpha = .99  ) * 10E6
##               0.99
## VaR normal 6154938

Ejemplo 3

Tomado de: https://financetrain.com/analytical-approach-to-calculating-var-variance-covariance-method/

Suppose a risk manager wants to calculate the value at risk using the parametric method for a one-day time horizon. The weight of the first asset is 40%, and the weight of the second asset is 60%. The standard deviation is 4% for the first and 7% for the second asset. The correlation coefficient between the two is 25%. The z-score is -1.645. The portfolio value is $50 million.

VaR(variance=varcov_mat(.25, .04, .07)*100, weights = c(.4,.6))*5E6
##                0.95
## VaR normal 39919483

Ejemplo 4

Finalmente, el ejemplo 4 viene de este sitio: https://financetrain.com/analytical-approach-to-calculating-var-variance-covariance-method/

VaR of a Portfolio - Example Let us assume that we want to calculate Parametric VaR at a 95% confidence level over a one-day horizon on a portfolio composed of two assets with the following assumptions:

  • P = $100 million
  • \(w_{1} = 50\%\)
  • \(w_{2} = 50\%\)
  • \(\sigma_{1} = 3\%\)
  • \(\sigma_{2} = 5\%\)
  • \(\rho = 30\%\)
VaR(variance = varcov_mat(0.3, .03,.05), weights = c(.5,.5)) * 100E6
##                0.95
## VaR normal 53930133

No hay comentarios:

Publicar un comentario