Séries Financeiras - Lista 3

stockData <- new.env()
startDate = as.Date("2010-02-27") 
endDate = as.Date("2019-02-27")
ativos<-c("DV.V")
getSymbols(ativos, src="yahoo",from=startDate,to=endDate)
## [1] "DV.V"
DOLLY=DV.V$DV.V.Close
retorno=diff(log(DOLLY))
retorno=(na.omit(retorno))
n=length(retorno)

1 Estacionaridade

1.1 Graficamente

1.1.1 Visualização

plot(retorno,main="DOLLY")

1.1.2 Conclusão

Verifica-se graficamente que os retornos são estacionários ao redor de zero, indo ao encontro dos fatos estilizados apresentados.

1.2 Augmented Dickey Fuller

1.2.1 Formalização

Defina a seguinte regressão

\(\Delta y_t = \beta_1 + \beta_2 + \delta y_{t-1} + \sum_{i=1}^{m}\alpha_i \Delta y_t + \epsilon_t\)

Onde:

\(\beta_1\) = Intercepto

\(\beta_2\) = Coeficiente de tendência

\(\delta\) = Coeficiente de presença de raíz unitária

\(m\) = Número de desafagens tomadas na série

\(\epsilon_t\) = Erro assumido normalmente distribuído

As hipóteses são dadas por

\(H_0: \delta = 0\)

\(H_1: \delta \neq 0\)

E a estatístisca de teste sendo

\(T = \cfrac{\hat{\delta}}{EP(\hat{\delta})}\)

A distribuição sob hipótese nula verdadeira não é conhecida, no entanto, Dickey e Fuller tabelaram valores para T, baseado na simulação de Monte Carlo.

adf.test(retorno)
## Warning in adf.test(retorno): p-value smaller than printed p-value
## 
##  Augmented Dickey-Fuller Test
## 
## data:  retorno
## Dickey-Fuller = -12.469, Lag order = 12, p-value = 0.01
## alternative hypothesis: stationary

Rejeita a hipótese da presença de raiz unitária, ao nível de 0.01, de acordo com o critério do p valor. Conclui-se que não há evidências contra a estacionariedade do processo apresentado.

2 Efeito da curtose

2.1 Numericamente

r=retorno
options(digits=4)
r.describe    <- describe(r)
r.describe[,12]
## [1] 4.943

Verifica-se um exceso de curtose de aproximadamente 5, o que é coerente com os fatos estilizados.

2.2 Graficamente

plot(density(retorno),main="Densidade do retorno")

A alta concentração de dados próximo de zero caracteriza a densidade dos retornos como leptocúrtica.

3 Normalidade

3.1 Jarque Bera

O teste de jarque-bera avalia o quão bem um conjunto de dados se ajusta a assimetria e curtose de uma distribuição normal, a estatística é definida por.

\(JB = \cfrac{n-k-1}{6}(S^2 + \cfrac{1}{4}(C-3)^2)\)

Sendo n a quantidade de observações, k a quantidade de variáveis regressores (se necessário), s a assimetria estimada e c a curtose estimada. Assintoticamente, a estatística de teste, sob hipótese nula verdadeira, tem distribuição chi-quadrado com dois graus de liberdade.

As hipóteses podem ser definidas como

\(H_1:\) A amostra vem de uma população normal

\(H_0:\) A amostra não vem de uma população normal

jarque.bera.test(retorno)
## 
##  Jarque Bera Test
## 
## data:  retorno
## X-squared = 1800, df = 2, p-value <2e-16

Verifica-se, pelo p-valor, que há evidências o suficiente para rejeitar a hipótese de normalidade do retorno, o que é esperado dos fatos estilizados.

3.2 Shapiro-Wilk

O teste de Shapiro Wilk utiliza a seguinte estatística de teste:

\(W = \cfrac{(\sum_{i=1}^{n}a_ix_{(i)})^2}{\sum_{i=1}^{n}(x_i-\bar{x})^2}\)

