Fundamentação técnica
Como estimamos para onde foi cada voto
Esta página descreve, do dado bruto ao número final, como o estudo foi feito. Tudo usa apenas dados públicos do Tribunal Superior Eleitoral (TSE) e pode ser refeito com os scripts listados no fim.
1A pergunta
Queremos saber como os eleitores de cada candidato a presidente no 1º turno (4/10/2026) se comportaram no 2º turno (25/10/2026): votaram em Lula, em Flávio, em branco, anularam ou deixaram de votar. O modelo estima todos os grupos ao mesmo tempo, com o mesmo método para cada um.
O voto é secreto: não existe dado que ligue o voto de uma pessoa nos dois turnos. O que existe é o resultado de cada urna nos dois turnos. A técnica que extrai comportamento de grupos a partir de resultados agregados chama-se inferência ecológica.
2Os dados
1º turno — boletins de urna
Arquivos bweb_1t_<UF>.zip do Portal de Dados Abertos do TSE (conjunto Resultados 2026 – Boletim de Urna), com integridade verificada pelo hash SHA-512 publicado junto. De cada urna usamos, para o cargo de Presidente: eleitores aptos, comparecimento e votos por candidato, brancos e nulos.
2º turno — Registro Digital do Voto (RDV)
Os boletins do 2º turno ainda não estavam no portal de dados abertos quando o estudo foi feito. Usamos então o RDV de cada urna, publicado em resultados.tse.jus.br/oficial/ele2026/arquivo-urna/3221/. O RDV registra cada voto individualmente, embaralhado e sem identificação do eleitor. Ele traz uma informação que o boletim não tem: o número digitado em cada voto nulo.
Cobertura
- 517.179 seções listadas pelo TSE; 17.931 são agregadas (votam na urna de outra seção) e já estão contidas no RDV da seção principal.
- 499.206 RDVs baixados. Ficaram sem RDV 41 seções do exterior marcadas como “não instaladas” (sem votos) e 1 seção do Ceará apurada fora da urna eletrônica (211 votos nominais e 4 nulos).
- O pareamento 1º × 2º turno encontrou — urnas. Descartamos — em que o comparecimento do 2º turno superou os aptos do 1º (sinal de mudança na agregação de seções entre os turnos). Restaram — urnas.
3Lendo o RDV
O RDV é um arquivo binário em ASN.1 codificado em DER. Escrevemos um decodificador genérico, que não depende da especificação formal do TSE. Cada voto aparece como uma sequência de dois campos:
SEQUENCE {
tipoVoto ENUMERATED -- 2 nominal · 3 branco · 4 nulo com dígitos · 6 nulo sem dígitos
digitacao NumericString -- o número digitado (ausente em branco e no tipo 6)
}
Os votos vêm agrupados por cargo (campo [1]: 1 = Presidente, 3 = Governador, 11 = Prefeito em eleição suplementar) ou por questão de consulta popular (campo [2], usado em MT e PR).
Como sabemos que a leitura está certa
Os códigos foram deduzidos comparando o RDV com o boletim de urna da mesma seção e depois validados contra o resultado oficial de cada estado. Em 33 das 34 combinações UF × cargo (Presidente e Governador) os totais de votos nominais, brancos e nulos são idênticos aos oficiais. A única diferença, no Ceará, é exatamente a seção sem RDV.
4Tabelas por urna
Para cada urna i montamos dois vetores, ambos medidos em eleitores do mesmo cadastro (os aptos do 1º turno, Ni):
| 1º turno — origem (9 grupos) | 2º turno — destino (6 grupos) |
|---|---|
| Flávio (22), Lula (13), Renan (14), Cury (70), Caiado (55) | Lula (13), Flávio (22) |
| Outros (10 candidatos, 592 mil votos somados) | Branco |
| Branco, Nulo | Nulo digitando 14 · Outros nulos |
| Abstenção = aptos − comparecimento | Abstenção = aptos − votos no 2º turno |
Separar o nulo digitando 14 no 2º turno (14 era o número de Renan Santos, eliminado no 1º turno) dá ao modelo um destino com origem quase conhecida, o que serve de teste (seção 8).
5O modelo
Usamos a regressão ecológica de Goodman com restrições. A ideia: se em uma urna há muito eleitor de um candidato eliminado e, no 2º turno, essa urna deu mais voto a um dos finalistas do que urnas parecidas com pouco eleitor daquele candidato, isso é evidência de que esses eleitores foram para aquele finalista. Formalmente, para cada urna:
A linha k de B é a distribuição do grupo k no 2º turno. Por isso impomos:
e estimamos B por mínimos quadrados ponderados pelo eleitorado de cada urna:
O problema é convexo (quadrático com restrições lineares) e foi resolvido pelo método SLSQP (scipy.optimize), usando apenas as matrizes de momentos X′WX (9 × 9) e X′WY (9 × 6), o que torna cada ajuste muito rápido. Os momentos são normalizados antes da otimização — sem isso, a escala de milhões de eleitores fazia o otimizador parar longe do ótimo, um problema que detectamos e corrigimos durante o estudo.
A hipótese central é que, dentro do recorte ajustado, a taxa de transferência de cada grupo é aproximadamente a mesma em todas as urnas. É por isso que o recorte territorial importa.
6Recorte territorial
O comportamento do eleitor de um mesmo candidato em Porto Alegre não precisa ser igual ao de Salvador. Ajustamos o modelo em dois recortes:
- Estadual: uma matriz B por UF, com todas as urnas do estado.
- Municipal: uma matriz B por município com pelo menos 30 urnas; municípios menores usam a matriz do seu estado. O resultado do estado (e do Brasil) é a soma, município a município, de votos do grupo no 1º turno × taxa do município.
A estimativa municipal é a principal no site, porque deixa a taxa variar no território e reduz o viés de agregação. A estadual aparece como comparação: quando as duas concordam, o resultado é mais confiável; quando divergem, a incerteza real é maior do que o intervalo estatístico sugere.
7Margem de erro
Os intervalos de 95% vêm de um bootstrap por local de votação: em cada UF sorteamos, com reposição, os locais de votação (escolas, por exemplo), refazemos o ajuste estadual e repetimos 200 vezes. O intervalo é formado pelos percentis 2,5% e 97,5% das réplicas. Reamostrar locais, e não urnas soltas, respeita o fato de que urnas de uma mesma escola se parecem entre si.
O intervalo mede a incerteza estatística do ajuste estadual. Ele não captura erros de especificação do modelo (seção 10), que costumam ser maiores para grupos pequenos.
Neste estudo isso aparece com clareza nos grupos menores e mais espalhados (Renan, Outros e, em menor grau, Branco): o intervalo estadual é estreito, com cerca de um ponto percentual, mas a estimativa municipal fica fora dele. No caso de Renan, chega a inverter a ordem entre Lula e Flávio. O site marca como estimativa instável todo grupo em que as duas estimativas diferem 5 pontos percentuais ou mais em algum destino. A distância entre as duas estimativas é a melhor medida da incerteza real — maior que o intervalo estatístico. Por isso o site mostra sempre as duas.
8Checagens
- Fidelidade dos grandes grupos: o modelo deve dizer que a imensa maioria de quem votou em Lula ou Flávio no 1º turno repetiu o voto no 2º. Os valores estão na página de resultados.
- Nulo digitando 14: quem digita 14 no 2º turno muito provavelmente votou em Renan no 1º. Se o modelo atribuísse esses votos a outros grupos, haveria problema de identificação.
- Ajuste: o R² de cada destino, por UF, está nos arquivos de saída.
9O simulador
O simulador parte do resultado real e soma só a diferença entre a matriz escolhida (B′) e a estimada (B̂):
Assim, o erro do modelo afeta apenas a mudança simulada, não o ponto de partida. Ao mexer em um destino, os demais do mesmo grupo são reescalados proporcionalmente para manter a soma em 100%.
10Limitações
- Falácia ecológica. Padrões entre urnas não provam comportamento individual. O modelo pode atribuir a um grupo uma variação causada por outra característica do lugar (renda, religião, idade) que também se relaciona com aquele grupo.
- Grupos pequenos. Cury, Renan e Caiado tiveram cada um cerca de 2% do eleitorado, e os demais candidatos somados, menos de 0,5%. Quanto menor o grupo, menos a variação entre urnas informa sobre ele, e mais a estimativa depende da hipótese de taxa constante.
- Soluções de canto. A regressão de Goodman com restrições pode levar taxas a exatamente 0% ou 100% em recortes pequenos. Isso é limite do método, não comportamento real.
- Eleitorado. Usamos os aptos do 1º turno como base do 2º. Transferências de título e óbitos no intervalo de três semanas são desprezíveis, mas entram na abstenção.
- Seções agregadas. Se a agregação mudou entre os turnos, a urna pode não ser exatamente o mesmo eleitorado. Os casos detectáveis (6 urnas) foram descartados.
- Nulo sem número. O tipo 6 do RDV conta como nulo no resultado oficial; interpretamos como voto anulado sem digitação, mas o significado exato não está documentado.
11Como reproduzir
Os scripts, em Python 3 com numpy, pandas e scipy, rodam nesta ordem:
| Script | O que faz |
|---|---|
baixar_rdv.py | baixa os RDVs do 2º turno, seção a seção (retomável) |
der.py, tally_rdv.py | decodificam o RDV e contam votos por cargo, tipo e dígitos |
agregar_nulos.py, validar_oficial.py | consolidam por UF e comparam com o resultado oficial |
secoes_1t.py, secoes_2t.py | montam as tabelas por urna dos dois turnos |
transferencia_votos.py | ajusta o modelo (estadual, municipal e bootstrap) |
gerar_dados_site.py | gera o dados.js deste site |
Referências do método: L. A. Goodman, “Ecological regressions and behavior of individuals”, American Sociological Review, 1953; G. King, A Solution to the Ecological Inference Problem, Princeton University Press, 1997.