Instalación de paquetes

Se define un conjunto de datos que contienen los nombres:“pdfetch”,“tseries”,“tidyverse”,“forecast”, que luego son installados y habilitados con sus funciones correspondientes.

## [[1]]
## [1] "pdfetch"   "stats"     "graphics"  "grDevices" "utils"     "datasets" 
## [7] "methods"   "base"     
## 
## [[2]]
## [1] "tseries"   "pdfetch"   "stats"     "graphics"  "grDevices" "utils"    
## [7] "datasets"  "methods"   "base"     
## 
## [[3]]
##  [1] "forcats"   "stringr"   "dplyr"     "purrr"     "readr"     "tidyr"    
##  [7] "tibble"    "ggplot2"   "tidyverse" "tseries"   "pdfetch"   "stats"    
## [13] "graphics"  "grDevices" "utils"     "datasets"  "methods"   "base"     
## 
## [[4]]
##  [1] "forecast"  "forcats"   "stringr"   "dplyr"     "purrr"     "readr"    
##  [7] "tidyr"     "tibble"    "ggplot2"   "tidyverse" "tseries"   "pdfetch"  
## [13] "stats"     "graphics"  "grDevices" "utils"     "datasets"  "methods"  
## [19] "base"

1. Carga de base de datos con fecha de inicio ’2019-01-01’ y fecha de fin ’2020-01-01’

Es importa datos de yahoo finance mediante pdfetch_YAHOO (el pdftech previamente instalado) de la empresa Energy Services Holdings (KLXE) desde el 01/01/2019 hasta el 01/01/2020, para ello definicermos nuestra base de datos como KLXEdata, posteriormente vamos a crear la serie de tiempo con la data importada con la funcion TS para la columna KLXE.close de nuestra base de datos desde el 01/2019, esto para su postior analisis.

KLXEdata <- pdfetch_YAHOO("KLXE",from = as.Date("2019-01-01"),to = as.Date("2020-01-01"), interval = '1d')  #DATOS DE Energy Services Holdings
tsKLXE <- ts(KLXEdata$`KLXE.close`,start = c(2019,1),frequency=356.25)

2. Calculo de retornos dicretos y continuos

Para el calculo de retornos discretos y continuos se ejecuta las diferencias mendiante la funcion “diff” a la serite de tiempo creada con anterioridad tsKLXE, para el retorno continuo se utiliza la funcion de logaritmos “log”. Graficamos mediante el comando “plot” a la serie discreta y logaritmica.

d_KLXE <- diff(tsKLXE)/tsKLXE[-length(tsKLXE)]
plot(d_KLXE)

l_KLXE<-diff(log(tsKLXE))
plot(l_KLXE)

3. Analisis de la media, varianza y desviacion estandar.

Las funciones para el calculo de media, varianza y desviacion estandar utilizadas son mean, var, sd; los resultados obtenidos son -0.005315146, 0.002492259,0.04992253, respectivamente. Graficamos un histograma de la serite de tiempo continua analizada.

De lo obtenido podemos ver que no existe una distribucion normal visual, su varianza es menor y desviacion estanda tiene un comportamiento mas volatil que la varianza.

#Media
mu<-mean(l_KLXE)
mu
## [1] -0.005315146
#Varianza
s2<-var(l_KLXE)
s2
##             KLXE.close
## KLXE.close 0.002492259
#Desviacion Estandar
s<-sd(l_KLXE)
s
## [1] 0.04992253
hist(l_KLXE)

4. Analisis descriptivo de grafico de distribucion normal de retornos continuos.

Para realizar el analisis decriptivo creamos un histograma de los retornos continuos y mediante la funcion de lineas “lines” veremos el comportamiento de su densidad,luego de ellos haremos una curva normal para su comparacion.

La distribucion de los retornos continuos de la serie muestra un comportamiento normal visualmente, lo que en primero momento nos arrojaria que sus resultados cercanos a la normalidad de la serie.

x<-seq(-0.1,0.1,by=0.01)
hist(
     l_KLXE,prob=TRUE,ylim=c(0,20),xlim = c(-0.1,0.1),breaks = 50,col = "blue",
     main = c("Histograma de los retornos"),
     xlab = expression(r==ln(P[t]/P[t-1])),
     ylab=c("Densidad"),
    )
lines(density(l_KLXE),lwd=1.5,lty=2)
curve(dnorm(x,mean=mu,sd=s),lwd=2,lty=2,col="red",add = T)

