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, 26 de setembro de 2012

QGIS - Aplicações em geomarketing - Parte 2.


Dando continuidade sobre as operações no Quantum Gis em especial com aplicações em Geomarketing demonstrarei aqui como adicionar ao mapa: ruas ou imagens de satélites oriundas do Google Maps.

Esse tipo de análise é útil quando deseja-se estudar o impacto de variáveis georeferenciadas e a sua relação com possíveis estruturas como ruas, shoppings, parques, etc..

Assumindo que a primeira parte do post QGIS - Aplicações em geomarketing - Parte 1, tenha sido realizada podemos seguir aqui com uma nova análise.

Adicionando Layers do Google Map no QGis.

Considere a malha de setor censitário de Brasília, a mesma malha publicada no post QGIS - Aplicações em geomarketing - Parte 1.

Após realizar a projeção em: Projected Coordinate Systems → Universe Transverse Mercartor (UTM) → SAD69/ UTM Zone 23S (procedimento explicado no primeiro post) e ter salvo a nova malha já projetada, a tela do Qgis deverá ser algo como:


Para adicionar a malha do Google Map no Qgis precisamos adicionar um plugin no Qgis.

Os plugins são compilações de funções, usualmente criadas pelos usuários do Qgis que realizam determinadas tarefas.

O primeiro passo para adicionar a malha do Google Map no Qgis precisamos adicionar um novo repositório de plugins no software.

Para isso, execute os seguintes procedimentos: Plugins → Fetch Python Plugins... na tela que surgir escolha a aba Repositories, a seguinte surgirá:


O plugin que necessitamos chama-se OpenLayers Plugin.

Para que ele fique disponível, precisamos adicionar o seguinte repositório: http://build.sourcepole.ch/qgis/plugins.xml. Para isso, clique no botão Add e adicione o nome do repositório (por exemplo, Repositorio) e o endereço (nesse caso http://build.sourcepole.ch/qgis/plugins.xml) e clique no botão OK:


Na aba plugins procure pelo plugin OpenLayers e adicione-o. Para isso, clique nele e pressione o botão Install plugin:


Após esse procedimento, feche a janela. Em seguida, para adicionarmos a malha do Google Map no ambiente do Qgis faça no Menu: Plugins → OpenLayers plugin → Add Google Streets layers:


Como o QGis funciona como um sistema de camadas (Layers) a camada superior se subrepõem as demais, assim, caso a malha BSB esteja sobre a malha Google Streets a seguinte imagem surge:


Para trocar a ordem das camadas basta segurar a camada desejada e arrastar para a posição de interesse. Entretanto, não é possível observar as ruas sobre a malha BSB, para isso, podemos reduzir a visibilidade da camada BSB.

Para isso, dê dois cliques com o botão direito sobre a cor do Layer BSB (nesse caso o quadrado em lilás), caso o procedimento tenha sido executado corretamente a seguinte tela surgirá:


Faça a transparência igual a 50%:


Em seguida clique no botão OK:


Com a transparência alterada para 50% boa parte das estruturas existentes no Google Street podem ser observadas nesse novo mapa e análises podem ser formuladas com base nesse novo mapa.

terça-feira, 18 de setembro de 2012

Teste de razão de variâncias de Lo-MacKinlay.


Existem muitos textos que sugerem através de evidências empíricas que o retorno de ações contém componentes que podem ser preditos.

Por exemplo, Keim e Stambaugh (1986) encontraram um modelo estatisticamente significante para prever o preço de ações usando um modelo de previsão com variáveis pré-determinadas.

Fama e French (1987) mostraram que um longo período de retenção de retornos é negativamente correlacionado serialmente, implicando assim que 25% a 40% da variação de um longo período de retornos é previsível com base nos retornos passados.

Esse post, no entanto, tem como objetivo principal apresentar o Teste de Razão de Variâncias proposto por Lo e MacKinlay (1988). Os autores indicam que o modelo de passeio aleatório (ou passeio do bebâdo) é, em geral, inconsistente (para os ativos estudados) com o comportamento estocástico dos retornos semanais, especialmente para as ações com menor capitalização (Small Caps).

