Tag

arch Archives - Análise Macro

Aplicações de modelos de volatilidade no R

By | mercado financeiro

Modelos de Volatilidade foram criados na década de 1980 com o objetivo de refinar o tratamento do risco e da incerteza em um modelo empírico, algo que os modelos de precificação até então tinham dificuldades em lidar. Modelos do tipo ARCH e GARCH fundamentam-se na variância condicional, levando em consideração os eventos extremos das séries financeiras. No post de hoje, iremos demonstrar as aplicação de modelos do tipo GARCH (1.1) no mundo real.

Antes de começarmos com a aplicação e o código, devemos fazer aqui rapidamente algumas considerações sobre os modelos. Para introduzir melhor sobre o assunto, temos um post aqui na Análise Macro explicando os modelos ARCH e GARCH , bem como possuímos o curso de Econometria Financeira usando o R, que ajuda a entender melhor sobre modelagem de séries financeiras.

Consideramos que a previsão média dos retornos dado a informação disponível no tempo  $t_1$ de uma série é calculada como:

     $$\mu_t = E[R_t | I_{t-1}]$$

Com os erros da previsão sendo

     $$e_t= R_t - \mu_t$$

Com base nas informações no tempo $t-1$, também é possível calcular a variância:

     $$\sigma^2 = E[(R_t - \mu_t)^2 | I_{t-1}]$$

     $$ = E[e^2_t |I_{t_1}]$$

Ao realizar a estimação da previsão média dos retornos, podemos realizá-la tanto através de média móvel dos retornos, calculada a partir de:

     $$\mu_t = \frac{1}{M}\sum_{i = 1}^M R_{t-1}$$

quanto a partir de um processo ARMA.

O que nos permitirá ter os modelos:

ARCH:

     $$\sigma^2_t = \omega + \sum_{i=1}^p \alpha_ie^2_{t-i}$$

GARCH(1,1)

     $$\sigma^2_t = \omega + \sum_{i=1}^p \alpha_ie^2_{t-i} + \sum_{i=1}^p\beta\sigma^2_{t-1}$$

Estimar a volatilidade do Ibovespa

Podemos aplicar o modelo GARCH(1,1) no índice bovespa, de forma a comparar os diferentes períodos de volatilidade da série. Antes da modelagem, porém, realizamos uma análise de dados dos retornos do índice bovespa. No código abaixo, importamos os pacotes e a série da Ibovespa, transformando os seus preços de fechamentos ajustados em log retornos.


Com os retornos em mãos, realizamos uma análise para ajudar a entender melhor a questão da heterocedasticidade condicional. O gráfico de Q-Q permite avaliar a distribuição empíricas dos quantiles e relação a distribuição teórica, sendo assim, é útil para saber se a distribuição dos retornos segue como normal. Como é interessante de ver, apesar da forma retilínea da distribuição, há valores discrepantes, que chamamos de eventos extremos, o que causa problemas na nossa série. Significa que há momentos dos quais o valores se tornam eventos extremos, afetando a variância (volatilidade) em determinados períodos.

Um forma interessante de visualizar esses momentos de heterocedasticidade condicional, é visualizando a série do retorno, bem como seu gráfico de autocorrelação, e comparar com os erros ao quadrado (como na equação acima, demonstrando ser a variância da série).


Vemos que há momentos que realmente houveram variações significativas, principalmente em períodos de crises, e que os valores dos erros ao quadrado mostram através do gráfico de autocorrelação, que elas não são independentes no tempo, ou seja, podemos modelar a variância através de seus valores passados.

Abaixo, criamos um gráfico mais sofisticado do desvio padrão anualizado móvel em períodos de 22 dias, de forma a comparar com os erros ao quadrado.

Por fim, é possível melhorar ainda mais a estimação da volatilidade, utilizando o modelo GARCH (1,1) para obter a estimação da variância e da média condicional utilizando o pacote {ugarch}.

O primeiro passo é a especificação o modelo com ugarchspec. Dentre as especificações, escolhemos que o valor previsto do retorno será estimado pela média amostral (armaOrder = c(0,0), lembrando que é possível utilizar modelos ARMA nesse caso). O modelo da variância será o "standard GARCH", e a distribuição será normal.

O segundo passo é calcular as estimativas com base na função ugarchfit, utilizando a especificação que criamos.

O terceiro passo, opcional, é realizar a previsão nos períodos futuros com a função ugarchforecast.



Aplicação da volatilidade: Teorema da separação de Tobin

