Engle e Manganelli (2004) sugerem quatro possíveis funções para a estimação do CAViaR:
- Adaptive: $VaR_{t}=VaR_{t-1}+\beta_{1}\left\{\left[1+\exp\left(G\left[y_{t-1}-VaR_{t-1}\right]\right)^{-1}\right]-\tau\right\}$.
- Symmetric absolute value: $VaR_{t}=\beta_{1}+\beta_{2}VaR_{t-1}+\beta_{3}|y_{t-1}|$.
- Asymmetric slope: $VaR_{t}=\beta_{1}+\beta_{2}VaR_{t-1}+\beta_{3}(y_{t-1})^{+}+\beta_{4}(y_{t-1})^{-}$.
- Indirect GARCH(1, 1): $VaR_{t}=\left(\beta_{1}+\beta_{2}VaR_{t-1}^{2}+\beta_{3}y_{t-1}^{2}\right)^{1/2}$
onde $y_{t}$ é o retorno do ativo no tempo $t$ com $t=1,\dots, T$. $G$ é uma constante positiva (Engle e Manganelli (2004) sugerem $G=10$), $\tau$ é o nível do VaR desejado (usualmente $\tau=0.01$ ou $\tau=0.05$) e $(x)^{+}=\max(x,0)$ e $(x)^{-}=-\min(x,0)$
Como as funções são recursvivas é necessário uma primeira estimativa para o $VaR_{t=1}$. Considerando os mesmos dados de Engle e Manganelli (2004) os quais trabalharam com os retornos dos preços das açoes da GM, IBM e SP500 para Abril 7, 1986 até Abril 7, 1999, podemos obter a primeira estimativa de $VaR_{t=1}$ como:
#Limpa os workspace rm(list=ls()) #Lê os dados stocks<-read.table("dataCAViaR.txt") colnames(stocks)<-c("GM","IBM","SP500") #Nível do VaR desejado tau<-0.05 #Divide a base em treinamento e validação train<-stocks[1:2892,] valid<-stocks[2893:3392,] #Criar o vetor de VaR VaR<-rep(NA,nrow(train)) #Primeira estimativa VaR[1]<- -qnorm(tau)*sd(train$GM)Em seguida, Engle e Manganelli (2004) sugerem estimar os parâmetros dos modelos por meio da estrutura de Regressão Quantílica: $\min_{\boldsymbol\beta}\frac{1}{T}\sum_{t=1}^{T}\left[\tau-1\left(y_{t} \leq VaR_{t}\right)\right]\left[y_{t}-VaR_{t}\right]$ onde $1(\cdot)$ é uma função indicadora que assume valor igual a 1 quando seu argumento é verdadeiro $y_{t}\lt VaR_{t}$ e 0 caso contrário. Assim, a função objetivo para o modelo Adaptive é dada por:
#Sugestão Engle e Manganelli (2004) G<-10 #Function adpatative<-function(x){ beta1<-x[1] for(i in 2:nrow(train)){ VaR[i]<- VaR[i-1] + beta1*((1+(exp(G*(train[i-1,"GM"] - VaR[i-1]))^(-1)))-tau) } #Objective Function res<-sum((tau-(train$GM < VaR))*(train[,"GM"]-VaR))/nrow(train) return(res) }O próximo passo é otimizar essa função, isso pode ser feito utilizando-se a função optim:
#Realiza a otimização usando o métood de Brent res<-optim(par=c(0), adpatative, method="Brent", lower=c(-10), upper=c(10)) #Resultado do parâmetro de interesse beta<-res$parA função optim tem como argumentos nesse exemplo: valor inicial para o(s) parâmetro(s) de interesse, função a ser minimizada, método utilizado e limites inferiores e superiores para o(s) parâmetro(s) de interesse. O último passo é a previsão do VaR:
VaR<-rep(NA,nrow(dados)) VaR[1]<- -qnorm(tau)*sd(dados[,"GM"]) #Previsão do CAViaR adpatativeForecast<-function(x){ beta1<-x[1] for(i in 2:nrow(dados)){ VaR[i]<- VaR[i-1] + beta1*((1+(exp(G*(dados[i-1,"GM"]-VaR[i-1]))^(-1)))-tau) } #Objective Function return(VaR) }onde o objeto dados pode ser as bases de treinamento e validação:
#Base de treinamento dados<-train #Faz a previsão VaR.train<-adpatativeForecast(beta) #Medida de acuracia hits mean(dados$GM< -VaR.train)-tau
O mesmo processo pode ser realizado para as demais funções.
Nenhum comentário:
Postar um comentário