1 Introdução

A participação eleitoral constitui um dos elementos fundamentais para o funcionamento de uma democracia representativa. Entretanto, a ausência de parte do eleitorado às urnas representa um fenômeno que merece atenção, especialmente quando observadas as diferenças de participação entre grupos populacionais e regiões.

Nesse contexto, a análise do comparecimento e da abstenção eleitoral permite investigar como a participação nas eleições se distribui entre diferentes segmentos da população, possibilitando identificar padrões associados a características demográficas, sociais, educacionais e territoriais.

Este projeto tem como objetivo analisar a distribuição do comparecimento e da abstenção eleitoral no primeiro turno das Eleições Gerais de 2026 no estado de Pernambuco, buscando identificar possíveis associações entre a ausência às urnas, as características sociodemográficas do eleitorado e os fatores territoriais.

Para isso, serão utilizados dados disponibilizados pelo Tribunal Superior Eleitoral (TSE), por meio do conjunto de dados Comparecimento e Abstenção 2026.

A investigação será conduzida por meio de técnicas de análise exploratória de dados, estatística descritiva e visualização de informações, considerando as seguintes dimensões:

A partir dessas dimensões, pretende-se investigar quais grupos apresentam maiores taxas de abstenção, como esses indicadores variam entre os municípios pernambucanos e quais padrões podem ser identificados nos dados.

É importante destacar que a base utilizada apresenta informações agregadas por combinações de características dos eleitores. Portanto, os resultados permitirão identificar associações e padrões entre grupos populacionais, mas não estabelecer relações individuais de causalidade.

2 Pacotes necessários

Para a execução do projeto, serão utilizadas bibliotecas da linguagem R voltadas à manipulação, transformação e análise dos dados.

Até o momento, será utilizada a biblioteca tidyverse, que reúne ferramentas para manipulação de dados, importação de arquivos e outras operações necessárias ao desenvolvimento da análise.

library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.2.1     ✔ readr     2.1.6
## ✔ forcats   1.0.1     ✔ stringr   1.6.0
## ✔ ggplot2   4.0.2     ✔ tibble    3.3.1
## ✔ lubridate 1.9.5     ✔ tidyr     1.3.2
## ✔ purrr     1.2.2     
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors

Caso o pacote ainda não esteja instalado no ambiente, sua instalação poderá ser realizada com:

install.packages("tidyverse")

3 Importando e conhecendo os dados

3.1 Origem dos dados

Os dados utilizados neste projeto são provenientes do Tribunal Superior Eleitoral (TSE), responsável pela disponibilização de informações estatísticas relacionadas ao processo eleitoral brasileiro.

O conjunto selecionado, denominado Perfil de Comparecimento e Abstenção, apresenta informações sobre a quantidade de eleitores aptos, comparecimentos e abstenções, organizadas de acordo com diferentes características sociodemográficas e eleitorais.

O arquivo utilizado corresponde ao estado de Pernambuco (PE), referente ao primeiro turno das Eleições Gerais de 2026.

Fonte: Portal de Dados Abertos do TSE.

3.2 Organização dos dados

A base apresenta uma estrutura tabular, na qual cada registro representa um agrupamento de eleitores que compartilham determinadas características.

Diferentemente de uma base individualizada, não existem registros específicos para cada eleitor. Em vez disso, são disponibilizadas quantidades agregadas de pessoas que pertencem a determinadas combinações de características sociodemográficas e eleitorais.

As variáveis presentes no arquivo podem ser organizadas nas seguintes categorias:

