Os resultados do primeiro turno das eleições no Brasil deixaram claro que o segundo turno vai depender dos eleitores de Tebet e Ciro. A transferência de votos desses candidatos, respectivamente em terceiro e quarto lugar no primeiro turno, vai determinar o próximo presidente. Quais são, então, as probabilidades de cada um?
O objetivo desta análise é calcular os cenários possíveis e ver onde isso vai dar. Ou seja: se 0,01% dos eleitores de Tebet e 0,01% dos eleitores de Ciro votarem em Lula e o resto em Bolsonaro, quem ganha? E se forem 0,02% e 0,01%? E por aí vai, até 99,9% e 99,9%.
Lula ganha em 90% a 95% desses cenários. A análise abaixo mostra exatamente porque.
O primeiro passo é fazer o download dos resultados da eleição diretamente do site do TSE.
suppressMessages(library(tidyverse))
suppressMessages(library(lattice))
x <- httr::GET("https://resultados.tse.jus.br/oficial/ele2022/544/dados-simplificados/br/br-c0001-e000544-r.json") %>%
httr::content()
O segundo passo é organizar os dados em uma tabela que seja útil:
#nomes
candidatos <- as.data.frame(unlist(lapply(x$cand, `[[`, 4)))
# quantidade de votos no primeiro turno
candidatos$votos1T <- as.numeric(unlist(lapply(x$cand, `[[`, 10)))
# numero
candidatos$numero <- unlist(lapply(x$cand, `[[`, 3))
colnames(candidatos) <- c("nomes", "votos1T", "numero")
print(candidatos)
## nomes votos1T numero
## 1 LULA 57258115 13
## 2 JAIR BOLSONARO 51071277 22
## 3 SIMONE TEBET 4915306 15
## 4 CIRO GOMES 3599201 12
## 5 SORAYA THRONICKE 600953 44
## 6 FELIPE D'AVILA 559680 30
## 7 PADRE KELMON 81127 14
## 8 LÉO PÉRICLES 53518 80
## 9 SOFIA MANZANO 45615 21
## 10 VERA 25623 16
## 11 CONSTITUINTE EYMAEL 16603 27
Para viabilizar a análise eu pressuponho que todos os eleitores de Bolsonaro, Soraya, Felipe D’Ávila, Padre Kelmon e Eymael vão votar em Bolsonaro, e que todos os eleitores de Lula, Léo Péricles, Sofia Manzano e Vera vão votar em Lula.
transferenciaVoto <- data.frame (
numero = c(13, 22, 15, 12, 44, 30, 14, 80, 21, 16, 27),
votosLula2T = c(1, 0, NA, NA, 0, 0, 0, 1, 1, 1, 0)
)
transferenciaVoto$votosBolsonaro2T <- 1 - transferenciaVoto$votosLula2T
transferenciaVoto$abstencao <- 0
transferenciaVoto <- merge(transferenciaVoto, candidatos, by = "numero")
print(transferenciaVoto)
## numero votosLula2T votosBolsonaro2T abstencao nomes votos1T
## 1 12 NA NA 0 CIRO GOMES 3599201
## 2 13 1 0 0 LULA 57258115
## 3 14 0 1 0 PADRE KELMON 81127
## 4 15 NA NA 0 SIMONE TEBET 4915306
## 5 16 1 0 0 VERA 25623
## 6 21 1 0 0 SOFIA MANZANO 45615
## 7 22 0 1 0 JAIR BOLSONARO 51071277
## 8 27 0 1 0 CONSTITUINTE EYMAEL 16603
## 9 30 0 1 0 FELIPE D'AVILA 559680
## 10 44 0 1 0 SORAYA THRONICKE 600953
## 11 80 1 0 0 LÉO PÉRICLES 53518
Para calcular os cenários eu construí a seguinte função:
# Variaveis: ciroLula e simoneLula (proporção de eleitores de Ciro/Tebet que votam Lula no 2T), abstencaoCiro e abstencaoTebet (proporção de eleitores do Ciro/Tebet que votam nulo/branco no 2T)
calculoCenario <- function(ciroLula, simoneLula, abstencaoCiro, abstencaoSimone) {
transferenciaVoto$votosLula2T[transferenciaVoto$numero == 15] <- simoneLula
transferenciaVoto$votosLula2T[transferenciaVoto$numero == 12] <- ciroLula
transferenciaVoto$abstencao[transferenciaVoto$numero == 15] <- abstencaoSimone
transferenciaVoto$abstencao[transferenciaVoto$numero == 12] <- abstencaoCiro
# Calculando que votos transferidos são todos os que não se abstiveram
transferenciaVoto$votosTransferidos <- transferenciaVoto$votos1T *
(1 - transferenciaVoto$abstencao)
# Calculando que os votos do Bolsonaro são todos os que não votaram Lula
transferenciaVoto$votosBolsonaro2T <- 1 - transferenciaVoto$votosLula2T
# Calculando votos em Lula
votosLula =
transferenciaVoto$votosTransferidos %*%
transferenciaVoto$votosLula2T
# Calculando votos em Bolsonaro
votosBolsonaro =
transferenciaVoto$votosTransferidos %*%
transferenciaVoto$votosBolsonaro2T
# Ajeitando os resultados
resultados <- list(
"simoneLula" = simoneLula, "simoneBolsonaro" = 1 - simoneLula,
"ciroLula" = ciroLula, "ciroBolsonaro" = 1 - ciroLula,
"abstencaoCiro" = abstencaoCiro, "abstencaoSimone" = abstencaoSimone,
"votosLula" = votosLula, "votosBolsonaro" = votosBolsonaro,
"propLula" = (votosLula/(votosLula + votosBolsonaro)),
"propBolsonaro" = (votosLula/(votosLula + votosBolsonaro)))
return(resultados)
}
Primeiro é preciso montar uma tabela pra guardar os resultados.
cenarios = data.frame(matrix(vector(), 0, 10,
dimnames=list(c(),
c("simoneLula", "simoneBolsonaro",
"ciroLula", "ciroBolsonaro",
"abstencaoCiro", "abstencaoSimone",
"votosLula", "votosBolsonaro",
"propLula", "propBolsonaro"))),
stringsAsFactors=F)
Agora finalmente podemos calcular todos os cenários.
Para:
for (ciroLula in seq(0, 1, 0.01)) {
for (simoneLula in seq(0, 1, 0.01)) {
for (abstencaoCiro in c(0.1, 0.2)) {
for (abstencaoSimone in c(0.1, 0.2)) {
resultado <- calculoCenario(ciroLula, simoneLula, abstencaoCiro, abstencaoSimone)
cenarios <- rbind(cenarios, resultado)
}
}
}
}
cenarios$vitoriaLula <- ifelse(
cenarios$votosLula > cenarios$votosBolsonaro, 1, 0)
Em qual percentagem desses cenários Lula é presidente?
print(100*mean(cenarios$vitoriaLula))
## [1] 95.10832
Um gráfico de duas dimensões ajuda a visualizar: Em azul claro temos vitória de Lula, e em magenta temos vitória de Bolsonaro.
levelplot(cenarios$vitoriaLula ~ cenarios$ciroLula*cenarios$simoneLula,
main="Vitória em diferentes cenários",
ylab = "Proporção de eleitores Tebet que votam Lula",
xlab = "Proporção de eleitores Ciro que votam Lula")
A maior limitação dessa análise é considerar todos os cenários como igualmente prováveis, o que é uma simplificação pouco realista. Uma análise mais sofisticada deve levar em consideração diferentes distribuições probabilísticas.