Distribuindo pacotes no R. Qual o alcance?


Faz mais ou menos 1 mês que o pacote benford.analysis 0.1 foi disponibilizado no CRAN. 

Achei que valeria o esforço adicional de criar o pacote por alguns motivos e, entre eles, dois se destacam: (i) pacotes deixam os arquivos fontes mais estruturados, facilitam o uso das funções, forçam a criar uma documentação e passam por uma bateria de sanity tests que ajudam a criar boas práticas de programação; (ii) pacotes tornam o compartilhamento do código extremamente simples, ainda mais se o pacote estiver no CRAN, pois, basta rodar

 install.packages("benford.analysis") 

e qualquer pessoa de qualquer lugar do mundo terá o pacote instalado em sua máquina.

Sobre este último ponto, infelizmente, não é possível ter dados de download do CRAN de uma maneira consolidada, pois há diversos espelhos do site ao redor do mundo e nem todos guardam informações de acesso. Entretanto, o CRAN do RStudio faz esse registro. Assim resolvi baixar os dados de lá e ver se alguma outra alma além de mim baixou o benford.analysis.

Sinceramente, eu achei que encontraria uns 10 ou 11 downloads registrados – no máximo -, pois estamos com dados de apenas um espelho do CRAN e estamos falando de um pacote simples e relativamente desconhecido. Ocorre que neste 1 mês de existência o benford.analysis foi baixado 190 vezes em mais de 40 países diferentes considerando apenas o espelho do RStudio.  Um número pequeno quando comparado com pacotes como ggplot2 (que deve estar em virtualmente quase toda máquina de usuário do R), mas, ainda assim, grande o suficiente para me surpreender!

E também para me preocupar. Nesse meio tempo encontrei dois pequenos bugs no pacote. E se antes achava que não deveria ter pressa para corrigi-los, agora esperem uma atualização em breve (mas, claro, depois do carnaval)!

benford.analysis 0.1


O pacote benford.analysis (versão 0.1) está disponível no CRAN e você já pode instalar no R com o comando:

 install.packages("benford.analysis") 

O objetivo do pacote é prover algumas funções que facilitem a validação de dados utilizando a Lei de Benford (para saber mais sobre a lei, veja aqui e aqui).

Validar como e para quê?

Um dos objetivos pode ser o auxilío na detecção de manipulações contábeis. Dados financeiros (como pagamentos) tendem a seguir a Lei de Benford e tentativas de manipulação podem acabar sendo identificadas.

Por exemplo, a lei 8.666/93 estabelece que o limite para se fazer uma licitação na modalidade convite é de R$80.000,00. Será que os valores de licitações seguiriam a Lei de Benford? Pode ser que sim. E, caso haja a tendência, uma tentativa de manipular artificialmente valores licitados para algo pouco abaixo de R$80 mil geraria um “excesso” de dígitos iniciais 7. Restaria verificar uma amostra desses registros para confirmar a existência ou não de manipulação indevida.

Outro objetivo pode ser acadêmico: a validação de dados de pesquisas e censos. Por exemplo, dados de população de municípios, ou dados de renda dos indivíduos tendem a ter distribuição conforme a lei de Benford. Assim, desvios dos valores observados em relação aos valores esperados podem ajudar a identificar e corrigir dados anômalos, melhorando a qualidade da estatística.

Vejamos rapidamente alguns exemplos das funções básicas do pacote.

O benford.analysis tem 6 bases de dados reais, retiradas do livro do Mark Nigrini, para ilustrar as análises. Aqui vamos utilizar 189.470 registros de pagamentos de uma empresa no ano de 2010. Os valores vão desde lançamentos negativos (estornos) até valores na ordem de milhões de dólares.

Primeiramente, precisamos carregar o pacote (se você já o tiver instalado) e em seguida carregar os dados de exemplo:

library(benford.analysis) #carrega pacote

data(corporate.payment) #carrega dados

Para analisar os dados contra a lei de benford, basta aplicar a função benford nos valores que, no nosso caso, estão na coluna ‘Amount’.

 bfd.cp <- benford(corporate.payment$Amount)

Com o comando acima criamos um objeto chamado “bfd.cp” contendo os resultados da análise para os dois primeiros dígitos dos lançamentos positivos, que é o padrão. Caso queira, você também pode mudar quantos digitos deseja analisar, ou se quer analisar os dados negativos e positivos juntos, entre outras opções Para mais detalhes, veja a ajuda da função:

 ?benford