Categoria Variáveis Descrição
Identificação DT_GERACAO, HH_GERACAO, ANO_ELEICAO, NR_TURNO Informações sobre a geração do arquivo e a eleição de referência.
Localização SG_UF, CD_MUNICIPIO, NM_MUNICIPIO, NR_ZONA Identificação geográfica e eleitoral do registro.
Demográfica CD_GENERO, DS_GENERO, CD_FAIXA_ETARIA, DS_FAIXA_ETARIA Gênero e faixa etária dos eleitores.
Social CD_ESTADO_CIVIL, DS_ESTADO_CIVIL, CD_COR_RACA, DS_COR_RACA Estado civil e raça/cor autodeclarada.
Educacional CD_GRAU_INSTRUCAO, DS_GRAU_INSTRUCAO Grau de instrução dos eleitores.
Identidade CD_IDENTIDADE_GENERO, DS_IDENTIDADE_GENERO Identidade de gênero autodeclarada.
Étnico-cultural CD_QUILOMBOLA, DS_QUILOMBOLA, CD_GRUPO_INDIGENA, DS_GRUPO_INDIGENA, CD_IDIOMA_INDIGENA, DS_IDIOMA_INDIGENA, CD_IDIOMA_QUILOMBOLA, DS_IDIOMA_QUILOMBOLA Informações sobre pertencimento quilombola e indígena e domínio de idiomas correspondentes.
Acessibilidade CD_INTERPRETE_LIBRAS, DS_INTERPRETE_LIBRAS Indicadores relacionados à interpretação de Libras.
Participação eleitoral QT_APTOS, QT_COMPARECIMENTO, QT_ABSTENCAO Quantidades de eleitores aptos, comparecimentos e abstenções.
Deficiência e mobilidade Variáveis QT_COMPAREC_DEFICIENTES e QT_ABST_DEFICIENTES Quantidades de comparecimentos e abstenções de eleitores com deficiência ou mobilidade reduzida.
Transferência temporária QT_COMPAREC_TTE, QT_ABST_TTE Quantidades de comparecimentos e abstenções de eleitores com transferência temporária.
Obrigatoriedade do voto Variáveis QT_COMPAREC_FACULTATIVO, QT_ABST_FACULTATIVO, QT_COMPAREC_OBRIGATORIO, QT_ABST_OBRIGATORIO Quantidades de comparecimentos e abstenções conforme a obrigatoriedade do voto.
Deficiência e obrigatoriedade Variáveis QT_COMPAREC_DEFIC_FACULTATIVO, QT_ABST_DEFIC_FACULTATIVO, QT_COMPAREC_DEFIC_OBRIGATORIO, QT_ABST_DEFIC_OBRIGATORIO Quantidades de comparecimentos e abstenções de eleitores com deficiência ou mobilidade reduzida, considerando a obrigatoriedade do voto.

Observação: as variáveis são apresentadas conforme o leiaute disponibilizado pelo TSE junto a base de dados. Algumas denominações aparecem quebradas em mais de uma linha no documento original, mas correspondem a um único nome de coluna.

3.3 Importação do arquivo

Inicialmente, será realizada a leitura do arquivo CSV disponibilizado pelo TSE.

De acordo com as orientações presentes no documento de leiaute da base, os arquivos utilizam codificação Latin 1, possuem campos separados por ponto e vírgula e apresentam os valores entre aspas.

dados_originais <- read_delim(
  "perfil_comparecimento_abstencao_2026_PE.csv",
  delim = ";",
  locale = locale(encoding = "Latin1"),
  na = c("#NULO", "#NE"),
  show_col_types = FALSE
)

3.4 Conhecendo a estrutura da base

Após a importação, é possível inspecionar a estrutura do conjunto de dados, identificando a quantidade de registros, as variáveis disponíveis e seus respectivos tipos.

