Excel, csv e C++ no R. Livro do Alvin Roth, Nova biografia de Steve Jobs. PCO e liberdade de expressão.


Alguns links interessantes:

R

O pessoal do RStudio não para de trabalhar:

Novo pacote (readr) para ler arquivos de texto (csv e similares) no R;

Novo pacote (readxl) para ler arquivos do Excel no R;

Novo pacote (dygraphs) para fazer gráficos interativos de séries temporais no R usando JavaScript; e

O novo RStudio está ficando cada vez mais poderoso: agora tem uma série de recursos novos para C++ como code completion, diagnóstico de sintaxe e source interativo.

Livros

– O Nobel Alvin Roth irá lançar um novo livro para o público geral: Who Gets What — and Why: The New Economics of Matchmaking and Market Design. O livro está em pré-venda, previsto para sair em junho.

– Nova biografia de Steve Jobs está tendo uma boa repercussão no público e na crítica: Becoming Steve Jobs: The Evolution of a Reckless Upstart into a Visionary Leader.

Para finalizar

– Ainda estou na dúvida se é sério, mas o PCO tem um texto  – aparentemente de verdade – defendendo a liberdade de expressão:

Levy Fidelix é um político de direita e inimigo da luta dos homossexuais, e seu discurso foi um ataque direito aos direitos democráticos, mas a condenação dele não é uma vitória da luta pelas liberdades democráticas (…) A multa de um milhão de reais como penalidade para um candidato expressar a sua opinião política em um debate de campanha eleitoral é uma gravíssimo precedente contra a já limitada possibilidade de livre expressão. A crença de que a justiça está do lado do progresso social e da democracia e, por este motivo, podemos dar a ela poderes discricionários, é não só equivocada, como é uma completa cegueira política (…) Nessas condições, é uma política suicida, já não digamos deixar de denunciar estes abusos, mas principalmente aplaudi-los e confundir a consciência das massas, chamando-as apoiar medidas antidemocráticas apenas porque atingem este ou aquele elemento reacionário. (…) A liberdade de expressão, completa e irrestrita, é uma condição sine qua non para a existência das outras liberdades democráticas, ela é uma liberdade que engloba toda a sociedade e que precede todas as liberdades individuais. (…) Existe uma crescente campanha para solidificar o “crime de opinião” o crime onde você pensa algo que alguns não gostaram e naturalmente você é culpado, onde a sua liberdade está reboque da opinião pública, e se sua opinião tem de ter “selo de aprovação” da opinião pública formada pelos monopólios de comunicação e pela burguesia, a opinião própria já está proibida.

 

Competições de análise de dados: BoE e Kaggle


Quer mostrar suas habilidades de visualização de dados ou previsão? Seguem dois links:

Uma competição de visualização do Bank of England. Na verdade, a primeira competição deste tipo que o BoE lança. O prazo final é primeiro de maio. A final da competição ocorrerá em Londres e o BoE não pagará passagens para os finalistas (mas, se eu fosse você, tentaria chegar na final antes de decidir se isso será um problema). O prêmio é de 5.000 libras (mais de R$ 20.0000).

– Um site sobre o qual sempre quis falar mais detalhadamente por aqui, mas ainda não tive tempo, é o Kaggle. Resumidamente,  o Kaggle é um site de competições de modelagem preditiva em que as empresas colocam os problemas que gostariam de  solucionar (juntamente com um prêmio) e analistas de todo o mundo competem para produzir os melhores modelos. Atualmente há dois grandes prêmios sendo disputados:

  1. US$ 100.000,00 para quem criar o melhor modelo preditivo para sinais de retinopatia diabética com imagens do olho.
  2. US$ 30.000,00 para quem criar o melhor modelo preditivo para faturamento de restaurantes.

Além de outros prêmios de menor montante. Não somente isso, participantes do Kaggle que conseguem boas classificações também conseguem, em geral, bons empregos na área.

 

 

 

Statistics – Apple Style


Sobre a taxa de adoção do novo sistema operacional iOS 8, a Apple divulgou o seguinte gráfico de pizza. Com 101%, até que não está tão ruim quanto o da Fox News.