Com a análise feita, vejamos os principais gráficos com o comando:

 plot(bfd.cp) 

Os gráficos resultantes se encontram abaixo. Os dados da empresa estão em azul e os valores esperados pela lei de benford em vermelho.

plot_cp

O primeiro gráfico diz respeito à contagem de observações com relação aos seus dois primeiros dígitos, comparando-a com o valor esperado pela Lei de Benford.  Percebe-se que os dados da empresa se ajustam à Lei, mas, também, que há um salto claro no dígito 50!

O segundo gráfico é análogo ao primeiro, mas faz esta contagem para a diferença dos dados ordenados. Como nossos dados são discretos, este saltos em 10, 20, 30,  são naturais e não devem ser encarados como algo suspeito. Por fim, o terceiro gráfico tem um objetivo diferente e, em geral, você também não deve esperar encontrar um bom ajuste dos dados à reta vermelha, principalmente com dados de cauda pesada. Ali se encontra a soma dos valores das observações agrupadas por primeiros dígitos e a  intenção é identificar grupos de valores influentes (que, se estiverem errados, podem afetar bastante uma estatística).

Vejamos agora os principais resultados da análise com o comando

 print(bfd.cp) 

ou somente

bfd.cp

results_cp

Primeiramente são mostrados dados gerais da análise, como o nome da base de dados, o número de observações e a quantidade de primeiros dígitos analisados.

Logo em seguida têm-se as principais estatísticas da mantissa do log das observações. Se um conjunto de dados segue a lei de benford esses valores deveriam ser próximos de:

  • média: 0.5;
  • variância: 1/12 (0.08333…);
  • curtose: 1.2;
  • assimetria: 0.

Que são, de fato, similares aos dados de pagamento da empresa, confirmando a tendência.

Após isso, temos um ranking com os 5 maiores desvios, que é o que mais nos interessa aqui. Veja que o primeiro grupo é o dos números que começam com o dígito 50, como estava claro no gráfico, e o segundo grupo é o dos números que começam com 11. Esses registros são bons candidatos para uma análise mais minuciosa.

Por fim, temos um conjunto de estatísticas de grau de ajuste – que não irei detalhar agora para não prolongar muito este post. Tomemos como exemplo o teste de Pearson, que é bem conhecido. Veja que o p-valor do qui-quadrado é praticamente zero, sinalizando um desvio em relação ao esperado. Mas, como já dissemos várias vezes neste blog, o mais importante não é saber se os dados seguem ou não a lei de benford exatamente. Para isso você não precisaria sequer testá-los. O mais importante é verificar qual o tamanho do desvio e a sua importância prática. Assim, há um pequeno aviso ao final: Real data will never conform perfectly to Benford’s Law. You should not focus on p-values!

Voltando, portanto, à identificação dos desvios, você pode pegar os conjuntos dos dados “suspeitos” para análise com a função getSuspects.

 suspeitos <- getSuspects(bfd.cp, corporate.payment)

Isto irá gerar uma tabela com os dados dos 2 grupos de dígitos com maior discrepância (pela diferença absoluta), conforme ilustrado abaixo. Veja que são exatamente os dados que começam com 50 ou 11. Você pode personalizar qual a métrica de discrepância utilizar e também quantos grupos analisar. Para mais detalhes veja a ajuda da função:

 ?getSuspects

suspects

Note que nossa base de dados é de mais de 189 mil observações. Verificar todos os dados seria infactível. Poderíamos analisar uma amostra aleatória desses dados. Mas, não necessariamente isso seria eficiente.  Veja, assim, que a análise de benford, com apenas os dois primeiros dígitos, nos deu um grupo de dados suspeitos com menos de 10% das observações, permitindo um foco mais restrito e talvez mais efetivo para análise.

Há outras funcionalidades no pacote e na ajuda há exemplos com dados reais. O pacote é bem simples, o intuito é fornecer um mínimo de funções que automatize os procedimentos, facilite a vida e minimize a quantidade de caracteres digitados de quem queira fazer a análise. Algumas funcionalidades que serão adicionadas no futuro são: melhoria na parte gráfica com o Lattice, inclusão de comparação dos dados com a lognormal e inclusão de mais dados de exemplo.

Se encotrar algum bug, tiver alguma dúvida ou se quiser deixar alguma sugestão, comente aqui!