# Visualização da estrutura das variáveis
glimpse(dados_originais)
## Rows: 467,244
## Columns: 45
## $ DT_GERACAO                    <chr> "13/10/2026", "13/10/2026", "13/10/2026"…
## $ HH_GERACAO                    <time> 16:46:32, 16:46:32, 16:46:32, 16:46:32,…
## $ ANO_ELEICAO                   <dbl> 2026, 2026, 2026, 2026, 2026, 2026, 2026…
## $ NR_TURNO                      <dbl> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1…
## $ SG_UF                         <chr> "PE", "PE", "PE", "PE", "PE", "PE", "PE"…
## $ CD_MUNICIPIO                  <dbl> 25674, 25674, 25674, 25674, 25674, 25674…
## $ NM_MUNICIPIO                  <chr> "SÃO JOSÉ DA COROA GRANDE", "SÃO JOSÉ DA…
## $ NR_ZONA                       <dbl> 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, …
## $ CD_GENERO                     <dbl> 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2…
## $ DS_GENERO                     <chr> "MASCULINO", "MASCULINO", "MASCULINO", "…
## $ CD_ESTADO_CIVIL               <dbl> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1…
## $ DS_ESTADO_CIVIL               <chr> "SOLTEIRO", "SOLTEIRO", "SOLTEIRO", "SOL…
## $ CD_FAIXA_ETARIA               <dbl> 3034, 3034, 3539, 3539, 3539, 3539, 3539…
## $ DS_FAIXA_ETARIA               <chr> "30 a 34 anos", "30 a 34 anos", "35 a 39…
## $ CD_GRAU_INSTRUCAO             <dbl> 7, 8, 2, 3, 4, 4, 5, 5, 6, 7, 8, 1, 2, 2…
## $ DS_GRAU_INSTRUCAO             <chr> "SUPERIOR INCOMPLETO", "SUPERIOR COMPLET…
## $ CD_COR_RACA                   <dbl> -1, 1, 2, 3, 1, 3, 3, 3, 1, 3, -1, 2, 1,…
## $ DS_COR_RACA                   <chr> "NÃO INFORMADO", "Branca", "Preta", "Par…
## $ CD_QUILOMBOLA                 <dbl> -1, 2, 2, 2, 2, 2, 2, 2, 2, 2, -1, 2, 2,…
## $ DS_QUILOMBOLA                 <chr> "NÃO INFORMADO", "NÃO", "NÃO", "NÃO", "N…
## $ CD_INTERPRETE_LIBRAS          <dbl> -1, 2, 2, 2, 2, 2, 2, 2, 2, 2, -1, 2, 2,…
## $ DS_INTERPRETE_LIBRAS          <chr> "NÃO INFORMADO", "NÃO", "NÃO", "NÃO", "N…
## $ CD_IDENTIDADE_GENERO          <dbl> -1, 1, 1, 1, 1, 3, 1, 3, 1, 1, -1, 1, 1,…
## $ DS_IDENTIDADE_GENERO          <chr> "NÃO INFORMADO", "Cisgênero", "Cisgênero…
## $ CD_IDIOMA_INDIGENA            <dbl> -1, -1, 2, -1, -1, 2, -1, -1, -1, 2, -1,…
## $ DS_IDIOMA_INDIGENA            <chr> "NÃO INFORMADO", "NÃO INFORMADO", "NÃO",…
## $ CD_GRUPO_INDIGENA             <dbl> -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, …
## $ DS_GRUPO_INDIGENA             <chr> "Não informado", "Não informado", "Não i…
## $ CD_IDIOMA_QUILOMBOLA          <dbl> -1, -1, 2, -1, -1, 2, -1, -1, -1, 2, -1,…
## $ DS_IDIOMA_QUILOMBOLA          <chr> "NÃO INFORMADO", "NÃO INFORMADO", "NÃO",…
## $ QT_APTOS                      <dbl> 41, 2, 1, 30, 1, 1, 13, 1, 3, 2, 17, 2, …
## $ QT_COMPARECIMENTO             <dbl> 30, 2, 1, 18, 1, 1, 5, 1, 2, 1, 12, 1, 1…
## $ QT_ABSTENCAO                  <dbl> 11, 0, 0, 12, 0, 0, 8, 0, 1, 1, 5, 1, 0,…
## $ QT_COMPARECIMENTO_DEFICIENCIA <dbl> 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ QT_ABSTENCAO_DEFICIENCIA      <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ QT_COMPARECIMENTO_TTE         <dbl> 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ QT_ABSTENCAO_TTE              <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ QT_COMPAREC_FACULTATIVO       <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0…
## $ QT_ABST_FACULTATIVO           <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0…
## $ QT_COMPAREC_OBRIGATORIO       <dbl> 30, 2, 1, 18, 1, 1, 5, 1, 2, 1, 12, 0, 1…
## $ QT_ABST_OBRIGATORIO           <dbl> 11, 0, 0, 12, 0, 0, 8, 0, 1, 1, 5, 0, 0,…
## $ QT_COMPAREC_DEFIC_FACULTATIVO <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ QT_ABST_DEFIC_FACULTATIVO     <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ QT_COMPAREC_DEFIC_OBRIGATORIO <dbl> 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ QT_ABST_DEFIC_OBRIGATORIO     <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
# Quantidade de registros e variáveis
dim(dados_originais)
## [1] 467244     45
# Resumo estatístico das variáveis
summary(dados_originais)
##   DT_GERACAO          HH_GERACAO        ANO_ELEICAO      NR_TURNO
##  Length:467244      Min.   :16:46:32   Min.   :2026   Min.   :1  
##  Class :character   1st Qu.:16:46:32   1st Qu.:2026   1st Qu.:1  
##  Mode  :character   Median :16:46:32   Median :2026   Median :1  
##                     Mean   :16:46:32   Mean   :2026   Mean   :1  
##                     3rd Qu.:16:46:32   3rd Qu.:2026   3rd Qu.:1  
##                     Max.   :16:46:32   Max.   :2026   Max.   :1  
##     SG_UF            CD_MUNICIPIO   NM_MUNICIPIO          NR_ZONA      
##  Length:467244      Min.   :23000   Length:467244      Min.   :  1.00  
##  Class :character   1st Qu.:23817   Class :character   1st Qu.: 35.00  
##  Mode  :character   Median :24759   Mode  :character   Median : 68.00  
##                     Mean   :24667                      Mean   : 70.33  
##                     3rd Qu.:25313                      3rd Qu.:105.00  
##                     Max.   :30015                      Max.   :150.00  
##    CD_GENERO     DS_GENERO         CD_ESTADO_CIVIL DS_ESTADO_CIVIL   
##  Min.   :0.00   Length:467244      Min.   :0.000   Length:467244     
##  1st Qu.:2.00   Class :character   1st Qu.:1.000   Class :character  
##  Median :4.00   Mode  :character   Median :3.000   Mode  :character  
##  Mean   :3.08                      Mean   :3.153                     
##  3rd Qu.:4.00                      3rd Qu.:3.000                     
##  Max.   :4.00                      Max.   :9.000                     
##  CD_FAIXA_ETARIA DS_FAIXA_ETARIA    CD_GRAU_INSTRUCAO DS_GRAU_INSTRUCAO 
##  Min.   :  -3    Length:467244      Min.   :0.00      Length:467244     
##  1st Qu.:3034    Class :character   1st Qu.:3.00      Class :character  
##  Median :4549    Mode  :character   Median :5.00      Mode  :character  
##  Mean   :4713                       Mean   :4.46                        
##  3rd Qu.:6064                       3rd Qu.:6.00                        
##  Max.   :9999                       Max.   :8.00                        
##   CD_COR_RACA     DS_COR_RACA        CD_QUILOMBOLA    DS_QUILOMBOLA     
##  Min.   :-1.000   Length:467244      Min.   :-1.000   Length:467244     
##  1st Qu.:-1.000   Class :character   1st Qu.:-1.000   Class :character  
##  Median : 1.000   Mode  :character   Median : 2.000   Mode  :character  
##  Mean   : 1.277                      Mean   : 1.074                     
##  3rd Qu.: 3.000                      3rd Qu.: 2.000                     
##  Max.   : 5.000                      Max.   : 2.000                     
##  CD_INTERPRETE_LIBRAS DS_INTERPRETE_LIBRAS CD_IDENTIDADE_GENERO
##  Min.   :-1.000       Length:467244        Min.   :-1.0000     
##  1st Qu.:-1.000       Class :character     1st Qu.:-1.0000     
##  Median : 2.000       Mode  :character     Median : 1.0000     
##  Mean   : 1.066                            Mean   : 0.6593     
##  3rd Qu.: 2.000                            3rd Qu.: 1.0000     
##  Max.   : 2.000                            Max.   : 3.0000     
##  DS_IDENTIDADE_GENERO CD_IDIOMA_INDIGENA DS_IDIOMA_INDIGENA CD_GRUPO_INDIGENA 
##  Length:467244        Min.   :-1.0000    Length:467244      Min.   : -1.0000  
##  Class :character     1st Qu.:-1.0000    Class :character   1st Qu.: -1.0000  
##  Mode  :character     Median :-1.0000    Mode  :character   Median : -1.0000  
##                       Mean   :-0.4464                       Mean   :  0.7043  
##                       3rd Qu.:-1.0000                       3rd Qu.: -1.0000  
##                       Max.   : 2.0000                       Max.   :305.0000  
##  DS_GRUPO_INDIGENA  CD_IDIOMA_QUILOMBOLA DS_IDIOMA_QUILOMBOLA    QT_APTOS      
##  Length:467244      Min.   :-1.0000      Length:467244        Min.   :   1.00  
##  Class :character   1st Qu.:-1.0000      Class :character     1st Qu.:   1.00  
##  Mode  :character   Median :-1.0000      Mode  :character     Median :   2.00  
##                     Mean   :-0.4481                           Mean   :  15.46  
##                     3rd Qu.:-1.0000                           3rd Qu.:   7.00  
##                     Max.   : 2.0000                           Max.   :2320.00  
##  QT_COMPARECIMENTO  QT_ABSTENCAO     QT_COMPARECIMENTO_DEFICIENCIA
##  Min.   :   0.00   Min.   :  0.000   Min.   : 0.0000              
##  1st Qu.:   1.00   1st Qu.:  0.000   1st Qu.: 0.0000              
##  Median :   1.00   Median :  0.000   Median : 0.0000              
##  Mean   :  12.66   Mean   :  2.809   Mean   : 0.1196              
##  3rd Qu.:   5.00   3rd Qu.:  1.000   3rd Qu.: 0.0000              
##  Max.   :1999.00   Max.   :564.000   Max.   :23.0000              
##  QT_ABSTENCAO_DEFICIENCIA QT_COMPARECIMENTO_TTE QT_ABSTENCAO_TTE  
##  Min.   :0.00000          Min.   : 0.00000      Min.   :0.000000  
##  1st Qu.:0.00000          1st Qu.: 0.00000      1st Qu.:0.000000  
##  Median :0.00000          Median : 0.00000      Median :0.000000  
##  Mean   :0.05088          Mean   : 0.05755      Mean   :0.003054  
##  3rd Qu.:0.00000          3rd Qu.: 0.00000      3rd Qu.:0.000000  
##  Max.   :9.00000          Max.   :82.00000      Max.   :5.000000  
##  QT_COMPAREC_FACULTATIVO QT_ABST_FACULTATIVO QT_COMPAREC_OBRIGATORIO
##  Min.   :  0.000         Min.   :  0.0000    Min.   :   0.00        
##  1st Qu.:  0.000         1st Qu.:  0.0000    1st Qu.:   0.00        
##  Median :  0.000         Median :  0.0000    Median :   1.00        
##  Mean   :  1.426         Mean   :  0.9317    Mean   :  11.23        
##  3rd Qu.:  0.000         3rd Qu.:  0.0000    3rd Qu.:   3.00        
##  Max.   :836.000         Max.   :274.0000    Max.   :1999.00        
##  QT_ABST_OBRIGATORIO QT_COMPAREC_DEFIC_FACULTATIVO QT_ABST_DEFIC_FACULTATIVO
##  Min.   :  0.000     Min.   : 0.00000              Min.   :0.0000           
##  1st Qu.:  0.000     1st Qu.: 0.00000              1st Qu.:0.0000           
##  Median :  0.000     Median : 0.00000              Median :0.0000           
##  Mean   :  1.877     Mean   : 0.03551              Mean   :0.0336           
##  3rd Qu.:  1.000     3rd Qu.: 0.00000              3rd Qu.:0.0000           
##  Max.   :564.000     Max.   :12.00000              Max.   :9.0000           
##  QT_COMPAREC_DEFIC_OBRIGATORIO QT_ABST_DEFIC_OBRIGATORIO
##  Min.   : 0.00000              Min.   :0.00000          
##  1st Qu.: 0.00000              1st Qu.:0.00000          
##  Median : 0.00000              Median :0.00000          
##  Mean   : 0.08407              Mean   :0.01728          
##  3rd Qu.: 0.00000              3rd Qu.:0.00000          
##  Max.   :23.00000              Max.   :6.00000

