1)Importe los datos de la serie de precios desde con fecha inicio ’2019-01-01’ y fecha de fin ’2020-01-01’. (1pt)

Para ello instalamos el paquete quantmod y luego lo activamos con el comando library

#install.packages("quantmod")
library(quantmod)
## Loading required package: xts
## Loading required package: zoo
## 
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
## 
##     as.Date, as.Date.numeric
## Loading required package: TTR
## Registered S3 method overwritten by 'quantmod':
##   method            from
##   as.zoo.data.frame zoo
## Version 0.4-0 included new data defaults. See ?getSymbols.

Descargamos la base de datos solicitada con el comando getSymbols, para la empresa BBQ Holdings Inc.

getSymbols("BBQ",from="2019-01-01",to="2020-01-01")
## 'getSymbols' currently uses auto.assign=TRUE by default, but will
## use auto.assign=FALSE in 0.5-0. You will still be able to use
## 'loadSymbols' to automatically load data. getOption("getSymbols.env")
## and getOption("getSymbols.auto.assign") will still be checked for
## alternate defaults.
## 
## This message is shown once per session and may be disabled by setting 
## options("getSymbols.warning4.0"=FALSE). See ?getSymbols for details.
## [1] "BBQ"

2. Calcule los retornos: 1) Continuos 2) Discretos.(1pt)

BBQ = BBQ[,"BBQ.Adjusted"]
plot(BBQ)

Para dicho calculo instalamos el paquete PerformanceAnalytics

#install.packages("PerformanceAnalytics")
library(PerformanceAnalytics)
## 
## Attaching package: 'PerformanceAnalytics'
## The following object is masked from 'package:graphics':
## 
##     legend
  1. Retornos Continuos
rend_cont = Return.calculate(BBQ, method="log")
plot(rend_cont)

  1. Retornos Discretos
rend_dis = Return.calculate(BBQ, method="discrete")
plot(rend_dis)

3. Haciendo uso de los retornos continuos. Realice un análisis descriptivo: media, varianza y desviación estándar σ de la distribución de los datos.(3pts)

Observamos que la media es cercana cero y que la dispersión medida por la varianza o la desviación estándar no es muy alta.

Media

media = mean(na.omit(rend_cont)) 
media
## [1] -0.000712841

Varianza

varianza=var(na.omit(rend_cont))
varianza
##              BBQ.Adjusted
## BBQ.Adjusted  0.001395896

Desviación Estándar

desv=sd(na.omit(rend_cont))
desv
## [1] 0.03736169

4. Realice un gráfico de la distribución de los retornos (continuos) y compárelo con una distribución normal simulada a partir de la media y varianza de los retornos obtenidos en la preguntaanterior: ¿La distribución de los datos, se asemeja a una distribución normal? Analice sus resultados.(3pts)

La gráfica de la distribución de los retornos se asemejan a una curva normal. Se observa que en el primer histograma los datos se encuentran concentrados en la media, es decir no se observa una alta dispersión de los datos.El promedio de los retornos es cercano a cero. Con respecto a la simulación esta tiene una distribución normal, comparándola con la distribución de los retornos, se observa que los retornos tienen menos valores extremos, pero que superan a la linea normal que se le ha dibujado. Para evaluar la normalidad será necesario realizar pruebas formales.

hist(rend_cont, density=20, breaks=20, prob=TRUE, 
     xlab="x-variable", ylim=c(0, 13), 
     main="normal curve over histogram")
curve(dnorm(x, mean=media, sd=desv), 
      col="darkblue", lwd=2, add=TRUE, yaxt="n")

Ahora simulamos un distribución normal a partir de la media y la varianza de los retornos obtenidos. La simulación tendrá el mismo tamaño que el de los retornos continuos y finalmente gráficaremos su histograma.

set.seed(1)
dato = rnorm(521,media,desv)
hist(dato, density=20, breaks=20, prob=TRUE, 
     xlab="x-variable", ylim=c(0, 13), 
     main="normal curve over histogram")
curve(dnorm(x, mean=media, sd=desv), 
      col="darkblue", lwd=2, add=TRUE, yaxt="n")