Lo e MacKinlay (1988) alertam que estes resultados não implicam necessariamente que o mercado de ações é ineficiente ou que os preços das ações não são avaliações racionais dos seus valores "fundamentais". O teste proposto pelos autores pode ser interpretado como um teste para a rejeição de "algum" modelo econômico de formação eficiente de preços.

Teste de razão de variâncias.

A eficiência do mercado de ações tem sido debatida por pesquisadores e profissionais do mercado financeiro. Uma forma particular de eficiência do mercado de ações é a eficiência informacional.

A eficiência informacional se baseia na premissa de que os preços dos ativos refletem as informações relevantes disponíveis instantaneamente aos investidores e ao público em geral. Como a chegada de informações é imprevisível, os preços dos ativos também se tornam imprevisíveis. A hipótese de que a chegada de informações fundamentais ao mercado é aleatória e, portanto, os movimentos dos preços dos ativos também serão aleatórios, é englobada pela teoria do passeio aleatório dos preços dos ativos.

De maneira simplista, a teoria do passeio aleatório indica que uma vez que a chegada de informações é imprevisível, o melhor preditor do preço de um ativo é seu valor atual. Esta ideia simples pode ser facilmente incorporada no modelo de passeio aleatório bem conhecido dos preços dos ativos, que pode ser expresso da seguinte forma: $P_{t}=P_{t-1}+\epsilon$.

$P_{t}$ é o preço atual do ativo em estudo, $P_{t-1}$ é o preço do período anterior, e $\epsilon$ é um termo de erro aleatório. Cada termo de erro aleatório representa a chegada de uma nova informação, o qual se assumido ser imprevisível deve ser independentes uns dos outros. Admitindo sobre a hipótese nula o termo de erro aleatório é independente e identicamente distribuído segundo uma distribuição normal, então a variância do termo de erro aleatório é linear no intervalo de tempo durante o qual os preços são observados. Simplesmente, a variância da variação de preços quinzenais deve ser o dobro da variação de preços semanais. Além do mais, a variância das alterações de preços mensais deve ser quatro vezes superior ao de alterações de preços semanais, e assim por diante.

A relação linear entre o intervalo de tempo observado para os preços do ativo de interesse e a sua variação é a essência da especificação do teste desenvolvido por Lo e MacKinlay (1988). Lo e MacKinlay (1988) desenvolveram distribuições limitantes para os estimadores de razão de variância, com e sem a existência de heterocedasticidade, e mostraram que os preços dos ativos não necessariamente seguem um passeio aleatório. Seus estimadores são definidos como se segue:

A equação (01) representa a média das alterações dos preços em T períodos de tempo:


Já a equação (02) representa um estimador de variância para as alterações dos preços no period de tempo especificado, isso é $t=1,\dots,T$:


Por fim, a equação (03) representa um estimador de variância para as mudanças q-temporais de preços:


e $m=q(T-q+1)(1-\frac{q}{T})$ é um ajuste executado no denominador da variância do estimador q-temporal para acomodar as observações que se sobrepõem, além de ajudar a aumentar a potência do teste de razão de variância.

Especificação do teste.


Assim, o teste da razão de variâncias é definido por:


Para acomodar a possível heterocedasticidade, utiliza-se a estatística do teste padronizado $z$ o qual é assintoticamente distribuído segundo uma normal padrão:



onde


e


Aplicação usando os dados da Bovespa


Utilizando o R, vamos calcular o teste de razão de variâncias de Lo e MacKinlay para as ações PETR4 em um período $q=1$ diário, isso é, com defasagem de um dia.

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

#Habilita o pacote quantmod
library(quantmod)

#Início do período de interesse
start = as.Date("2011-01-01") 

#Fim do período de interesse
end = as.Date("2011-12-31") 

#Obtêm os dados da PETR4
getSymbols("PETR4.SA", src="yahoo",from=start,to=end)

A seguir é necessário calcular os log-retornos de duas séries: a série original e a série defasada (nesse caso em um dia):