Onde

\(\bar{x}\) = média amostral

\(x_{(i)}\) = i-ésima estatística de ordem

\((a_1,...,a_n)=\cfrac{m^tV^{-1}}{C}\)

\(C=||V^{-1}m||\)

m são os valores esperados são variáveis aleatórias da amostra e V é a matriz de variância e covariância da amostra.

As hipóteses podem ser definidas como

\(H_1:\) A amostra vem de uma população normal

\(H_0:\) A amostra não vem de uma população normal

shapiroTest(retorno)
## Warning in if (class(x) == "fREG") x = residuals(x): a condição tem
## comprimento > 1 e somente o primeiro elemento será usado
## 
## Title:
##  Shapiro - Wilk Normality Test
## 
## Test Results:
##   STATISTIC:
##     W: 0.8982
##   P VALUE:
##     < 2.2e-16 
## 
## Description:
##  Mon Apr 22 14:54:32 2019 by user: rafael.fernandez

Mais uma vez, como é esperado, a hipótese nula é rejeitada.

3.3 Anderson Darling

O teste de Anderson Darling pertence a classe de testes de distribuições empíricas, isto é, irá comparar uma distribuição hipotética cumulativa \(F\) (normal) com uma distribuição empírica \(F_n\) (amostral)

A estatística de teste pode ser definida como:

\(A^2 = -n - S\)

\(S = \sum_{i=1}^{n}\cfrac{2i-1}{n}[ln(F(Y_i)) + ln(1-F(Y_{n+1-i}))]\)

E as hipóteses podem ser definidas como

\(H_1:\) A amostra vem de uma população normal

\(H_0:\) A amostra não vem de uma população normal

ad.test(retorno)
## Warning in ad.test(retorno): Métodos incompatíveis ("Ops.xts", "Ops.zoo")
## para "+"
## 
##  Anderson-Darling normality test
## 
## data:  retorno
## A = 1700, p-value <2e-16

Como já era esperado, de acordo com os fatos estilizados, mais uma vez, rejeita-se a hipótese nula.

3.4 D’agostino

O teste D’agostina é similar ao teste Jarque Bera, no entanto, aqui a assimetria e a curtose são avaliadas separadamente, de uma maneira inicial. Por fim, existe uma estatística conjunta de ambas as iniciais, chamada de estatística Omnibus.

A estatística de teste para a assimetria

\(z_1(g_1) = \delta asinh(\cfrac{g_1}{\alpha\sqrt{\mu_2}})\)

\(g_1\) = assimetria amostral

\(W^2 = \sqrt{2\gamma_2+4}-1\)

\(\delta = \cfrac{1}{\sqrt{lnW}}\)

\(\alpha^2=\cfrac{2}{(W^2-1)}\)

A estatística de teste para a curtose é

\(A = 6 + \cfrac{8}{\gamma_1}(\cfrac{2}{\gamma_1} + \sqrt{1+\cfrac{4}{\gamma_1^2}})\)

Por fim, a estatística omnibus pode ser definida como:

\(K^2 = Z(g_1)^2 + Z(g_2)^2\)

E as hipóteses são definidas a seguir:

Para a assimetria:

\(H_1:\) A amostra vem de uma distribuição simétrica

\(H_0:\) A amostra não vem de uma distribuição simétrica

Para a curtose:

\(H_1:\) A amostra vem de uma distribuição com curtose igual a 3

\(H_0:\) A amostra não vem de uma distribuição com curtose igual a 3

Para a distância da normalidade:

\(H_1:\) A amostra vem de uma população normal

\(H_0:\) A amostra não vem de uma população normal