5) Realice tres test de normalidad 1) Jarque-Bera, 2) Kolmogorov, 3) Spahiro-Wilk, ¿Cuál es la hipótesis nula de cada uno de estos test? Interprete sus resultados.(3pts)

  1. Test de Jarque-Bera

El test de Jarque-Bera se formula bajo la hipótesis nula de la normalidad de los residuos, al obtener un p-value < 0.05 (2.2e-16), rechazamos la hipótesis nula, por lo tanto concluimos que la serie en análisis de los retornos continuos del rendimiento de las acciones de BBQ Holding Inc, no se distribuyen normalmente.

Para ello instalamos el paquete normtest

#install.packages("normtest")
library(normtest)
jb.norm.test(na.omit(rend_cont))
## 
##  Jarque-Bera test for normality
## 
## data:  na.omit(rend_cont)
## JB = 195.53, p-value < 2.2e-16
  1. Test de Kolgomorov

El test de Kolgomorov se formula bajo la hipótesis nula de que el conjunto de datos siguen una distribución normal, al obtener una p-value < 0.05 (2.2e-16), rechazamos la hipótesis nula, concluyendo por lo tanto en que los datos de la serie no siguen una distribución normal.

Para ello instalamos el comando nortest

#install.packages("nortest")
library(nortest)
lillie.test(na.omit(rend_cont))
## 
##  Lilliefors (Kolmogorov-Smirnov) normality test
## 
## data:  na.omit(rend_cont)
## D = 0.92126, p-value < 2.2e-16
  1. Test de Shapiro-Wilk

El test de Shapiro-Wilk, se formula bajo la hipótesis nula de que la muestra proviene de una distribución normal, al obtener un p-value < 0.05 (3.168e-08), rechazamos la hipótesis nula, concluyendo por lo tanto en que la muestra obtenida no proviene de una muestra normal.

shapiro.test(as.vector(rend_cont))
## 
##  Shapiro-Wilk normality test
## 
## data:  as.vector(rend_cont)
## W = 0.94384, p-value = 3.168e-08

6. Para un nivel de significancia de alpha1 = 0.01, alpha2 = 0.05,alpha3 = 0.1 Calcule el Value at Risk, con los siguientes métodos (Exprese sus resultados en términos monetarios para una cartera de 100 000 dólares).(6pts)

a) Value at Risk de con datos históricos para cada alpha

b) Value at Risk asumiendo una que los datos se distribuyen como una normal con media (mhu) y varianza (sigma) para un nivel de confianza de alpha.

c) Value at Risk - Montecarlo

Para cada alpha realice las siguiente simulación:

Realice 10 000 simulaciones de un proceso browniano con media (mhu) y varianza (sigma) (A partir de los retornos continuos de la pregunta 2)

Calcule el VaR de cada simulaci´on y guarde su resultado en un vector de datos.

Grafique la distribuci´on de los VaR simulados.

Calcule el promedio, y su intervalo de confianza con los percentiles 0.025 y 0.975 de los datos simulados.

  1. Método histórico

Para alpha=0.01

El Value at Risk se entiende como la pérdida que se podría sufrir en condiciones normales de tiempo, en un intervalo de tiempo y con cierto nivel de probabilidad, para este ejemplo de alpha = 0.01. De lo ejecutado se observa que la máxima pérdida que se puede sufrir o el Value at Risk es de -84,603.08 dólares.

VaR1=VaR(na.omit(rend_cont), p=0.99, method="historical")
VaR1
##     BBQ.Adjusted
## VaR  -0.08460308
VaR1_en_monto = VaR1*1000000
VaR1_en_monto
##     BBQ.Adjusted
## VaR    -84603.08

Para alpha=0.05

Para este ejemplo de alpha = 0.05, se observa que la máxima pérdida que se puede sufrir o el Value at Risk es de -56,181.48 dólares.

VaR2=VaR(na.omit(rend_cont), p=0.95, method="historical")
VaR2
##     BBQ.Adjusted
## VaR  -0.05618148
VaR2_en_monto = VaR2*1000000
VaR2_en_monto
##     BBQ.Adjusted
## VaR    -56181.48

Para alpha=0.1

Para este ejemplo de alpha = 0.1, se observa que la máxima pérdida que se puede sufrir o el Value at Risk es de -39,220.71 dólares.