#Aplica o log-retorno nos preços
ret <- as.matrix(c(rep(NA, 0), diff(log(Cl(PETR4.SA)), lag=1)))

#Aplica o log-retorno nos preços (Defasagem diária)
ret2 <- as.matrix(c(rep(NA, 0), diff(log(Cl(PETR4.SA)), lag=2)))
#Plota a série temporal dos preços de fechamento
plot(ret, main="Petr4",type="l",
+ylab="Log-return Close price. (Lag 1)",xlab="Time")

plot(ret2,main="Petr4",type="l",
+ylab="Log-return Close price. (Lag 2)",xlab="Time")
Em seguida os parâmetros exigidos para o teste são calculados:
#Calcula muhat
muhat <- mean(ret, na.rm=TRUE)
nq <- nrow(ret)
#Parâmetros Sigma e Delta
sigatop <- (ret - muhat)^2
sigatop1 <- c(NA, sigatop[-length(sigatop)])
deltop <- sigatop * sigatop1
delbot <- sigatop
sigctop <- (ret2 - 2*muhat)^2
#Guarda os resultados
dados <- data.frame(ret, sigatop, sigatop1, deltop, delbot, sigctop)
Fazendo a soma, obtemos os valores desejados:
#Calcula a soma dos valores
sigatop <- sum(sigatop, na.rm=TRUE)
sigctop <- sum(sigctop, na.rm=TRUE)
deltop <- sum(deltop, na.rm=TRUE)
delbot <- sum(delbot, na.rm=TRUE)
Em seguida o cálculo dos testes é realizado:
nq<-nrow(ret)
q<-2
qm1<-q-1
theta<-0
j<-1
m <- q*(nq-q+1)*(1-q/nq)
siga <- sigatop/(nq-1)
sigc <- sigctop/m
varrat2 <- sigc/siga
delta <- nq*deltop/(delbot**2)
while(j <= qm1)
{
  theta <- theta + ((2*(q-j)/q)**2)*delta
  j<-j+1
}

z <- sqrt(nq)*(varrat2-1)/sqrt(theta)
print(nq, cat("Número de retornos:"))
print(varrat2, cat("Razão de variâncias para retronos com Lag=2:"))
print(z, cat("Teste Robusto a Heterocedasticidade de Lo-MacKinlay:"))
Após realizar a análise obtêm-se:
  • Número de retornos:[1] 249
  • Razão de variâncias para retronos com Lag=2:[1] 1.081269
  • Teste Robusto a Heterocedasticidade de Lo-MacKinlay:[1] 1.052326
Os resultados indicam que a hipótese nula de presença de um comportamento como um passeio aleatório para a série PETR4 diária entre 01-01-2011 até 31-12-2011 não pode ser rejeitada, uma vez que o valor do teste não é maior do que o valor crítico sobre a hipótese nula, qual seja, aproximadamente 1.96 a um nível de confiança de 95%. Uma maneira direta de se atingir o mesmo resultado é por meio da biblioteca vrtest. A função que realiza o teste de Lo-MacKinlay é a função Lo.Mac(y=, kvec=) onde o parâmetro y= recebe o vetor de ativos e kvec= a defasagem utilizada no teste.

sexta-feira, 14 de setembro de 2012

QGIS - Aplicações em geomarketing - Parte 1.


Quantum GIS (freqüentemente abreviado QGIS) é um sistema multi-plataforma livre e de código aberto para a análise de Sistemas de Informação Geográfica (SIG), que fornece dados de visualização, edição além de capacidades para análise.

A utilização de sistemas SIG em administração possui diversas aplicações, a principal é em Geomarketing.

Geomarketing é a integração de sistemas geográficos em vários aspectos de marketing, incluindo vendas e distribuição.

A pesquisa em Geomarketing é usualmente realizada por meio do uso de parâmetros geográficos em metodologia de pesquisa de marketing, incluindo amostragem, coleta de dados, análise e apresentação.

A base central de Geomarketing é o mapa digital, representado usualmente por um arquivo shapefile. No Brasil, o principal fornecedor de malhas digitais é o IBGE. Para baixar as malhas vá ao endereço ftp://geoftp.ibge.gov.br/malhas_digitais.