dagoTest(retorno)
## Warning in if (class(x) == "fREG") x = residuals(x): a condição tem
## comprimento > 1 e somente o primeiro elemento será usado
## 
## Title:
##  D'Agostino Normality Test
## 
## Test Results:
##   STATISTIC:
##     Chi2 | Omnibus: 200.0276
##     Z3  | Skewness: -0.6819
##     Z4  | Kurtosis: 14.1267
##   P VALUE:
##     Omnibus  Test: < 2.2e-16 
##     Skewness Test: 0.4953 
##     Kurtosis Test: < 2.2e-16 
## 
## Description:
##  Mon Apr 22 14:54:32 2019 by user: rafael.fernandez

Verifica-se pelo teste que apenas não rejeita-se a hipótese de simetria dos dados. Já os demais, como é esperado e foram vistos amostralmente, foram rejeitados.

4 Simetria

4.1 Numericamente

r.describe[,11]
## [1] -0.03958

Verifica-se que a assimetria é próxima de zero, o resultado está de acordo com o teste D’agostino.

4.2 Graficamente

hist(retorno,breaks = 20)

Graficamente, não há sinais bruscos de assimetria.

5 Autocorrelação do retorno

5.1 Visualmente

acf(retorno)

Verifica-se autocorrelação forte nos lags iniciais

5.2 Formalização

Para verificar a presença de autocorrelação na série dos retornos, será utilizado o teste de Box Pierce, com as seguintes hipóteses:

\(H_0: \rho_1 = \rho_2 = ... = \rho_n =0\)

\(H_0: \rho_i \neq 0\)

Com a seguinte estatística de teste:

\(Q_{BP} = n\sum_{k=1}^{h}\cfrac{\hat{\rho_{k}^{2}}}{n-k}\)

Tem-se que, sob a hipótese nula, a estatística de teste tem assintoticamente uma distribuição qui quadrado com h graus de liberdade. Sendo h o número de lags testados.

Box.test(retorno,type="Box-Pierce")
## 
##  Box-Pierce test
## 
## data:  retorno
## X-squared = 100, df = 1, p-value <2e-16
LBQPlot(retorno)

Verifica-se que, de fato, não há evidências de que os retornos sejam ruído branco.

6 Autocorrelação do retorno ao quadrado

6.1 Visualmente

Segue a mesma formalização para o teste feito anteriormente

acf(retorno^2)

Visualmente, verifica-se uma correlação ainda mais forte que a anterior.

6.2 Formalização

Segue a mesma formalização para o teste feito anteriormente

Box.test(retorno^2,type="Box-Pierce")
## 
##  Box-Pierce test
## 
## data:  retorno^2
## X-squared = 110, df = 1, p-value <2e-16
LBQPlot(retorno^2)

Como é desejado, rejeita-se a hipótese nula de ruído branco para os retornos ao quadrado, indício de uma estrutura de relação não linear. Podemos então iniciar um processo de modelagem GARCH. No entanto, precisamos realizar uma filtragem, visto que não obtivemos um processo de ruído branco para os retornos.

7 Filtragem

7.1 Verificação inicial

par(mfrow=c(2,1))
acf(retorno)
pacf(retorno)

Verifica-se um corte brusco na FAC e uma função contínua na FACP, indicando um MA de ordem 1.

7.2 Ajustando MA

retornoma=arma(retorno, order = c(0,1))
summary(retornoma)
## 
## Call:
## arma(x = retorno, order = c(0, 1))
## 
## Model:
## ARMA(0,1)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.45722 -0.02947  0.00147  0.02767  0.34791 
## 
## Coefficient(s):
##            Estimate  Std. Error  t value Pr(>|t|)    
## ma1        -0.27552     0.02408    -11.4   <2e-16 ***
## intercept  -0.00133     0.00121     -1.1     0.27    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Fit:
## sigma^2 estimated as 0.00491,  Conditional Sum-of-Squares = 8.66,  AIC = -4367

8 Análise dos resíduos

8.1 Retorno filtrado

acf(na.omit(retornoma$residuals))

Box.test(na.omit(retornoma$residuals))
## 
##  Box-Pierce test
## 
## data:  na.omit(retornoma$residuals)
## X-squared = 0.17, df = 1, p-value = 0.7