5. Analisis de Test de Normalidad

Se realizaran los siguientes test de normalidad, Spahiro-Wilk ,Kolmogorov-Smirnov, y el test de curtosis Jarque-Bera.

Spahiro-Wilk, nos indica un pvalue menor al 0.05 de significancia, lo que indica que la serie no es normal.

Kolmogorov-Smirnov, nos muestra tambien un pvalue menos al nivel de significancia por lo que se se rechaza la hipotesis nula de normalidad.

Jarque-Bera, tiene un pvalue es menor al 0.05 para aceptar la hipotesis nula, de simetria, por lo que la serie es asimetrica y tampoco tiende a una normal.

shapiro.test(l_KLXE)
## 
##  Shapiro-Wilk normality test
## 
## data:  l_KLXE
## W = 0.87652, p-value = 0.0000000000002199
ks.test(l_KLXE,"pnorm", mean=mu, sd=s)
## Warning in ks.test(l_KLXE, "pnorm", mean = mu, sd = s): ties should not be
## present for the Kolmogorov-Smirnov test
## 
##  One-sample Kolmogorov-Smirnov test
## 
## data:  l_KLXE
## D = 0.10275, p-value = 0.009983
## alternative hypothesis: two-sided
jarque.bera.test(l_KLXE)
## 
##  Jarque Bera Test
## 
## data:  l_KLXE
## X-squared = 990.16, df = 2, p-value < 0.00000000000000022

6. Calculo de Value at Risk

A - Calculo de VAR con un nivel de significancia de 0.01, 0.05 y 0.1 para una cartera de 100 000.

  • Para 0.01, la perdida minima seria de -12337.58
W<-100000

alpha <- 0.01
q1 <- quantile(x=l_KLXE, alpha)
mean(exp(q1)-1)
## [1] -0.1233758
VAR1 <- W*(exp(q1)-1)
VAR1
##        1% 
## -12337.58
  • Para 0.05, la perdida minima seria de -7060.856
W<-100000

alpha <- 0.05
q1 <- quantile(x=l_KLXE, alpha)
mean(exp(q1)-1)
## [1] -0.07060856
VAR1 <- W*(exp(q1)-1)
VAR1
##        5% 
## -7060.856
  • Para 0.1, la perdida minima seria de -5866.667
W<-100000

alpha <- 0.1
q1 <- quantile(x=l_KLXE, alpha)
mean(exp(q1)-1)
## [1] -0.05866667
VAR1 <- W*(exp(q1)-1)
VAR1
##       10% 
## -5866.667

B - Calculo de VAR asumiendo distribucion normal.

La perdida seria de -0.1214523 al 10%.

set.seed(1000)
VARp<-qnorm(0.01,mean = mu,sd = s,lower.tail = T);VARp
## [1] -0.1214523
#En términos discretos
exp(VARp)-1
## [1] -0.1143667
VARp
## [1] -0.1214523

C - VAR Montecarlo

Para desarrolar el VAR Montercarlo primero se ha establecido la cantidad de simulaciones, 10 000, posterimente se establece la normalidad de la serie discreta en terminos monetarios,

VAR.mc <- numeric()
for (i in 1:10000) {
  changes <- rnorm(length(l_KLXE),mean=1+mu,sd=s)
  sim.ts <- cumprod(c(as.numeric(tsKLXE[1]),changes))
  sim.R <- diff(log(sim.ts))
  sim.q <- quantile(sim.R,0.01,na.rm = T)
  sim.VAR <- exp(sim.q)-1
  VAR.mc[i] <- sim.VAR
}
VAR.mc[i]
## [1] -0.1284402
mean(VAR.mc)
## [1] -0.1175676
sd(VAR.mc)
## [1] 0.01057643
plot(density(VAR.mc))

quantile(VAR.mc,0.025)
##       2.5% 
## -0.1398959
quantile(VAR.mc,0.975)
##       97.5% 
## -0.09845262

7. Calculo de Modelo Garch

  • El modelo GARCH (1 ,1) nos muestra la volatilidad de nuestra serie posterior a la aplicacion de las diferencias de un modelo ARCH, estos modelos nos sirven para analizar la estacionaridad de nuestras series.

Los resultados nos dan que la suma de los coeficientes a0 0.00010425, a0 0.00010425 y b1 0.81961200 no son mayores que 1, lo que significa que nuestro proceso es estacionario y no es volatil.