Vale realçar que não basta baixar apenas o arquivo em formato *.shp, mas na mesma pasta é necessário a existência de pelo menos outros dois arquivos: *.shx e *.dbf

O geomarketing é uma disciplina dentro da análise de marketing que usa geolocalização (informação geográfica) no processo de planejamento e implementação de atividades de marketing.

Esse campo pode ser usado em qualquer aspecto do mix de marketing - o produto, preço, promoção, ou praça (segmentação geográfica).

Segmentos de mercado também se correlacionam com a localização, e isto pode ser útil na gestão de marketing. O geomarketing já é uma metodologia aplicada com sucesso no setor financeiro através da identificação de caixas eletrônicos geradores de tráfego e criação de hotspots baseados em parâmetros geográficos integrados com o comportamento do cliente.

Nesse post, mostrarei um exemplo de como utilizar o Quantum GIS para a uma análise simples do mercado de escolas em Brasília.

Utilizando o Quantum GIS.

Antes de fazer qualquer análise é necessário que se saiba qual a região deseja-se estudar. No exemplo desse post trabalharemos com o setor censitário do IBGE para Brasília em 2010.

Baixe a malha de Brasília em 2010 e extraia todos os arquivos em uma mesma pasta (53SEE250GC_SIR.shp, 53SEE250GC_SIR.shx, 53SEE250GC_SIR.dbf e 53SEE250GC_SIR.prj).

Vá ao menu e escolha Layer → Add Vector Layer. É posível também adicionar o Layer apenas arrastando o arquivo 53SEE250GC_SIR.shp para o ambiente Quantum GIS Desktop.


Após a escolha da opção Add Vector Layer a seguinte tela surge:


Há três opções disponíveis:

  1. File: Abre apenas um único shapefile.
  2. Directory: Abre todos os arquivos shapefile presentes no diretório indicado.
  3. Database: Abre os shapefile que estão em formato de base de dados.
  4. Protocol: Abre o layer por meio de protocolos.

Aqui trabalharemos com a opção File. Na opção Dataset o endereço do shapefile deve ser especificado e na opção Enconding a formatação dos caracteres do Layer deve ser especificado (caso não saiba qual formatação usar utilize a opção System).

Caso tenha dado certo a seguinte imagem surgirá:



Definindo a projeção da malha para mapas no Brasil.

Antes de mais nada, vamos adicionar ao mapa uma Scale Bar. Para isso vá em View → Decorations → Scale Bar.

Surgirá a seguinte tela:


Marque a opção Enable Scale Bar. A escala surgirá no canto superior direito do QGis Desktop. O próximo passo é definir a projeção da malha digital. No canto inferior direito da tela do QGis Desktop clique no ícone CRS Status:


A seguinte tela surgirá:


Marque a opção Enable "on the fly" CRS Transformation e escolha a opção Projected Coordinate Systems → Universe Transverse Mercartor (UTM)
→ SAD69/ UTM Zone 23S


As opções produzem a seguinte tela:


Clique em Apply e depois OK. A escala agora deve estar em quilômetros e agora podemos trabalhar com essa nova projeção.

É necessário salvar esse mapa projetado e então trabalhar com o mapa salvo. Para isso clique com o botão direito no Layer e escolha a opção Save as....


Defina o local para salvar o novo arquivo em Browse, aqui denominado BSB.shp e na caixa de texto CRS clique no botão Browse e escolha a opção Projected Coordinate Systems → Universe Transverse Mercartor (UTM)
→ SAD69/ UTM Zone 23S
. Depois clique em OK.


Remova o Layer antigo do ambiente QGis Desktop (basta clicar com o botão direito sobre o Layer e escolher a opção Remove) e adicione o novo Layer BSB.shp.

Selecionando polígonos em uma determinada distância.

Suponha que queiramos selecionar os polígonos que estão a uma distância (em raio) de até 10 quilômetros de uma determinada região. Ou seja, essa pode ser a influência do nosso produto e por isso desejamos estudar as regiões que estão a esse alcance geográfico.