chart-01-05-15_2xMas falando em gráficos de pizza, a Apple bem que poderia ter adotado as diretrizes abaixo para melhorá-lo:

devourThePie3Este último gif é via Urban Demographics.

 

 

Erro de medida, preços de imóveis e growth regressions.


Em post passado falamos de erro de medida com o cartoon do Calvin. Hoje, enquanto mexia numa base de dados de imóveis de Brasília para passar algumas consultas para um amigo,  pensei em voltar no assunto. Dados de oferta de imóveis podem fornecer uma ilustração simples e fácil do problema.

Preços declarados online variam desde 1 centavo até R$ 950 milhões. Tamanhos declarados online vão desde 0.01 metro quadrado até 880 mil metros quadrados. Em outras palavras, o erro de medida pode ser grande. E, neste caso,  felizmente, isso é fácil de perceber, pois todos nós temos alguma noção do que são valores razoáveis. Não existe apartamento de 0.01 metro quadrado.

Como isso afeta modelos usuais, tais como uma regressão linear?

Resumidamente: bastam alguns pontos extremos para atrapalhar muito. A regressão linear é extremamente sensível a outliers e erros de observação. 

Para ilustrar, façamos a regressão de preços de venda de apartamento contra a metragem do imóvel, nos dados brutos, sem qualquer tratamento. Temos 13.200 observações. A equação resultante foi:

preço = 1.770.902,90  + 2,68 m2

Isto é, segundo a estimativa, cada metro quadrado a mais no imóvel aumentaria seu preço, em média, em R$ 2,68. Não é preciso ser um especialista da área para ver que resultado é patentemente absurdo.

E o que acontece com a estimativa se limparmos a base de dados? Tirando apenas 200 observações das 13.200 (1,5% dos dados), obtemos a seguinte equação:

preço = -45.500,44 + 9.989,81 * m2

Agora, cada metro quadrado a mais está associado a um aumento de R$9.989,81 nos preços, em média – de acordo com o senso comum (infelizmente) para a cidade de Brasília. Ou seja, com a regressão sem tratamento dos dados, você subestimaria o efeito em nada menos do que 3 mil e 700 vezes.

***

O caso anterior é fácil de identificar, mas no dia a dia nem sempre isso ocorre. E é comum tomar dados oficiais por seu valor de face.

Quer um exemplo?

A Penn World Tables, na versão 6.1, publicou uma queda de 36% no PIB da Tanzânia em 1988. Isso levou Durlauf e outros autores a colocarem em seu texto, Growth Econometrics, o “caso” da Tanzânia como um dos top 10 de queda do produto (vide tabela 8). Entretanto, na versão 7.1 da Penn Tables,  os dados mostram um crescimento de 8% para Tanzânia, para o mesmo ano! Se um dado como esse já pode ser muito enganoso apenas como estatística descritiva,  imagine o efeito em growth regressions com regressões lineares e variáveis instrumentais.

PS1: o legal é que o próprio texto do Durlauf tem uma seção bacana sobre erro de medida!

PS2: Sobre dados de PIB da África,  livro recente do Jerven, Poor Numbers, discute muitos desses problemas.

O que é overfitting, desenhado!


Nessas eleições, muitos louvaram o Rio Grande do Sul por nunca reeleger um governador por um segundo mandato. Várias explicações sociológicas foram dadas para o comportamento.   Entretanto, antes de inferir alguma coisa mais essencial deste padrão, vale a pena dar uma olhada nesta tirinha do xkcd para renovar o ceticismo:

13vdbE aguardemos por um N maior!

Via uma resposta do Cross Validated.

 

Links diversos: Discriminação de preços em passagens, vídeo Piketty na USP e replicação dos códigos dos artigos.


Seguem alguns links interessantes da semana:

– Vai comprar passagens? Então não busque somente no “site em português” da companhia aérea, mas também nas versões estrangeiras. Algumas vezes o preço pode ser mais barato, bem mais barato.  Para verificar se isso ocorre por aqui, simulei hoje uma passagem Brasília – Vitória para a virada do ano, tanto na versão em português quanto na versão em inglês do site da TAM. Resultado: no site em inglês a passagem está quase R$1.000,00 mais cara. Neste caso, o gringo que estiver no Brasil pode economizar bastante apenas mudando a linguagem da página, mas já houve relatos de o inverso acontecer (a passagem no site em inglês estar mais barata).

– Lembra que o Piketty estava pelo Brasil? Pois bem, para quem não conseguiu estar presente, agora o  vídeo do debate que ocorreu na USP, com André Lara Resende e Paulo Guedes, está disponível (via Prosa Econômica).

–  Desde 2005, o Quarterly Journal of Political Science solicita aos autores os dados e códigos necessários para a replicação de seus papers. Com isso, o periódico faz uma revisão bem básica: apenas roda o que foi enviado pelos autores – as is – e verifica se os resultados são os mesmos apresentados pelo artigo. Este processo simples tem valido a pena? Segundo Nicholas Eubank, sim:

Experience has shown the answer is an unambiguous “yes.” Of the 24 empirical papers subject to in-house replication review since September 2012, [1] only 4 packages required no modifications. Of the remaining 20 papers, 13 had code that would not execute without errors, 8 failed to include code for results that appeared in the paper, [2] and 7 failed to include installation directions for software dependencies. Most troubling, however, 13 (54 percent) had results in the paper that differed from those generated by the author’s own code. Some of these issues were relatively small — likely arising from rounding errors during transcription — but in other cases they involved incorrectly signed or mis-labeled regression coefficients, large errors in observation counts, and incorrect summary statistics. Frequently, these discrepancies required changes to full columns or tables of results. Moreover, Zachary Peskowitz, who served as the QJPS replication assistant from 2010 to 2012, reports similar levels of replication errors during his tenure as well. The extent of the issues — which occurred despite authors having been informed their packages would be subject to review — points to the necessity of this type of in-house interrogation of code prior to paper publication.

Fica a pergunta: quantos journals brasileiros fazem isso?

(via Dave Giles)

O Estatístico Automático – patrocínio do Google e Séries Temporais


Vai fazer análise de séries temporais? Agora você também pode testá-las no Estatístico Automático. Dê uma olhada nos exemplos, são bem interessantes.   E parece que o projeto está caminhando, o Google resolveu investir na iniciativa.

Links diversos: o Estatístico Automático e um pouco de história do R.


Seguem alguns links interessantes:

1. Andrew Gelman comentou sobre o estatístico automático e resolvi testar. Como ainda é um protótipo, por enquanto o site só trabalha com modelos lineares. O que o algoritmo tentará fazer? O seguinte:

 (…)  the automatic statistician will attempt to describe the final column of your data in terms of the rest of the data. After constructing a model of your data, it will then attempt to falsify its claims to see if there is any aspect of the data that has not been well captured by its model.

Testei com os dados dos votos municipais na Dilma vs variáveis socio-econômicas dos municípios (primeiro turno). Veja aqui os resultados.

2. Ok, este link só vai ser interessante se você tiver um pouco de curiosidade sobre o R. Rasmus Baath comprou os livros das antigas versões do S (a linguagem que deu origem ao R) e ressaltou alguns pontos interessantes sobre o desenvolvimento da linguagem ao longo do tempo.

Indício de fraude nas eleições? Usando a Lei de Benford.


Compartilharam, recentemente, uma análise das eleições presidenciais utilizando a lei de Benford. Para quem não conhece, a lei de Benford é bastante utilizada na detecção de fraudes em uma gama de circunstâncias, como demonstrações contábeis e, inclusive, eleições. Para entender um pouco mais sobre o assunto, leia aqui (Lei de Benford), aqui (Lei de Benford – por que ela surge?) ou aqui (benford.analysis 0.1).

A análise tomou os votos da Dilma por município e extraiu os primeiros dígitos das observações. Por exemplo, se em um dado município foram contabilizados 1.529 votos para a candidata, o primeiro dígito é 1. Já se o número tivesse sido 987, o primeiro dígito é 9. Segundo a lei de Benford, deveríamos observar cerca de 30,1% dos municípios começando com o dígito 1; em seguida, 17,6% dos municípios com a totalização dos votos iniciada pelo número 2. E assim sucessivamente, como no gráfico a seguir:

benford_1_d

Se os números observados diferirem substancialmente do que é previsto pela lei, isso poderia ser um indício de manipulação dos dados ou de algum outro fato atípico. Mas, seria pertinente utilizar este instrumento para analisar fraudes em votos municipais? Para responder a essa pergunta, devemos responder, na verdade, outra: estes dados tenderiam a ter uma distribuição de Benford?

Em uma primeira aproximação, a resposta é sim. Dados de população municipal tendem a seguir a lei de Benford. Veja, por exemplo, a distribuição dos primeiros dígitos dos dados de população por município, no Brasil (estou utilizando o pacote de R benford.analysis; o gráfico em que você tem que prestar mais atenção é o primeiro, em que a linha pontilhada vermelha é o valor previsto e a barra azul é o valor observado):

pop_1_d

Ora, e como a população define o eleitorado, também é de se esperar que a lei tenda a aparecer nos números de eleitores. E, de fato, aparece:

eleitorado_1_D

E, por fim, como o eleitorado define o número de votos dos candidatos, também é natural se esperar que a distribuição apareça nesta situação. Em todos os casos vale lembrar que a lei de Benford nunca valerá exatamente, será apenas uma aproximação –  testes estatísticos formais tem que ser interpretados com cautela e não são muito úteis, a principal função da lei é identificar possíveis focos de observações que mereçam análise/auditoria mais aprofundada.

Voltando, portanto, à análise mencionada anteriormente, foram calculados os desvios dos valores observados em relação aos valores esperados e, com isso, a estatística de chi-quadrado. Mas isso foi feito para cada estado da federação:

Captura de Tela 2014-11-02 às 13.00.02

Note que alguns estados em que Dilma ganhou com bastante diferença como BA, PE ou PI tem grande  discrepância em relação ao esperado pela lei, e isso causou certa estranheza. Por que logo estes estados?

Contudo, ocorre que, apesar de a distribuição do número de eleitores (ou da população) por municípios ter um bom ajuste quando usamos os dados do Brasil inteiro, isso não precisa valer para cada estado separadamente. E de fato não vale. Para deixar mais claro, vejamos, abaixo, o grau de ajuste do número de eleitores e da população para cada estado separadamente, e comparemos isso com o ajuste do número de votos:

Captura de Tela 2014-11-02 às 13.45.53

Note que a Bahia tem um chi-quadrado alto para o número de votos (72.725), mas também já tinha esse valor alto para o número de eleitores (68.988) e população (60.712). Observa-se a mesma coisa com MG, PE, PI e RS, por exemplo. Na verdade, a correlação dessas três séries é bem alta. A correlação entre o Qui-Quadrado do número de votos e o Qui-Quadrado do Número de Eleitores é de 0.968.

Captura de Tela 2014-11-02 às 13.53.24

Deste modo, para o caso em questão,  as grandes discrepâncias entre a lei de Benford e o número de votos em alguns estados parecem decorrer, em grande medida, do próprio desvio já presente nas distribuições da população e do eleitorado.

Há mais coisas que podem ser investigadas nos dados, e acho que esse é um bom exemplo para explorar a lei de Benford na prática. Por exemplo, a lei de Benford não estipula somente uma distribuição para o primeiro dígito, mas sim para todos os dígitos significativos, então você poderia analisar os dois primeiros dígitos (dada a quantidade de observações, não acredito que dê para analisar os três primeiros). Ou, ainda, verificar se a divisão por regiões mais amplas do país tenderiam a seguir a lei para o eleitorado (e para o número de votos).

Para replicar os cálculos acima, você pode utilizar estes dados aqui (link) e o script de R a seguir:


# instale o pacote e carregue os dados
install.packages("benford.analysis")
library(benford.analysis)
load("benford_eleicoes.rda")

#### Geral ####
bfd_votos <- benford(votos_dilma$votos, number.of.digits=1)
plot(bfd_votos)