El Box-Ljung test nos nuestra la independencia de la variables, al ser mayor a 0.05 signifca que las variables son independientes.

Retornos <- diff(log(tsKLXE))
Retornos <- na.omit(Retornos)
plot.ts(Retornos)

ts.garch <-garch(Retornos,c(1,1))
## 
##  ***** ESTIMATION WITH ANALYTICAL GRADIENT ***** 
## 
## 
##      I     INITIAL X(I)        D(I)
## 
##      1     2.243033e-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.316e+02
##      1    6 -6.320e+02  6.29e-04  8.39e-04  1.2e-03  3.9e+07  1.2e-04  1.63e+04
##      2    7 -6.321e+02  1.58e-04  1.93e-04  1.1e-03  2.0e+00  1.2e-04  7.38e+00
##      3    8 -6.321e+02  2.48e-05  2.56e-05  1.1e-03  2.0e+00  1.2e-04  7.27e+00
##      4   13 -6.356e+02  5.53e-03  9.00e-03  3.7e-01  2.0e+00  6.0e-02  7.19e+00
##      5   14 -6.366e+02  1.47e-03  1.70e-03  2.7e-01  2.0e+00  6.0e-02  1.73e-01
##      6   16 -6.379e+02  2.00e-03  3.06e-03  3.8e-01  1.9e+00  1.4e-01  1.07e-01
##      7   19 -6.498e+02  1.84e-02  5.68e-03  5.3e-01  0.0e+00  5.7e-01  5.69e-03
##      8   24 -6.514e+02  2.54e-03  3.08e-03  2.0e-05  8.9e+00  3.2e-05  1.39e-02
##      9   25 -6.516e+02  2.84e-04  8.60e-04  2.0e-05  2.0e+00  3.2e-05  8.87e-02
##     10   26 -6.518e+02  2.54e-04  3.28e-04  1.7e-05  2.0e+00  3.2e-05  2.02e-01
##     11   27 -6.518e+02  1.19e-05  1.18e-05  1.9e-05  2.0e+00  3.2e-05  1.80e-01
##     12   33 -6.524e+02  9.82e-04  1.92e-03  1.6e-02  2.0e+00  2.6e-02  1.75e-01
##     13   34 -6.526e+02  1.75e-04  1.03e-04  7.3e-03  0.0e+00  1.3e-02  1.03e-04
##     14   35 -6.526e+02  1.27e-04  1.57e-04  1.6e-02  0.0e+00  3.0e-02  1.57e-04
##     15   36 -6.526e+02  1.17e-05  1.43e-05  3.2e-03  0.0e+00  5.5e-03  1.43e-05
##     16   37 -6.526e+02  2.55e-07  3.39e-07  5.7e-04  0.0e+00  1.2e-03  3.39e-07
##     17   48 -6.526e+02 -8.71e-15  2.00e-15  1.4e-14  1.3e+06  2.3e-14  7.00e-09
## 
##  ***** FALSE CONVERGENCE *****
## 
##  FUNCTION    -6.526468e+02   RELDX        1.387e-14
##  FUNC. EVALS      48         GRAD. EVALS      17
##  PRELDF       2.002e-15      NPRELDF      7.005e-09
## 
##      I      FINAL X(I)        D(I)          G(I)
## 
##      1    1.042465e-04     1.000e+00     5.747e+01
##      2    1.542142e-01     1.000e+00     4.588e-02
##      3    8.196120e-01     1.000e+00     1.127e-02
summary(ts.garch)
## 
## Call:
## garch(x = Retornos, order = c(1, 1))
## 
## Model:
## GARCH(1,1)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -4.58749 -0.61118 -0.03322  0.42640  4.83511 
## 
## Coefficient(s):
##      Estimate  Std. Error  t value             Pr(>|t|)    
## a0 0.00010425  0.00002886    3.612             0.000304 ***
## a1 0.15421419  0.03319426    4.646           0.00000339 ***
## b1 0.81961200  0.03094469   26.486 < 0.0000000000000002 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Diagnostic Tests:
##  Jarque Bera Test
## 
## data:  Residuals
## X-squared = 195.72, df = 2, p-value < 0.00000000000000022
## 
## 
##  Box-Ljung test
## 
## data:  Squared.Residuals
## X-squared = 0.095572, df = 1, p-value = 0.7572