Podemos utilizar como exemplo o teorema da separação de Tobin (1958), que a grosso modo, estabelece a carteira eficiente de ativos arriscados, e também determina a fração (peso) ótima para investir na carteira de ativos arriscado e no ativo livre de risco.

Se um portfolio investe a porcentagem $w$ em um ativo de risco (com volatilidade   $\sigma_t$ ) e mantêm  $1 - w$  no ativo livre de risco, obtemos uma volatilidade igual a:

     $$\sigma_p = w\sigma_t$$

Como definimos  $w$ ? É possível através do volatility targeting. O valor de  $w$ será aquele que o valor previsto da volatilidade anualizada será igual ao valor do target, sendo então 5%, por exemplo:

     $$w* = 0,05/\sigma_t$$



O gráfico demonstra a relação do portfolio e da variância, vemos que quanto maior o nível de volatilidade em certo períodos, menor será a fração no portfolio de ativos de risco.

Referências

James Tobin. Liquidity preference as behavior towards risk. Review of Economic Studies, XXV(2):65–86, February 1958.

Volatilidade e modelos ARCH e GARCH

By | mercado financeiro

A volatilidade é uma forma de avaliação para ativos e séries financeiras mais importante do mundo das finanças. Esse indicador permite que seja avaliado o risco de um ativo, e com base na sua análise se tome a melhor decisão possível na alocação dos investimentos. Entretanto, a volatilidade possui diversas características que devem ser avaliadas de forma detalhada, não somente de forma descritiva, mas também para a construção de modelos. No post de hoje, iremos introduzir as características da volatilidade de séries financeiras e os modelo ARCH e GARCH.

Volatilidade

Modelos econométricos (os mais conhecidos) de séries univariadas, visam estimar o retorno esperado de uma série financeira, se preocupando apenas com o primeiro momento condicional da série. Na vida real, esse fato pode não ocorrer, afinal, ao estar consciente da queda passada de um ativo, ocorre um viés no investidor, o fazendo criar uma expectativa negativa futura sobre o ativo, afetando os seus valores futuros.

Outro ponto importante é que a volatilidade é não observável diretamente, ou seja, é necessário obter uma forma de estimá-la através de seus preços. Mas, mesmo que tenhamos isso em mente, devemos conhecer mais algumas caraterísticas importantes sobre a volatilidade para não incorrermos em erros nas avaliações e na montagem de modelos.

  • A volatilidade é alta em certos períodos e baixa em outros, configurando o que a literatura
    chama de volatility cluster;
  • A volatilidade evolui de maneira contínua, de modo que saltos não são comuns;
  • A volatilidade costumar variar em um intervalo fixo (isso significa que a volatilidade é estacionária);
  • A volatilidade costuma reagir de forma diferente a um aumento muito grande nos preços e a um decréscimo igualmente muito grande, com o último representando maior impacto.

library(quantmod)
library(PerformanceAnalytics)
library(magrittr)
library(zoo)
library(fGarch)

De forma a compreendermos melhor as característica, iremos utilizar a série de preços ajustada da VALE3.

# Busca a série de preços da VALE3
getSymbols("VALE3.SA",
auto.assign = TRUE,
warnings = FALSE,
src = "yahoo")

# Retira o preço ajustado

vale_adj <- Ad(VALE3.SA)

# Gráfico do preço

plot(vale_adj)

Apesar de ser o ponto inicial, as características de um série de preço não é útil o suficiente para trabalharmos com a estimação da volatilidade, para isso, devemos realizar uma transformação para que a nossa série seja estabilizada e transformada em estacionária. A forma mais comum é realizar uma transformação em log, e depois retirar a primeira diferença da série, essa mudança é bem conhecida, sendo chamada de Retorno Contínuo.

Para o Retorno contínuo diário, temos, por suposto, algumas propriedades:

- O retorno médio é zero
- a variação do retorno muda ao longo do tempo
- com base nos retornos contínuos, calculamos uma medida de volatilidade (risco), com base no seu desvio padrão.

# Calculo os retornos contínuos

vale_ret <- diff(log(vale_adj)) %>%
na.omit()

# Gráfico do retorno contínuo diário

plot(vale_ret)

Vemos através do gráfico dos retornos diários que há períodos em que ocorre uma maior variação em relação a outros períodos.

Uma outra forma interessante de acompanhar essa variação ao longo do tempo é construindo um gráfico de volatilidade móvel mensal.

chart.RollingPerformance(R = vale_ret,
width = 22,
FUN = "sd.annualized",
scale = 252,
main = "Volatilidade móvel - 1 mês")