Particularmente, suponha que queiramos obter todos os polígonos que estão a 10 quilômetros do polígono com número do setor censitário igual a CD_GEOCODI=530010805230054.

O primeiro passo é selecionar o polígono de interesse, para isso, clique com o botão direito no Layer BSB e escolha a opção Open Attribute Table:


A seguinte tala surgirá:


Para selecionarmos o polígono de interesse na caixa de texto Look for coloque o número de polígono desejado (530010805230054) e na Combo Box ao lado de in escolha a variável CD_GEOCODI em seguida clique na opção Search:


O polígono selecionado estará sublinhado de azul na tabela de dados, após esses passos feche a tabela no botão Close. O setor censitário escolhido estará realçado no mapa:


O próximo passo é salvar apenas o polígono desejado, para isso, clique com o botão direito no Layer BSB e escolha a opção Save selection as...:


Dê o nome de Selecionado.shp, escolha o local onde será salvo e confira se o CRS possui a mesma projeção do mapa, isso é: SAD69/ UTM Zone 23S.


Adicione o novo Shapefile no ambiente QGis Desktop:


Para selecionar os polígonos que estão a uma distância de 10 Km do setor censitário em verde, precisamos agora encontrar o centroide do polígono. Para isso, vá ao menu do QGis Desktop e escolha as opções: Vector → Geometry Tools → Polygon centroids , na caixa de texto Input polygon vector layer escolha o Layer: Selecionado.shp e defina o Layer que conterá o centro de massa do setor censitário desejado, no nosso caso denominamos de Centroid.shp:


Caso o procedimento tenha sido realizado de maneira correta, o centroide estará presente no mapa:


Para selecionar os polígonos que estão a uma distância de 10 Km (10000 metros) do setor censitário de interesse, vá ao menu e escolha as opções: Vector → Geoprocessing Tools → Buffer(s).

Escolha o Layer: Centroid.shp informe o raio desejado (10000 metros) e dê o nome do novo Layer com a circunferência de 10Km em relação ao setor censitário escolhido, aqui demos o nome de Raio10.shp:


O novo Layer com um raio de 10 Km surgirá:


Por fim, procuramos pela interseção entre os Layers: BSB e Raio10. Para obter essa interseção vá ao menu e escolha as opções: Vector → Data Management Tools → Join Attributes by location:


em seguida clique no botão OK. Os Layers: BSB e Raio10 são escolhidos e a malha final (Final.shp) com a interseção dos polígonos que possuem distância de seus centroids até o centroid do setor censitário de interesse de 10 Km é produzido:


Podemos retirar a seleção dos Layers que não nos interesse e dexar somente os Layers: BSB e Final habilitados:


sábado, 8 de setembro de 2012

Calculando a função densidade de probabilidade da distribuição estável usando FFT.


Distribuições estáveis ​​paretianas têm propriedades atraentes para modelagem empírica em finanças, porque incluem a distribuição normal como um caso especial, mas também pode permitir caudas mais pesadas e assimetria.

Uma razão principal para a pouca utilização dessa distribuição em trabalhos acadêmicos aplicados é devido ao fato de que, em geral, não há expressão de "forma fechada" para a a função de densidade de probabilidade, e que as aproximações numéricas computacionais são não-triviais e computacionalmente extensivas.

Nesse post vou mostrar como é possível calcular a função densidade de probabilidade via Fast-Fourier Transform (FFT).

O trabalho original sobre esse assunto foi produzido por Mittnik, Doganoglu e Chenyao (1999).

A distribuição alfa-estável.


A distribuição alfa-estável, em geral, não possui expressão analítica para sua função densidade de probabilidade (f.d.p) ou ainda para a sua função distribuição acumulada (f.d.a), mas pode ser escrita por meio de sua função característica (Rachev e Mittnik, 2000 ):


onde $0<\alpha<2$ é o expoente da distribuição ou índice de cauda, $-1\le \beta\le 1$ é o parâmetro de assimetria, $\sigma>0$ é o parâmetro de escala e $\delta \in \Re$ é o parâmetro de locação, a função $\omega(.,.)$ é dada por:




A distribuição alfa-estável representada acima e definida pela notação $S_{\alpha}^{0}(\beta,\delta,\sigma)$ é denominada parametrização $S_{0}$ segundo Nolan (2010).

A função densidade de probabilidade pode ser aproximada utilizando o método FFT (Fast Fourier Transform) o qual é computacionalmente eficiente e permite um processo de aproximação mais rápido do que expansão por séries (Bergström, 1952) ou integração direta (Nolan, J. P., 2001. Maximum likelihood estimation of stable parameters. Manuscrito não publicado.).

Segundo Durrett (2010) página 106 uma função densidade de probabilidade pode ser escrita pela Transformada de Fourier da função característica, em outras palavras:


A integral acima pode ser calculada para $n$ pontos igualmente espaçados com distância $h$ e soma resultante pode ser computada por meio do método FFT (Fast Fourier Transform). Mittnik e Doganoglu (1999) sugerem que os valores de $n$ e $h$ devem ser respectivamente $2^{13}$ e $h=0.01$ para que uma boa aproximação seja possível.

Implementação no R.


Podemos então implementar o método descrito anteriormente no R.

Inicialmente, definimos os valores dos parâmetros para os quais desejamos calcular a função densidade de probabilidade:

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

#Parâmetros para o calculo da PDF
alpha<-0.5
beta<-0.3
sigma<-1
delta<-0
O limite superior para o suporte da distribuição $xmax$ e o número de pontos utilizados para a aproximação $n$ deve ser definido:
#Valor máximo em módulo da PDF
xmax<-20

#2^N espaços iguais entre [-xmax,xmax]
n<-13
Devido à natureza do método FFT, valores distantes do centro da distribuição podem ser subestimados. Por esta razão o método aqui sugerido calcula a função densidade de probabilidade da distribuição alfa-estável para o intervalo $[-xmax, xmax] \times 2^{mult}$ onde o multiplicador $mult$ é utilizado para aumentar (temporariamente) o suporte da distribuição, em seguida, esse intervalo aumentado é truncado em seu intervalo original. Seja o valor $mult=4$ como uma primeira tentativa, no entanto, para melhor precisão deve-se utilizar $mult>4$.
#Define o multiplicador
mult<-4

#Calcula o intervalo do suporte aumentado
xmax <- xmax*(2^mult)

#Aumenta n para cobrir o intervalo maior com os mesmos pontos do grid
n <- n + mult
M <- 2^n
R <- pi/xmax
dt <- 1/(R*M)
Como o método FFT admite a utilização de números complexos e devido a função característica da distribuição alfa-estável possuir número imaginário na sua estrutura precisamos definí-lo no R:
#Número imaginário
i<-complex(real = 0, imaginary = 1)

#Define o grid de valores com pontos uniformemente espaçados 
xx <-seq(from = -2^(n-1)+0.5, to = (2^(n-1)-0.5))/(2^n*dt)
Em seguida, a função característica é definida:
#Função característica da distribuição alfa-estável
piby2 <- pi/2
if(abs(alpha-1)<0.001)
  {
    yy <- exp( -sigma*(abs(xx))*( 1+i*beta*sign(xx)/piby2*log(sigma*abs(xx))) + i*delta*xx )
  }
else
{
    yy <- exp( -(sigma*abs(xx))^alpha*( 1+i*beta*sign(xx)*tan(alpha*piby2)*( (sigma*abs(xx))^(1-alpha)-1 ) ) + i*delta*xx )
}
Note que caso $\alpha$ esteja muito próximo de um, admitimos que $\alpha=1$ e utilizamos a estrutura da função característica nessa condição. O próximo passo é aplicar o método FFT:
#Utiliza o método FFT
yy1 <- c(yy[seq(from=(2^(n-1)+1),to=2^n)], yy[seq(from=1,to=2^(n-1))])
z <- Re( fft(yy1) )/(2*pi)*R
E após a utilização do método FFT pela função fft do R, a função densidade de probabilidade é calculada:
#Computa a função densidade de probabilidade
x <- (2*pi)*(seq(from=0,to=(M-1),by=1)/(M*R)-1/(2*R))
y <- c(z[seq(from=(2^(n-1)+1),to=2^n)], z[seq(from=1,to=2^(n-1))])
Por fim, o intervalo original do suporte da distribuição é obtido e o esboço de sua função densidade de probabilidade é apresentado:
#Encontra os pontos da f.d.p no intervalo original
T <- which((x<=xmax/(2^mult)) & (x>=-xmax/(2^mult)))
x <- x[T]
y <- y[T]