PS: com relação às sugestões, tanto o R quanto este pacote são livres e com código aberto. Então, sinta-se à vontade não somente para sugerir, mas principalmente para escrever novas funções e funcionalidades!

Benford Analysis R Package


Em post anterior falamos sobre a Lei de Benford e que ela pode ser utilizada para o auxílio na detecção de fraudes contábeis ou dados estranhos. Também explicamos por que ela surge - resumidamente, pode-se dizer que números que tenham crescimento exponencial, ou que sejam derivados da multiplicação de outros números, tenderiam à lei de Benford – e isto abrange muitos dados econômicos.

Além da Lei de Benford, temos falado bastante sobre o R por aqui. Então, que tal unirmos as duas coisas? Bem, em alguns dias, com o pacote benford.analysis, você poderá analisar facilmente e rapidamente (espero!) seus dados contra a lei de Benford para identificar possíveis erros.

A idéia do pacote é tornar a análise algo rápido e simples. Por exemplo, o gráfico abaixo é gerado com apenas dois comandos: bfd <- benford(dados) e plot(bfd).

Plot BenfordVamos ver se vai ficar bacana.

Atualização: a versão 0.1 está no CRAN.

Erro de medida, Precificação de ativos e Prêmio Nobel


Entrevista com Larry Cahoon, estatístico do Censo norte-americano. Destaco a passagem abaixo, em que ele ressalta a importância de se saber sobre a variabilidade de uma estimativa, algo tão ou mais crítico do que saber a própria estimativa. Isto está em linha com o que discutimos acerca da acurácia das variáveis econômicas, aqui, aqui e aqui.

To do good statistics, knowledge of the subject matter it is being applied to is critical. I also learned early on that issues of variance and bias in any estimate are actually more important than the estimate itself. If I don’t know things like the variability inherent in an estimate and the bias issues in that estimate, then I really don’t know very much.

A favorite saying among the statisticians at the Census Bureau where I worked is that the biases are almost always greater than the sampling error. So my first goal is always to understand the data source, the data quality and what it actually measures.

But, I also still have to make decisions based on the data I have. The real question then becomes given the estimate on hand, what I know about the variance of that estimate, and the biases in that estimate, what decision am I going to make.

Se você não tinha seguido a recomendação de acompanhar o blog do Damodaran, seguem alguns posts interessantes que você perdeu:

- Chill, dude: Debt Default  Drama Queens

- When the pieces add-up too much: Micro Dreams and Macro Delusions;

- Twitter announces the IPO: Pricing Games Begins, The Valuation, Why a good trade be a bad investment (or vice-versa).

Sobre o prêmio Nobel, saiu tanta coisa na internet que inclusive descobri muitos detalhes interessantes dos trabalhos dos três ganhadores que sequer imaginava. Deixo aqui, para quem ainda não leu, os materiais do Marginal Revolution e do Cochrane.

Precificação de ativos: blog do Damodaran


Há algum tempo que queria divulgar aqui o blog do Aswath Damodaran, autor bastante conhecido de finanças corporativas e precificação de ativos. O blog não é atualizado constantemente (às vezes, até que isso é bom) e lá ele compartilha avaliações de algumas empresas como, recentemente, a Apple, e – que virão futuramente – Linkedin, Amazon e Netflix. Um ponto bastante positivo do blog são análises e textos bem sinceros e didáticos,  ressaltando as premissas para se chegar ao valor calculado e a incerteza inerente ao processo. Não deixe de adicionar o blog no seu Feedly.

É hora de comprar ouro?


O texto de Jonas Faga Jr, recomendando a compra de ouro como um seguro, tem alguns pontos dos quais discordo e tenho discutido isso com alguns economistas. Para consolidar a discussão em um local só, seguem neste post alguns questionamentos. Jonas sugere que: (i) apesar de o preço do ouro flutuar no curto prazo, o metal mantém seu poder de compra no longo prazo; (ii) consequentemente, ele é um hedge para a inflação no longo prazo; e, por fim, (iii) o ouro seria um seguro contra catástrofes financeiras.

Os pontos (i) e (ii), a rigor, não me parecem verdade, pelo menos não para o que muita gente consideraria longo prazo. Como ilustração, basta um contra-exemplo: o período de 20 anos, entre 1980 e 1999, em que o preço do ouro, em dólar, despencou em termos reais (considerando a inflação).

Preço médio do Ouro a dólares constantes de 2009

Ouro 1980 1999