Ruído branco, como desejado

8.2 Retorno filtrado ao quadrado

acf((na.omit(retornoma$residuals)^2)) 

Box.test((na.omit(retornoma$residuals)^2))
## 
##  Box-Pierce test
## 
## data:  (na.omit(retornoma$residuals)^2)
## X-squared = 50, df = 1, p-value = 2e-12

Não é ruído branco, como desejado. Iremos modelar este retorno filtrado.

9 Modelo Garch

9.1 Escolha do melhor modelo

summary(garchFit(~garch(1,0),r,cond.dist = "norm" ))
summary(garchFit(~garch(1,0),r,cond.dist = "snorm" ))
summary(garchFit(~garch(1,0),r,cond.dist = "std" ))
summary(garchFit(~garch(1,0),r,cond.dist = "sstd" ))

summary(garchFit(~garch(2,0),r,cond.dist = "norm" ))
summary(garchFit(~garch(2,0),r,cond.dist = "snorm" ))
summary(garchFit(~garch(2,0),r,cond.dist = "std" ))
summary(garchFit(~garch(2,0),r,cond.dist = "sstd" ))

summary(garchFit(~garch(3,0),r,cond.dist = "norm" ))
summary(garchFit(~garch(3,0),r,cond.dist = "snorm" ))
summary(garchFit(~garch(3,0),r,cond.dist = "std" ))
summary(garchFit(~garch(3,0),r,cond.dist = "sstd" ))

summary(garchFit(~garch(4,0),r,cond.dist = "norm" ))
summary(garchFit(~garch(4,0),r,cond.dist = "snorm" ))
summary(garchFit(~garch(4,0),r,cond.dist = "std" ))
## Warning in sqrt(diag(fit$cvar)): NaNs produzidos
summary(garchFit(~garch(4,0),r,cond.dist = "sstd" ))
## Warning in sqrt(diag(fit$cvar)): NaNs produzidos
arch1 = garchFit(~garch(1,0),r)
Modelo Distribuição condicional Significância Normalidade Autocorrelação \(R\) Autocorrelação \(R^2\)
\(arch(1)\) Normal Sim Não Sim Não
\(arch(1)\) Normal assimétrica Sim Não Sim Sim
\(arch(1)\) t Sim Não Sim Sim
\(arch(1)\) t assimétrica Sim Não Sim Sim
\(arch(2)\) Normal Sim Não Sim Sim
\(arch(2)\) Normal assimétrica Sim Não Sim Sim
\(arch(2)\) t Sim Não Sim Sim
\(arch(2)\) t assimétrica Sim Não Sim Sim
\(arch(3)\) Normal Sim Não Sim Sim
\(arch(3)\) Normal assimétrica Sim Não Sim Sim
\(arch(3)\) t Sim Não Sim Sim
\(arch(3)\) t assimétrica Sim Não Sim Sim
\(arch(4)\) Normal Não Não Sim Sim
\(arch(4)\) Normal assimétrica Não Não Sim Sim
\(arch(4)\) t Não Não Sim Sim
\(arch(4)\) t assimétrica Não Não Sim Sim

Todos os modelos garch e arch com parâmetro igual ou superior a 4 não obtiveram todos os padarâmetros significativos. Portanto, a busca se resgrintirá a classe de modelos arch com 3 parâmetros ou menos, pautadas nas caterísticas tabeladas acima.

Verifica-se que nenhum modelo é, no geral, desejável em todas as categoria. Todavia, o \(arch(1)\) é o único que alcança retornos não correlacionados, sendo este, portanto, o modelo optado.

9.2 Modelo selecionado