4 Preparação dos dados

4.1 Seleção dos registros

Inicialmente, será criado um novo conjunto de dados para as análises, preservando a base original.

Embora o arquivo utilizado já corresponda a Pernambuco, será realizada uma verificação explícita da unidade federativa e do turno da eleição, garantindo que o recorte da investigação esteja corretamente delimitado.

dados <- dados_originais |>
  filter(
    SG_UF == "PE",
    NR_TURNO == 1
  )

# Dimensões da base selecionada
dim(dados)
## [1] 467244     45

4.2 Tratamento de valores ausentes

O TSE utiliza códigos específicos para representar informações ausentes ou não registradas:

  • #NULO e -1: informações em branco ou ausentes no banco de dados;
  • #NE e -3: informações que não eram registradas pelos sistemas eleitorais naquele ano.

Durante a importação, os valores textuais #NULO e #NE foram reconhecidos como ausentes. Agora, os códigos numéricos correspondentes serão tratados nas variáveis numéricas.

Para preservar a base original e facilitar as análises posteriores, os códigos serão convertidos em valores ausentes apenas no conjunto de dados de trabalho.

dados <- dados |>
  mutate(
    across(
      where(is.numeric),
      ~ replace(.x, .x %in% c(-1, -3), NA_real_)
    )
  )