#Plota a função densidade de probabilidade
plot(x,y,type="l", main ="Distribuição alfa-estável"
+,xlab="Suporte",ylab="f.d.p",col="blue")
O valor da função densidade de probabilidade para um ponto arbitrário qualquer pode ser obtido por meio de interpolação entre os pontos que contém o valor desejado. Já a aproximação via FFT para outras parametrizações segue o mesmo processo, exceto pela definição da expressão da função característica na sintaxe apresentada anteriormente que deve ser alterada para a parametrização desejada.

quarta-feira, 5 de setembro de 2012

Testes de eventos usando o pacote quantmod.


O objetivo principal do Estudo de Eventos é mensurar o efeito de um determinado evento sobre o valor da firma.

Abaixo seguem os passos para a análise e inferência em Estudo de Eventos ( Campbell et. al., 1996 pág. 151):

  1. Defina o evento de interesse e identifique o período nos quais o preço do ativo poderia ser afetado, esse intervalo é denominado Janela do Evento.
  2. Após identificar o evento de interesse é necessário determinar quais são os critérios de seleção para incluir ativos de empresas. O critério pode envolver restrições impostas pelos dados (ex:. Empresas listadas na Bovespa) ou podem envolver restrições associadas ao setor econômico da empesa (ex:. Indústrias)
  3. Calcule os retornos anormais, esses retornos anormais são os retornos do ativo de interesse após o evento focal menos o retorno normal (predito) para a firma na janela de estimação. Matematicamente, $\epsilon_{t}=r_{it}-\mathbb{E}(r_{it}|\mathcal{F}_{t})$ onde $\epsilon_{t},r_{it}$ e $\mathbb{E}(r_{it}|\mathcal{F}_{t})$ são os retornos anormais, atuais e normais respectivamente para o período de tempo $t$ e $\mathcal{F}_{t}$ é o conjunto informacional disponível no tempo $t$. Usualmente, os modelos mais utilizados para o preditor $\mathbb{E}(r_{it}|\mathcal{F}_{t})$ são: Constant Mean Return Model ($\mathbb{E}(r_{it}|\mathcal{F}_{t})=\mu$) e Market Model ($\mathbb{E}(r_{it}|\mathcal{F}_{t})=\alpha+\beta r_{mt}$ onde $r_{mt}$ é o retorno do mercado.)
  4. Usando uma janela de estimação (antes do fato) os parâmetros do modelo são estimados. Usualmente, o período do evento focal não é incluído na janela de estimação para evitar que o evento influencie o nível normal dos retornos.
  5. Com base nas estimativas dos parâmetros o retorno anormal é calculado. A hipótese nula e as estratégias de agregação dos retornos são definidas.
  6. Resultados empíricos, interpretação e conclusão são então apresentados.

Visualmente, as janelas são descritas pelo seguinte gráfico:

Como exemplo, vamos considerar como evento a influência do Steve Jobs sobre o ativo da Apple.

Uma pergunta que surge é: O afastamento do Steve Jobs da Apple até o seu falecimento afetaram o preço das ações da Apple ?

Será que uma pessoa pode incorporar valor à organização ? E se pode, quanto é esse valor ?

Vamos testar esse evento utilizando a abordagem clássica de Campbell et. al., 1996 que apesar de amplamente muito utilizada apresenta alguns pressupostos inautênticos (Corrado, 2011).