No blog Marginal Revolution, Tyler Cowen traz para discussão o trabalho Erb e Harvey que, dentre outras coisas, aponta justamente esta falta de correlação entre inflação e retorno do ouro em, pelo menos, períodos tão longos quanto 20 anos.

O ponto (iii), por sua vez, pode ser verdade, mas não deixa de ser especulação. Como se sabe, o ouro, historicamente, foi utilizado como moeda-mercadoria; e, como moeda, o ouro tem um menor risco de contra-parte, intrínseco a moedas fiduciárias. Deste modo, por exemplo, em um caso de catástrofe generalizada, seguida de falências de bancos e drástica perda de credibilidade das moedas fiduciárias, poderia ser que o ouro voltasse a exercer esta função em escala global. A demanda por ouro cresceria em magnitudes sem precedentes e, consequentemente, os ganhos da aplicação em ouro poderiam compensar, em alguma medida, as perdas dos outros ativos. Mas crises podem ocorrer de diversas formas. É possível imaginar diversos cenários em que o preço do ouro cairia mesmo em meio a uma crise financeira, como, por exemplo, em uma situação com a estagnação de grandes países emergentes (como a China) ou países em situação de crise fiscal, juntamente com a venda de ouro por parte desses bancos centrais.

Tendo isto em vista, você deve ou não comprar ouro como um seguro de longo prazo? A resposta depende de quais cenários futuros são mais plausíveis. E qual cenário, dentre todos, é mais plausível? Não sei. Mas é preciso estar claro que o ouro não é especial e tampouco é um seguro no sentido usual do termo. Você pode tanto ganhar quanto perder muito dinheiro, mesmo no longo prazo. Veja, não estou dizendo que seja uma má ideia comprar ouro agora, ou que diversificar seu portfólio seja ruim. Apenas enfatizo que, para você saber se deve ou não comprar ouro, seja com o horizonte de curto prazo, como 1 ano, ou mesmo com o horizonte de longo prazo, como 20 anos, você ainda tem de prever a evolução da oferta e da demanda pelo metal, da mesma forma que você faria para qualquer outro ativo.

PS: além do Marginal Revolution, a recente queda do preço do ouro tem tido repercussão em outros blogs como no EconBrowser e no Economist’s View.

Como as palavras podem ajudar o economista.


Apesar de importante, não, não estou falando de escrever bem em economia ou de entender da retórica que os economistas usam, como diria McCloskey. Palavras podem ajudar os economistas também de outra forma: como proxies para outras variáveis, aumentando amostras que, muitas vezes, estão disponíveis apenas para um período muito curto de tempo. Foi isso o que apresentou Alan Moreira, em seu working paper com Asaf Manela na SBE 2012.

Existe uma literatura que estuda os riscos de desastre raros percebidos pelos agentes e seus efeitos no mercado acionário. Uma possível medida de “risco” percebido pelos agentes é a volatilidade implícita por opções (VIX), entretanto disponível apenas desde 1986. Já o Wall Strett Journal (WSJ) existe desde 1889. Assim, os autores utilizaram as palavras constantes na capa do WSJ para prever o VIX .  Se palavras chaves utilizadas na capa do jornal servirem de fato para prever satisfatoriamente o risco percebido pelos agentes, é possível utilizá-las como proxy para períodos anteriores e ganhar quase um século de observações!

Os autores treinam o modelo em uma subamostra e testam seus resultados na restante, encontrando um ajuste considerado, por eles, satisfatório. No exercício de previsão fora da amostra, os autores verificaram se os picos de risco estimados correspondiam a fatos relevantes que os justificariam, retratados nos jornais. A impressão dos autores foi  a de que o modelo funciona bem  (o problema que vi nesta abordagem é uma exposição muito grande ao viés de confirmação. Pois, uma vez que você viu que sua estimativa é a de um risco alto, você, com alguma persistência, irá eventualmente achar algum fato histórico que justifique, ou racionalize, a posteriori sua estimativa).

Com uma amostra maior em mãos – e supondo que a medida seja boa – o paper estima com maior liberdade os impactos do risco percebido de desastres no mercado acionário: chega a estimativas com magnitudes plausíveis, segundo a literatura da área, sobre os efeitos do risco no retorno das ações e na probabilidade de um desastre e também sugere  que a persistência de choques seja menor do que anteriormente imaginada.

Mesmo com todas as possíveis limitações do método,  a “regressão de texto” proposta parece muito interessante e vale à pena conferir.