Essa transformação permite trabalhar com os valores disponíveis sem interpretar os códigos especiais como quantidades ou categorias válidas. A distinção original entre as situações permanece preservada em dados_originais.

4.3 Verificação de valores ausentes e inválidos

Antes de iniciar as análises, é necessário verificar a presença de valores ausentes ou negativos nas variáveis que representam as quantidades de eleitores aptos, comparecimentos e abstenções.

dados |>
  summarise(
    total_registros = n(),

    aptos_ausentes = sum(is.na(QT_APTOS)),
    comparecimentos_ausentes = sum(is.na(QT_COMPARECIMENTO)),
    abstencoes_ausentes = sum(is.na(QT_ABSTENCAO)),

    aptos_negativos = sum(QT_APTOS < 0, na.rm = TRUE),
    comparecimentos_negativos = sum(
      QT_COMPARECIMENTO < 0, na.rm = TRUE
    ),
    abstencoes_negativas = sum(
      QT_ABSTENCAO < 0, na.rm = TRUE
    )
  )

4.4 Verificação da consistência dos dados

Para verificar a integridade das informações, será realizada uma comparação entre a quantidade de eleitores aptos e a soma dos comparecimentos e abstenções.

Considerando que essas duas categorias representam situações complementares do eleitorado apto, espera-se que a seguinte igualdade seja satisfeita:

\[ QT\_APTOS = QT\_COMPARECIMENTO + QT\_ABSTENCAO \]

A partir dessa relação, os registros serão classificados como consistentes ou inconsistentes.

dados_validacao <- dados |>
  mutate(
    diferenca = QT_APTOS -
      (QT_COMPARECIMENTO + QT_ABSTENCAO)
  )

dados_validacao |>
  summarise(
    total_registros = n(),

    registros_validos = sum(
      !is.na(QT_APTOS) &
      !is.na(QT_COMPARECIMENTO) &
      !is.na(QT_ABSTENCAO)
    ),

    registros_consistentes = sum(
      diferenca == 0, na.rm = TRUE
    ),

    registros_inconsistentes = sum(
      diferenca != 0, na.rm = TRUE
    ),

    percentual_consistente = mean(
      diferenca == 0, na.rm = TRUE
    ) * 100
  )

A verificação realizada não identificou inconsistências entre as quantidades de eleitores aptos, comparecimentos e abstenções nos registros válidos analisados.

4.5 Cálculo das taxas de comparecimento e abstenção

Após a verificação da consistência, serão criadas duas novas variáveis para facilitar as análises posteriores: a taxa de comparecimento e a taxa de abstenção.

Esses indicadores permitem comparar grupos de diferentes dimensões populacionais, evitando que a interpretação dos resultados dependa exclusivamente das quantidades absolutas.

As taxas serão calculadas pelas seguintes expressões:

\[ Taxa\ de\ Abstenção = \frac{QT\_ABSTENCAO}{QT\_APTOS} \times 100 \]

\[ Taxa\ de\ Comparecimento = \frac{QT\_COMPARECIMENTO}{QT\_APTOS} \times 100 \]

dados <- dados |>
  mutate(
    taxa_abstencao = if_else(
      !is.na(QT_APTOS) & QT_APTOS > 0 &
        !is.na(QT_ABSTENCAO),
      QT_ABSTENCAO / QT_APTOS * 100,
      NA_real_
    ),

    taxa_comparecimento = if_else(
      !is.na(QT_APTOS) & QT_APTOS > 0 &
        !is.na(QT_COMPARECIMENTO),
      QT_COMPARECIMENTO / QT_APTOS * 100,
      NA_real_
    )
  )

4.6 Verificação dos totais gerais

Por fim, será realizada uma verificação das quantidades totais de eleitores aptos, comparecimentos e abstenções presentes na base selecionada.

dados |>
  summarise(
    total_aptos = sum(QT_APTOS, na.rm = TRUE),

    total_comparecimentos = sum(
      QT_COMPARECIMENTO, na.rm = TRUE
    ),

    total_abstencoes = sum(
      QT_ABSTENCAO, na.rm = TRUE
    )
  ) |>
  mutate(
    diferenca = total_aptos -
      (total_comparecimentos + total_abstencoes)
  )

Essa verificação permite observar se os totais agregados também respeitam a relação de consistência estabelecida anteriormente. A interpretação dos totais pressupõe que os agrupamentos da base sejam mutuamente exclusivos, sem sobreposição entre registros.

dados |>
  summarise(
    registros_duplicados = sum(duplicated(dados))
  )
linhas_duplicadas <- dados[duplicated(dados) | duplicated(dados, fromLast = TRUE), ]
dim(linhas_duplicadas)
## [1] 106  47
linhas_duplicadas |>
  count(across(everything()), name = "ocorrencias") |>
  filter(ocorrencias > 1) |>
  count(ocorrencias, name = "quantidade_de_grupos")