arch = garch(r, order = c(0,1))
## 
##  ***** ESTIMATION WITH ANALYTICAL GRADIENT ***** 
## 
## 
##      I     INITIAL X(I)        D(I)
## 
##      1     4.994654e-03     1.000e+00
##      2     5.000000e-02     1.000e+00
## 
##     IT   NF      F         RELDF    PRELDF    RELDX   STPPAR   D*STEP   NPRELDF
##      0    1 -3.780e+03
##      1    6 -3.781e+03  3.22e-04  5.35e-04  2.3e-03  3.8e+07  2.3e-04  1.03e+04
##      2    7 -3.781e+03  2.86e-05  3.00e-05  2.2e-03  2.0e+00  2.3e-04  1.45e+01
##      3   11 -3.788e+03  1.80e-03  2.55e-03  2.3e-01  2.0e+00  2.9e-02  1.42e+01
##      4   13 -3.789e+03  2.70e-04  3.97e-04  7.2e-02  6.9e-01  1.2e-02  5.65e-04
##      5   14 -3.791e+03  4.13e-04  6.31e-04  6.3e-02  1.7e+00  1.2e-02  2.91e-03
##      6   16 -3.792e+03  2.73e-04  3.47e-04  1.1e-01  4.2e-01  2.6e-02  3.86e-04
##      7   17 -3.792e+03  1.33e-05  1.10e-05  1.6e-02  0.0e+00  4.2e-03  1.10e-05
##      8   18 -3.792e+03  8.05e-07  7.69e-07  6.0e-03  0.0e+00  1.6e-03  7.69e-07
##      9   19 -3.792e+03  2.68e-09  2.61e-09  3.9e-04  0.0e+00  1.1e-04  2.61e-09
##     10   20 -3.792e+03  2.93e-12  2.87e-12  9.8e-06  0.0e+00  2.7e-06  2.87e-12
## 
##  ***** RELATIVE FUNCTION CONVERGENCE *****
## 
##  FUNCTION    -3.791699e+03   RELDX        9.771e-06
##  FUNC. EVALS      20         GRAD. EVALS      11
##  PRELDF       2.867e-12      NPRELDF      2.867e-12
## 
##      I      FINAL X(I)        D(I)          G(I)
## 
##      1    4.437651e-03     1.000e+00     3.153e-02
##      2    1.359318e-01     1.000e+00     6.060e-05
summary(arch)
## 
## Call:
## garch(x = r, order = c(0, 1))
## 
## Model:
## GARCH(0,1)
## 
## Residuals:
##    Min     1Q Median     3Q    Max 
## -6.898 -0.423  0.000  0.297  4.921 
## 
## Coefficient(s):
##     Estimate  Std. Error  t value Pr(>|t|)    
## a0  0.004438    0.000084    52.82  < 2e-16 ***
## a1  0.135932    0.021044     6.46  1.1e-10 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Diagnostic Tests:
##  Jarque Bera Test
## 
## data:  Residuals
## X-squared = 1900, df = 2, p-value <2e-16
## 
## 
##  Box-Ljung test
## 
## data:  Squared.Residuals
## X-squared = 0.39, df = 1, p-value = 0.5

10 Ruído do ARCH(1)

res=na.omit(residuals(arch))
res2=res^2

par(mfrow=c(2,1))
Acf(res)
Acf(res2)

Box.test(res)
## 
##  Box-Pierce test
## 
## data:  res
## X-squared = 67, df = 1, p-value = 3e-16
Box.test(res2)
## 
##  Box-Pierce test
## 
## data:  res2
## X-squared = 0.39, df = 1, p-value = 0.5
par(mfrow=c(1,1))
plot(res)

Embora sejam modelos significativos, os ruídos apresentam estruturas de correlação, o que, em outras palavras, indicam que a modelagem não foi efetiva. Até o momento, nenhum modelo Garch adequou-se bem as estruturas dos dados.

11 Equação

\[\begin{equation} \sigma_{t}^{2} = 0.004438 + 0.135932\times \epsilon_{t}^{2} \\ \epsilon_{t} \sim N(0;0,021^2) \end{equation}\]

12 Volatidade estimada

Rafael Cabral Fernandez

2019-04-22