SAUDAÇÕES!

Seja bem vindo à página do professor Pedro Albuquerque. Para saber mais sobre meu currículo, disciplinas ministradas e interesses de pesquisa, navegue no menu disponível no topo da página.

quarta-feira, 3 de outubro de 2012

Testando a hipótese de reação exagerada em mercados.


Até meados da década de 1980, pesquisas econômicas financeiras eram essencialmente sobre como investigar a interação entre o comportamento racional dos maximizadores de utilidade.

Muito sobre essa abordagem de pesquisa e investigação foi produzido mas pouco sobre o comportamento individual dos participantes do mercado foi explicitado. Com as influências da psicologia clínica e economia experimental impactando a disciplina de finanças a partir de ângulos diferentes, a investigação sobre os aspectos comportamentais em finanças começaram a surgir.

Um dos primeiros artigos empíricos na área de finanças comportamentais foi o estudo seminal de DeBondt e Thaler (1985) sobre a reação exagerada do mercado de ações.

Os resultados DeBondt e Thaler (1985), mostraram que quando os ativos eram mantidos por longos períodos de tempo, as ações apresentavam um comportamento significante para a reversão dos preços desses mesmos ativos.

A explicação para a quantidade substancial de reversão no preço dos ativos é baseada no comportamento. Os investidores, em geral, tendem a "super-ponderar" desempenhos mais recentes do ativo em questão e "sub-ponderar" informações de mais longo prazo em suas decisões. Esse comportamento é consistente com a heurística da disponibilidade apresentada por Tversky e Kahneman (1973).

Por exemplo, se uma ação sofreu recentemente uma diminuição nos ganhos devido a alguma mudança não estrutural temporária nas oportunidades econômicas, a queda dos preços pode ser exagerada devido a atualidade da notícia.

Uma vez que o preço da ação foi pressionado, o seu aumento gradual até a sua recuperação completa pode ser lento. Isso até que os investidores percebam sua "reação exagerada" à notícia temporariamente ruim, criando assim uma pressão compradora para "inverter" a queda dos preços.

DeBondt e Thaler (1985) encontraram uma persistência significante para esse fenômeno de reversão e sugeriram que os mercados tendem a sofrer de reação exagerada dos investidores.

A beleza da abordagem de DeBondt e Thaler (1985) está em demonstrar como uma hipótese de reação exagerada pode ser testada empiricamente.

Especificamente, o que DeBondt e Thaler (1985) fazem é calcular o retorno das carteiras para alguns períodos, por exemplo, o desempenho da carteira pode ser calculada para os 36 meses anteriores e, posteriormente, avaliamos como o portfólio se comporta, especialmente para um determinado período de avaliação ou seja, o desempenho nos 36 meses subsequentes.

Para testar a hipótese de reação exagerada, DeBondt e Thaler (1985) formaram portfólios "perdedores" e "vencedores" compostos pelas 30 ações com o pior desempenho e 30 ações com o melhor desempenho, respectivamente, durante o período de formação.

Os autores, então, seguem estas carteiras para os 36 meses seguintes e avaliam e comparam seus desempenhos. Com o tempo, a carteira "perdedora", composta das ações com o pior desempenho no período de formação, consistentemente supera a carteira de "vencedora" durante o período de avaliação. Esses resultados, de acordo com DeBondt e Thaler (1985), sugerem uma forte evidência da presente reação exagerada do mercado de ações, consistente com a teoria da tomada de decisão irracional dos agentes.

O objetivo deste post é mostrar como você pode realizar um simples estudo sobre a reação exagerada do Mercado de ações usando o R para isso.

Teste de reação exagerada usando o R.


DeBondt e Thaler (1985) acumularam em seu trabalho os retornos ajustados do mercado ao longo de um período de formação de três anos para cada ação do New York Stock Exchange (NYSE) com início em dezembro de 1932 e continuando até dezembro de 1977. As carteiras "perdedoras" e "vencedora" foram as carteiras avaliadas ao longo dos 17 períodos disjuntos de três anos de avaliação.

No nosso exemplo, trabalharemos com os ativos disponíveis de 2000 a 2012 e assim como DeBondt e Thaler (1985) utilizaremos três anos para o período de formação e três anos para o período de avaliação.

Conrad e Kaul (1993) introduziram a ideia de que os retornos acumulados em horizontes longos podem enviesar os resultados sobre a super-reação dos agentes. Uma solução para isso é usar períodos de retenção (holding periods) ao investigar horizontes longos.

Tal como acontece com a maior parte da investigação em economia financeira, o primeiro passo para a análise de dados é lê-los a partir de um conjunto de observações de dados externos. Esta tarefa é realizada pela seguinte sintax:

#Limpa o console
rm(list=ls(all=TRUE))

#Lista de ativos Bovespa
ativos<-read.csv("http://dl.dropbox.com/u/36068691/Ativos.csv")

#Obtêm os dados da Bovespa
lista<-as.character(ativos[,"Sigla"])
Em seguida, captura-se a data atual da máquina para a composição da série de interesse:
#Pega a data atual
d <- Sys.time()
current.year <- format(d, "%Y")
current.month <- format(d, "%m")
current.day <- format(d, "%d")
A fonte dos nossos dados é a API do Yahoo Finance, pior isso, precisamos especificar algumas parametrizações:
#Yahoo finance considera janeiro como 00 então:
month <- as.numeric(current.month) - 1
month <- ifelse(month < 10, paste("0",month, sep=""), m)