Com base nos gráficos, podemos entender que nossa série possui algumas características da volatilidade.

par(mfrow = c(1,2))

# Gráfico de auto correlação

acf_ret <- acf(vale_ret)

# Gráfico de auto correlação parcial

pacf_ret <- pacf(vale_ret)

Porém, para que possamos entender melhor a ideia de heterocedasticidade condicional, utilizamos o quadrado da série para que seja possível ver que elas não são independentes e que variancia é correlata.

par(mfrow = c(1,2))

# Gráfico de auto correlação dos retornos ao quadrado

acf_ret_ <- acf(vale_ret^2)

# Gráfico de auto correlação parcial do retornos ao quadrado

pacf_ret_ <- pacf(vale_ret^2)

Vemos a diferença as funções de autocorrelação, para confirmar esse ponto, realizamos um teste para confirmar.

Box.test(coredata(vale_ret^2), lag = 12, type = "Ljung")

Nós podemos rejeitar a hipótese nula de não autocorrelação nos retornos contínuo ao quadrado.

Construção do modelo

Com isso, entendemos que há existência de clusters de volatilidade e que os retornos próximos da série tendem a ter níveis de volatilidade semelhante, sendo assim, é necessário ter isso em mente na construção de modelos.

ARCH

O primeiro modelo que teve essa estrutura em sua base foi o ARCH (Autoregressive Conditional Heteroskedasticity), que pode ser definido na equação

(1)    \begin{align*} a_t = \sigma_t \varepsilon_t, \quad \sigma_t^2 = \alpha_0 + \alpha_1 \sigma_{t-1}^2 + ... + \alpha_m \sigma_{t-m}^2  \end{align*}

  onde  $\varepsilon_t $ é uma sequência de variáveis aleatórias independentes e identicamente distribuídas com média zero e variância igual 1,   $\alpha_0 > 0$ e $\alpha_i \geq 0$ para $i > 0$.

Um modelo ARCH(m) é aquele em que a variância no tempo t é condicional as observações passadas da série m vezes, utilizando o quadrado das observações passadas.

arch1 <- garchFit(~1+garch(1, 0), data = vale_ret, trace = F)

GARCH

Por outro lado, podemos pensar também em considerar não somente as observações passadas, como também as variâncias passadas, adicionando no modelo mais parâmetros. Esse modelo é conhecido como GARCH ( Generelized Autoregressive Conditional Heteroskedasticity), com a equação

(2)    \begin{align*} a_t = \sigma^t \varepsilon_t, \quad \sigma_t^2 = \alpha_0 + \sum_{i=1}^{m} \alpha_i a_{t-i}^2 + \sum_{j=1}^{s} \beta_j \sigma_{t-j}^2,  \end{align*} onde $\left \{ \varepsilon_t \right \}$

é também uma sequência de variáveis aleatórias iid com média zero e variância igual a 1,  $\alpha_0 > 0$, $\alpha_i \geq 0$, $\beta_j \geq 0$ e $\sum_{i=1}^{max(m,s)} (\alpha_i + \beta_i) < 1$. De modo a entender as propriedades do modelo GARCH, convém fazer algumas modificações. Tomemos  $\eta_t = a_t^{2} - \sigma_t^{2}$, assim $\sigma_t^{2} = a_t^2 - \eta_t$ . Iterando  $\sigma_{t-i}^2 = a_{t-i}^2 - \eta_{t-i}$ para $(i = 0,...,s)$ na equação, nós podemos reescrever o modelo GARCH como

(3)    \begin{align*} a_t^2 = \alpha_0 + \sum_{i=1}^{max(m,s)} (\alpha_i + \beta_i) a_{t-i}^2 + \eta_t + \sum_{j=1}^{s} \beta_j \eta_{t-j}.  \end{align*}

Assim, o modelo GARCH pode ser considerado uma aplicação da ideia dos modelos ARMA ao quadrado de  $a_t$ .

garch1 <- garchFit(~1+garch(1,1), data = vale_ret, trace = F)

Oferta Especial!

No próximo dia 17, das 9h às 19h da manhã, você terá a chance de participar do pré-lançamento do treinamento Análise de Dados Macroeconômicos e Financeiros no R. Para concorrer a uma das vagas com desconto, acesse o link e conheça os detalhes.

____________________

 

Receba diretamente em seu e-mail gratuitamente nossas promoções especiais
e conteúdos exclusivos sobre Análise de Dados!

Assinar Gratuitamente