Séries Financeiras - Lista 3
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.