#Pega os prerídos diários para o ticket 1
tckr <- lista[1]                                   
fn <- sprintf("http://ichart.finance.yahoo.com/table.csv?s=%s&a=0&b=1&c=2000&d=%s&e=%s&f=%s&g=d&ignore=.csv",tckr, month, current.day, current.year)

#Guarda os dados
dados <- read.csv(fn, colClasses=c("Date", rep("numeric",6)))
dados<-dados[c("Date","Close")]
colnames(dados)<-c("Date",lista[1])
O código acima captura os dados do primeiro ativo listado e armazena em um data.frame denominado dados. Em seguida, precisamos repetir esse processo para cada um dos ativos disponíveis:
for(i in 2:length(lista))
{
  tckr <- lista[i]                                
  fn <- sprintf("http://ichart.finance.yahoo.com/table.csv?s=%s&a=0&b=1&c=2000&d=%s&e=%s&f=%s&g=d&ignore=.csv",tckr, month, current.day, current.year)
  
  #Guarda os dados
  data<-data.frame()
  data <- try(read.csv(fn, colClasses=c("Date", rep("numeric",6))))
  if(ncol(data)>0)
    {
      data<-data[c("Date","Close")]
      colnames(data)<-c("Date",tckr)
      dados<-merge(dados, data, by.x = "Date", by.y = "Date", all = TRUE)
    }
}
Uma função muito útil para se utilizar em análise de séries temporais é a função shift desenvolvida pelo R-Bloggers. Essa função é capaz de defasar a série temporal para trás (lag) e para frente (lead):
shift<-function(x,shift_by){
  stopifnot(is.numeric(shift_by))
  stopifnot(is.numeric(x))
  
  if (length(shift_by)>1)
    return(sapply(shift_by,shift, x=x))
  
  out<-NULL
  abs_shift_by=abs(shift_by)
  if (shift_by > 0 )
    out<-c(tail(x,-abs_shift_by),rep(NA,abs_shift_by))
  else if (shift_by < 0 )
    out<-c(rep(NA,abs_shift_by), head(x,-abs_shift_by))
  else
    out<-x
  out
}
Então, para cada ativo calculamos os retornos nos períodos de formação (três anos antes) e no período de avaliação (três anos depois):
#Para cada ativo calcular o retorno três anos antes e três anos depois
resultado<-data.frame()
for(i in 1:length(lista))
{
  precos<-dados[,c("Date",lista[i])]
  precos[,"pform"]<-shift(precos[,lista[i]],-3*360)
  precos[,"paval"]<-shift(precos[,lista[i]],+3*360)  
  precos[,"pform"]<-(precos[,lista[i]]-precos[,"pform"])/precos[,"pform"]
  precos[,"paval"]<-(precos[,"paval"]-precos[,lista[i]])/precos[,lista[i]]
  precos$Empr<-lista[i]
  precos<-na.omit(precos[,c("Date","Empr","pform","paval")])
  resultado<-rbind(resultado,precos)
}
Podemos em seguida eliminar as observações que são outliers:
#Remove retornos exagerados
resultado<-resultado[resultado[,"pform"]>-1 & resultado[,"paval"]>-1, ]

#Ordena os resultados
resultado <- resultado[order(resultado[,"Date"], resultado[,"Empr"]), ]

#Frequência dos ativos 
firmas <-  as.data.frame(table(resultado[,"Date"]))
names(firmas) <- c("Date", "freq")
firmas[,"Date"]<-as.Date(firmas[,"Date"])

#Une as frequências com a base resultado
dat <- merge(resultado, firmas, by="Date",all.x=T)
O código acima além de fazer a limpeza dos outliers calcula a frequência de dados para cada ativo e une esse resultado no data.frame dat. Os ativos são então ranqueados permitindo assim a definição dos "perdedores" e dos "vencedores":
#Ranqueia as empresas
firma <- unlist(tapply(rep(1, nrow(resultado)), resultado[,"Date"], cumsum))
dat <- cbind(dat, firma)
O teste T é então utilizado para se comparar o comportamento das carteiras "perdedoras" e dos "vencedoras" e consequentemente a possível existência de uma inversão das categorias "perdedoras" e "vencedoras":
#Carteira perdedora
perdedor <- dat[dat[,"firma"]<=5, ]
summary(perdedor[,"paval"])
t.test(perdedor[,"paval"])

#Carteira vencedora
vencedor <- dat[dat[,"firma"] >= dat$freq-4, ]
summary(vencedor[,"paval"])
t.test(vencedor[,"paval"])
A carteira "perdedoras" apresenta intervalo de confiança de 95% como [0.5463877, 0.6533983] e estimativa pontual de 0.599893. Já a carteira dita "vencedora" apresenta intervalo de confiança de 95% como [1.068938, 1.364774] e estimativa pontual de 1.216856, dessa forma não há evidências de reação exagerada para o conjunto de dados e período estudado.