Denúncia! Peguei os dados do TSE e verifiquei que, de fato, há violações imensas da Lei de Benford. No RJ, BA, AL, PI, SE, MA, SP, DF, MG, PE, PB, PR, RN, RN, SC, CE, GO, ES e MT , a distribuição observada difere do esperado pela lei (ver o código e resultados no fim do post). Em 19 dos 27 estados brasileiros, a distribuição se afasta significativamente da esperada pela tal Lei.
É hora de chamar os militares? Xandão? Tribunal de Haia? o Síndico? Tim Maia?
Que nada. Eu testei a validade da lei de Benford para os dados do número de eleitores em cada zona. Ou seja, nem olhei para os dados dos votos no Lula ou no Bolsonaro. Analisei apenas o número de registrados por zona eleitoral no TSE.
Para começo de conversa: a Lei de Benford funciona bem quando há valores de ordem de grandeza distintas, geralmente naquelas distribuições com caudas longas (eg dados de renda ou a população dos municípios brasileiros).
A distribuição do número de eleitores nas zonas eleitorais não cumpre esse requisito. Sei lá qual é o critério do TSE e dos TREs , mas imagino que evitem zonas eleitorais com poucos registrados e outras com milhões. No RJ, por exemplo, a menor zona eleitoral tem 11.091 e a maior, 148.836 pessoas.
Logo, faz sentido que a Lei de Benford seja inválida para candidatos específicos quando, por natureza, o máximo de votos que podem ter por zona não segue a mesma Lei. Em outras palavras: é tolice testar a lei de Benford dos votos nos candidatos por zonas eleitorais sem verificar antes se a lei se aplica na distribuição do número de eleitores nelas registrados.
Quem fez isso (ou caiu no papo) deveria esfriar a cabeça antes de sair gritando “fraude”.
Aprendi sobre a aplicação da Lei de Benford a dados eleitorais neste antigo post do grande Carlos Cinelli, criador do pacote benford.analysis e hoje professor da Washington University: “Indício de fraude nas eleições? Usando a Lei de Benford.” É um post super didático em que ele explica a razão pela qual os votos na Dilma por município, em vários estados, também violavam a Lei de Benford.
Se você quiser repetir a análise apressada que fiz para o primeiro parágrafo:
1- Baixe o csv aqui:
https://www.tse.jus.br/eleitor/estatisticas-de-eleitorado/consulta-por-zona
2- Rode o código abaixo, totalmente roubado adaptado do post do Cinelli.
library(benford.analysis)
library(janitor)
library(readr)
library(tidyverse)
#### leitura e limpeza ###
# mude aqui o diretorio e configuracoes
eleitorado <- read_delim("~/Downloads/quantidade_de_eleitores_por_município-região_-_zona.csv",delim = ";", escape_double = FALSE, locale = locale(decimal_mark = ",", grouping_mark = ".", encoding = "ISO-8859-1"),trim_ws = TRUE) %>% clean_names() %>% drop_na(percent) %>% select(uf, quantidade) #
#### Benford por UF ####
split_eleitorado_uf <- split(eleitorado, eleitorado$uf)
# benford do eleitorado
bfd_eleitorado_uf <- lapply(split_eleitorado_uf, function(x) benford(x$quantidade, number.of.digits=1))
chi_eleitorado_uf_p_value <- sapply(bfd_eleitorado_uf, function(x) chisq(x)$p.value)
sort(chi_eleitorado_uf_p_value)
Os p-valores do teste chi-quadrado são:
RJ.X-squared BA.X-squared AL.X-squared
0.0000000000000164726 0.0000000000021069357 0.0000000998997944365
PI.X-squared SE.X-squared MA.X-squared
0.0000005097646481198 0.0000038094904055176 0.0000068633028237855
SP.X-squared DF.X-squared MG.X-squared
0.0000204896443337369 0.0000283585477052459 0.0000642398782192803
PE.X-squared PB.X-squared PR.X-squared
0.0002092291348825649 0.0002728310830942907 0.0010331869626956432
RN.X-squared SC.X-squared CE.X-squared
0.0013654544125950860 0.0029340565763218735 0.0029812460044103773
GO.X-squared ES.X-squared MT.X-squared
0.0100618247885115412 0.0389328977671916932 0.0452521173792202192
AM.X-squared ZZ.X-squared TO.X-squared
0.0544456934697274408 0.0834160744199289733 0.1234954740363761599
RO.X-squared MS.X-squared RR.X-squared
0.1266279560531007597 0.1639421881389058200 0.2802137291047622769
PA.X-squared RS.X-squared AP.X-squared
0.3883007403132836544 0.4148424217945907433 0.5381632874665044364
AC.X-squared
0.5707375940685510685