VaR3=VaR(na.omit(rend_cont), p=0.90, method="historical")
VaR3
##     BBQ.Adjusted
## VaR  -0.03922071
VaR3_en_monto = VaR3*1000000
VaR3_en_monto
##     BBQ.Adjusted
## VaR    -39220.71
  1. Ahora nos piden para un nivel de alpha, calcular el Value at Risk asumiendo que se distribuye con la media y la varianza càlculados de los retornos continuos.Calculamos para un valor del alpha de 0.01.

Asumiendo la media y la varianza calculados de los retornos continuos, y un valor de alpha de 0.01 calculamos el Value at Risk, obteniendo un valor de -87,455.81 dólares.

VaR4 = VaR(na.omit(rend_cont), p=.99, method="gaussian")
VaR4
##     BBQ.Adjusted
## VaR  -0.08745581
VaR4_en_monto = VaR4*1000000
VaR4_en_monto
##     BBQ.Adjusted
## VaR    -87455.81
  1. Ahora realizamos el Value at Risk,con el método de la simulación de Montercarlo.

Para alpha=0.01

VAR_montecarlo1 = numeric()
for (i in 1:10000) {
  changes = rnorm(length(na.omit(rend_cont)),mean=1+media,sd=desv)
  sim.ts = cumprod(c(as.numeric(na.omit(rend_cont[1])),changes))
  sim.R = diff(log(sim.ts))
  sim.q = quantile(sim.R,0.01,na.rm = T)
  sim.VAR1 = exp(sim.q)-1
  VAR_montecarlo1[i] = sim.VAR1
}

Calculamos la media de los VaR simulados

mean(VAR_montecarlo1)
## [1] -0.08500598

Calculamos la desviación estándar de los VaR simulados

sd(VAR_montecarlo1)
## [1] 0.007950918

Nos piden gráficar la distribución de los VaR simulados

plot(density(VAR_montecarlo1))

Calculamos el percentil 0.025

quantile(VAR_montecarlo1,0.025)
##       2.5% 
## -0.1018092

Calculamos el percentil 0.975

quantile(VAR_montecarlo1,0.975)
##       97.5% 
## -0.07039818

Calculamos el Value at Risk

sim.VAR1*100000
##        1% 
## -8679.963

Para alpha=0.05

VAR_montecarlo2 = numeric()
for (i in 1:10000) {
  changes = rnorm(length(na.omit(rend_cont)),mean=1+media,sd=desv)
  sim.ts = cumprod(c(as.numeric(na.omit(rend_cont[1])),changes))
  sim.R = diff(log(sim.ts))
  sim.q = quantile(sim.R,0.05,na.rm = T)
  sim.VAR2 = exp(sim.q)-1
  VAR_montecarlo2[i] = sim.VAR2
}

Calculamos la media de los VaR simulados

mean(VAR_montecarlo2)
## [1] -0.06149044

Calculamos la desviación estándar de los vaR simulados

sd(VAR_montecarlo2)
## [1] 0.004891306

Nos piden gráficar la distribución de los VaR simulados

plot(density(VAR_montecarlo2))

Calculamos el precentil 0.025

quantile(VAR_montecarlo2,0.025)
##        2.5% 
## -0.07138649

Calculamos el percentil 0.975

quantile(VAR_montecarlo2,0.975)
##      97.5% 
## -0.0521258

Calculamos el VaR

sim.VAR2*100000
##        5% 
## -4995.784

Para alpha=0.1

VAR_montecarlo3 = numeric()
for (i in 1:10000) {
  changes = rnorm(length(na.omit(rend_cont)),mean=1+media,sd=desv)
  sim.ts = cumprod(c(as.numeric(na.omit(rend_cont[1])),changes))
  sim.R = diff(log(sim.ts))
  sim.q = quantile(sim.R,0.1,na.rm = T)
  sim.VAR3 = exp(sim.q)-1
  VAR_montecarlo3[i] = sim.VAR3
}

Calculamos la media de los VaR simulados

mean(VAR_montecarlo3)
## [1] -0.04811254

Calculamos la desviación estándar de los vaR simulados

sd(VAR_montecarlo3)
## [1] 0.003976978

Nos piden gráficar la distribución de los VaR simulados