Definiremos a janela do evento a saída do Steve Jobs da presidência da Apple (17/01/2011) até a data do seu falecimento (05/10/2011).

Como janela de estimação utilizaremos a mesma quantidade de dias compreendidos entre 17/01/2011 a 05/10/2011, dessa forma o primeiro passo é obter a série temporal dos preços da Apple:

#Habilita o pacote quantmod
library(quantmod)

#Cria um novo ambiente para armazenar os dados
stockData <- new.env() 

#Steve Jobs deixa a presidência da Apple
startEvent = as.Date("2011-01-17") 

#Steve Jobs falece
endEvent = as.Date("2011-10-05") 
#Quantidade de dias entre a saida e o falecimento.
tamanhoJanela<-endEvent-startEvent

#Início da série
startDate<-startEvent-tamanhoJanela

#Obtêm os dados da Apple
getSymbols("AAPL", src="yahoo",from=startDate,to=endEvent)
Podemos plotar a série temporal completa (03/05/2010 até 05/10/2011):
#Plota a série temporal dos preços de fechamento
plot.xts(Cl(AAPL),major.format="%b/%d/%Y",
+main="Apple",ylab="Close price.",xlab="Time")
Usualmente, trabalhamos o log-retorno do ativo $r_{t}=log(R_{t})-log(R_{t-1})$:
#Calcula o log-retorno.
diffAAPL<-diff(log(AAPL))

#Plota a série temporal dos preços de fechamento
plot.xts(Cl(diffAAPL),major.format="%b/%d/%Y",
+main="Apple",ylab="Log-return Close price.",xlab="Time")
Agora precisamos estimar os retornos normais, utilizando o NASDAQ-100 como retorno do mercado, podemos estimar os parâmetros utilizando o modelo de mercado:
#Janela de estimação
AAPLSubset<-  window(diffAAPL, start = startDate, end = startEvent-1)

#Nasdaq-100
getSymbols("^NDX", src="yahoo",from=startDate,to=endEvent)
diffNDX<-diff(log(NDX))
NDXSubset<-window(diffNDX, start = startDate, end = startEvent-1)

#Estima o modelo de mercado
MarketModel<-lm(Cl(AAPLSubset)~Cl(NDXSubset))
summary(MarketModel)
As estimativas obtidas são $\hat{\alpha}=0.0007294$ e $\hat{\beta}=1.0297346$ aplicando a equação para toda a série, temos:
#Aplica o Market Model
epsilon<-diffAAPL-coef(MarketModel)[1]-coef(MarketModel)[2]*diffNDX

#Encontra a variância do epsilon
NDXSubset1<-na.omit(window(diffNDX, start = startDate+1,
+ end = startEvent-1))

X<-as.matrix(cbind(rep(1,length(Cl(NDXSubset1))),Cl(NDXSubset1)))
NDXSubset2<-window(diffNDX, start = startEvent, end = endEvent)

Xstar<-as.matrix(cbind(rep(1,length(Cl(NDXSubset2))),Cl(NDXSubset2)))

V<-(diag(nrow(X))*var(residuals(MarketModel)))+
+((X%*%solve(t(Xstar)%*%Xstar)%*%t(X))*var(residuals(MarketModel)))
Acumulamos agora o retorno na Janela do Evento usando o CAR (Cumulative Abnormal Return) e o SCAR (Standardized Cumulative Abnormal Return):
epsilonStar<-window(epsilon, start = startEvent, end = endEvent)
CAR<-sum(Cl(epsilonStar))
SCAR<-CAR/sqrt(sum(V))
Usando a abordagem clássica, a estatística SCAR possui distribuição t de Student com $L_{1}-2$ graus de liberdade onde $L_{1}=T_{1}-T_{0}$ nesse caso:
#Valor crítico da distribuição T
alpha<-0.05
df<-length(Cl(AAPLSubset))-2
qt(alpha/2,df)
qt(1-(alpha/2),df)

Como a estatística não recai sobre a região crítica a um nível de significância de 5%, então não rejeitamos a hipótese nula, qual seja: Nulidade do efeito Steve Jobs sobre as ações da Apple.