bfd_pop <- benford(dados_pop$pop, number.of.digits=1)
plot(bfd_pop)

bfd_eleitorado <- benford(eleitorado$eleitores, number.of.digits=1)
plot(bfd_eleitorado)

#### Por Estado ####
# separando os dados
split_votos_uf <- split(votos_dilma, votos_dilma$uf)
split_pop_uf <- split(dados_pop, dados_pop$uf)
split_eleitorado_uf <- split(eleitorado, eleitorado$uf)

# benford dos votos
bfd_votos_uf <- lapply(split_votos_uf, function(x) benford(x$votos, number.of.digits=1))
chi_votos_uf <- sapply(bfd_votos_uf, function(x) chisq(x)$stat)
chi_votos_uf

# plote um estado de exemplo
plot(bfd_votos_uf[["BA"]])

# benford da população
bfd_pop_uf <- lapply(split_pop_uf, function(x) benford(x$pop, number.of.digits=1))
chi_pop_uf <- sapply(bfd_pop_uf, function(x) chisq(x)$stat)
chi_pop_uf

# plote um estado de exemplo
plot(bfd_pop_uf[["BA"]])

# benford do eleitorado
bfd_eleitorado_uf <- lapply(split_eleitorado_uf, function(x) benford(x$eleitores, number.of.digits=1))
chi_eleitorado_uf <- sapply(bfd_eleitorado_uf, function(x) chisq(x)$stat)
chi_eleitorado_uf

# plote um estado de exemplo
plot(bfd_eleitorado_uf[["BA"]])

# comparando as estatísticas chi-quadrado
compara <- data.frame( Chi_Quadrado_Votos = chi_votos_uf,
                       Chi_Quadrado_Número_de_Eleitores = chi_eleitorado_uf,
                       Chi_Quadrado_População = chi_pop_uf)
row.names(compara) <- gsub("([A-Z]{2}).*", "\\1", row.names(compara))
compara

# correlações
cor(compara)

Para quem foram os votos da Marina?


A pergunta que queria fazer era: quantos votos da Marina foram para Aécio ou para Dilma? Para responder isso, precisaria de alguns dados que não tenho e não vou ter tempo de buscar (e que talvez nem estejam disponíveis).

Mas, na verdade, vou fazer outras perguntas simples que talvez sejam tão interessantes quanto e, provavelmente, sejam uma aproximação razoável:  (i) Os votos válidos para Marina explicam de maneira diferente a variação dos votos válidos para Aécio ou para Dilma? (ii) Isso variou entre os estados da federação?

Resumindo, as respostas são:

(i) sim, cada 1 ponto percentual de voto para Marina no primeiro turno previu, na média, 0.56 pp a mais para Aécio e 0.44 pp a mais para Dilma; e,

(ii) sim, a relação foi diferente para cada estado. Entre alguns exemplos, temos que em São Paulo, Rio Grande do Sul e Alagoas a relação pareceu mais pró Aécio;  já em Minas Gerais e Bahia os votos em Marina explicaram pouco da variação. E em Pernambuco ou na Paraíba houve uma ligeira “conversão” pró Dilma.

***

A regressão geral.

Dependent variable:
Variação Aécio Variação Dilma
(1) (2)
Votos Marina (1 turno) 0.558*** 0.442***
(0.005) (0.005)
Constant 1.287*** -1.287***
(0.076) (0.076)
Observations 5,152 5,152
R2 0.732 0.631
Adjusted R2 0.732 0.631
Residual Std. Error (df = 5150) 2.987 2.987
F Statistic (df = 1; 5150) 14,087.540*** 8,817.183***
Note: *p<0.1; **p<0.05; ***p<0.01

E os gráficos gerais e por UF (no gráfico temos o “excesso” de votos recebidos além do que seria esperado se os votos válidos de Marina tivessem sido distribuídos 50-50).

Aécio (Geral)

Aecio_Marina

Aécio (Por UF)

estados_a_m

Dilma (Geral)

Dilma_Marina

Dilma (Por UF)

estados_d_m