plot(density(VAR_montecarlo3))

Calculamos el precentil 0.025

quantile(VAR_montecarlo3,0.025)
##        2.5% 
## -0.05590937

Calculamos el percentil 0.975

quantile(VAR_montecarlo3,0.975)
##       97.5% 
## -0.04054616

Calculamos el VaR

sim.VAR3*100000
##       10% 
## -4493.537

7) Estime un modelo GARCH(1, 1), a partir de los resultados obtenidos calcule la varianza incondicional y la prevalencia. Interprete sus resultados.(3pts)

La prevalencia es 0.001223 Sobre la varianza incondiconal esta se observa constante

Instalamos el paquete tseries

#install.packages("tseries")

Primero activamos el paquete tseries

library(tseries)

Estimamos el modelo GARCH(1,1)

GARCH_BBQ=diff(log(BBQ))
GARCH11= garch(na.omit(GARCH_BBQ), order = c(1, 1))
## 
##  ***** ESTIMATION WITH ANALYTICAL GRADIENT ***** 
## 
## 
##      I     INITIAL X(I)        D(I)
## 
##      1     1.256306e-03     1.000e+00
##      2     5.000000e-02     1.000e+00
##      3     5.000000e-02     1.000e+00
## 
##     IT   NF      F         RELDF    PRELDF    RELDX   STPPAR   D*STEP   NPRELDF
##      0    1 -6.996e+02
##      1    7 -6.997e+02  9.03e-05  1.65e-04  4.0e-04  7.3e+07  4.0e-05  5.98e+03
##      2   13 -7.007e+02  1.44e-03  1.97e-03  2.9e-01  2.0e+00  4.1e-02  8.15e-01
##      3   15 -7.008e+02  1.90e-04  2.02e-04  2.2e-01  1.7e+00  4.1e-02  7.64e-03
##      4   18 -7.008e+02  4.74e-06  4.79e-06  4.3e-03  2.0e+00  8.2e-04  3.34e-03
##      5   21 -7.008e+02  1.66e-05  1.67e-05  1.7e-02  1.9e+00  3.3e-03  3.16e-03
##      6   23 -7.008e+02  4.21e-06  4.21e-06  3.4e-03  2.0e+00  6.5e-04  2.15e-03
##      7   25 -7.009e+02  9.17e-06  9.18e-06  6.8e-03  2.0e+00  1.3e-03  2.14e-03
##      8   27 -7.009e+02  1.95e-06  1.95e-06  1.4e-03  2.0e+00  2.6e-04  2.32e-03
##      9   29 -7.009e+02  3.90e-06  3.91e-06  2.7e-03  2.0e+00  5.2e-04  2.30e-03
##     10   31 -7.009e+02  7.84e-06  7.84e-06  5.4e-03  2.0e+00  1.0e-03  2.30e-03
##     11   33 -7.009e+02  1.60e-06  1.60e-06  1.1e-03  2.0e+00  2.1e-04  2.24e-03
##     12   36 -7.009e+02  4.78e-08  4.76e-08  2.1e-05  2.0e+00  4.2e-06  2.24e-03
##     13   38 -7.009e+02  7.84e-08  7.84e-08  4.2e-05  2.0e+00  8.4e-06  2.24e-03
##     14   40 -7.009e+02  2.88e-08  2.87e-08  7.6e-06  2.0e+00  1.7e-06  2.24e-03
##     15   41 -7.009e+02  3.92e-08  3.92e-08  1.5e-05  2.0e+00  3.3e-06  2.24e-03
##     16   43 -7.009e+02  6.78e-08  6.78e-08  3.4e-05  2.0e+00  6.7e-06  2.24e-03
##     17   46 -7.009e+02  3.66e-09  3.66e-09  6.1e-07  1.0e+01  1.3e-07  2.24e-03
##     18   48 -7.009e+02  6.79e-09  6.79e-09  1.3e-06  4.1e+00  2.7e-07  2.24e-03
##     19   50 -7.009e+02  1.36e-08  1.36e-08  2.8e-06  1.8e+03  5.3e-07  2.24e-03
##     20   53 -7.009e+02  2.72e-10  2.72e-10  5.6e-08  2.8e+05  1.1e-08  2.24e-03
##     21   55 -7.009e+02  5.43e-10  5.43e-10  1.1e-07  3.7e+04  2.1e-08  2.24e-03
##     22   57 -7.009e+02  1.09e-10  1.09e-10  2.2e-08  8.9e+05  4.3e-09  2.24e-03
##     23   59 -7.009e+02  2.17e-10  2.17e-10  4.5e-08  1.1e+05  8.6e-09  2.24e-03
##     24   61 -7.009e+02  4.35e-10  4.35e-10  9.0e-08  6.1e+04  1.7e-08  2.24e-03
##     25   63 -7.009e+02  8.69e-11  8.69e-11  1.8e-08  1.4e+06  3.4e-09  2.24e-03
##     26   65 -7.009e+02  1.74e-11  1.74e-11  3.6e-09  7.2e+06  6.8e-10  2.24e-03
##     27   67 -7.009e+02  3.48e-11  3.48e-11  7.2e-09  9.0e+05  1.4e-09  2.24e-03
##     28   69 -7.009e+02  6.96e-12  6.95e-12  1.4e-09  1.8e+07  2.7e-10  2.24e-03
##     29   71 -7.009e+02  1.39e-12  1.39e-12  2.9e-10  9.1e+07  5.5e-11  2.24e-03
##     30   73 -7.009e+02  2.78e-12  2.78e-12  5.7e-10  1.1e+07  1.1e-10  2.24e-03
##     31   75 -7.009e+02  5.56e-13  5.56e-13  1.1e-10  2.3e+08  2.2e-11  2.24e-03
##     32   77 -7.009e+02  1.11e-13  1.11e-13  2.3e-11  1.1e+09  4.4e-12  2.24e-03
##     33   79 -7.009e+02  2.23e-13  2.23e-13  4.6e-11  1.4e+08  8.8e-12  2.24e-03
##     34   82 -7.009e+02  2.60e-15  4.45e-15  9.2e-13  2.9e+10  1.8e-13  2.24e-03
##     35   84 -7.009e+02  9.73e-15  8.90e-15  1.8e-12  3.6e+09  3.5e-13  2.23e-03
##     36   86 -7.009e+02  1.78e-15  1.78e-15  3.7e-13  7.1e+10  7.0e-14  2.24e-03
##     37   88 -7.009e+02  4.87e-16  3.56e-16  7.3e-14  3.6e+11  1.4e-14  2.23e-03
##     38   90 -7.009e+02  3.24e-16  7.12e-17  1.5e-14  1.8e+12  2.8e-15  2.23e-03
##     39   92 -7.009e+02  4.87e-16  1.42e-16  2.9e-14  2.3e+11  5.6e-15  2.26e-03
##     40   94 -7.009e+02 -4.87e-16  9.08e-17  1.9e-14  1.4e+12  3.6e-15  2.24e-03
## 
##  ***** FALSE CONVERGENCE *****
## 
##  FUNCTION    -7.008635e+02   RELDX        1.871e-14
##  FUNC. EVALS      94         GRAD. EVALS      40
##  PRELDF       9.076e-17      NPRELDF      2.241e-03
## 
##      I      FINAL X(I)        D(I)          G(I)
## 
##      1    1.222725e-03     1.000e+00    -1.037e-01
##      2    9.494946e-02     1.000e+00    -1.772e+01
##      3    1.825897e-15     1.000e+00     1.798e+00
summary(GARCH11)
## 
## Call:
## garch(x = na.omit(GARCH_BBQ), order = c(1, 1))
## 
## Model:
## GARCH(1,1)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -5.54778 -0.52214 -0.06725  0.39997  4.36580 
## 
## Coefficient(s):
##     Estimate  Std. Error  t value Pr(>|t|)
## a0 1.223e-03   8.081e-04    1.513    0.130
## a1 9.495e-02   6.669e-02    1.424    0.155
## b1 1.826e-15   6.373e-01    0.000    1.000
## 
## Diagnostic Tests:
##  Jarque Bera Test
## 
## data:  Residuals
## X-squared = 235.97, df = 2, p-value < 2.2e-16
## 
## 
##  Box-Ljung test
## 
## data:  Squared.Residuals
## X-squared = 0.2709, df = 1, p-value = 0.6027