ANALFABETISMO E VOTO

Author

Renato Barreira

PROBLEMA DE PESQUISA:

POSSÍVEIS PERGUNTAS DE PESQUISA:

Há correlação entre % de analfabetos e voto no Lula por município?

Há correlação entre % de analfabetos e abstenções por município?

Há correlação entre % de analfabetos e votos nulos e brancos por município?

Há correlação entre % de analfabetos e votos no Bolsonaro por município?

Como as regiões com maior % de analfabetos votam

Possível hipótese:

Há correlações significativa entre % de analfabetismo e % de votos no Lula. fazendo com que o “analfabeto” seja usado de maneira pejorativa para descredenciar opositores e incitar a militância.

FONTES DOS BANCOS DE DADOS:

SIG(TSE) e SIDRA (IBGE)

PRÉ-PROCESSAMENTO DE DADOS

#### JUNTANDO BD1 E BDLULA

bd1 = left_join(alfabetizacaomunicipio2, nulos, by = c("Município", "UF"))
bd1 = drop_na(bd1)

bdlula = left_join(bd1, nominais, by = c("Município", "UF"))
bdlula = filter(bdlula, nm_urna_candidato == "LULA")
bdlula = drop_na(bdlula)


bd1 = bd1 |>
  rename(code_muni = `Cód.`)
bdlula = bdlula |>
  rename(code_muni = `Cód.`)

#head(bdlula)

ANÁLISES

Analfabetismo






Abstenções


mapa_dados |>
  ggplot() +
  geom_sf(aes(fill = pc_abstencoes), color = NA) +
  scale_fill_viridis_c(option = "plasma", direction = -1) +
  labs(title = "% de Abstencionismo Eleitoral", fill = "%") +
  theme_minimal()



bd1 |>
  ggplot(aes(x = regiao, y = pc_abstencoes)) +
  geom_boxplot(fill = "orange") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1)) +
  labs(title = "Boxplot % de Abstenções dos municípios por Região",
       x = "Região",
       y = "% Abstenções")


bd1 |>
ggplot(aes(x = perc_analfa, y = pc_abstencoes)) +
  geom_point(alpha = 0.6, color = "darkblue") +
  labs(
    x = "% de Analfabetismo",
    y = "% de Comparecimento Eleitoral",
    title = "Analfabetismo vs Abstencionismo Eleitoral por Município"
  ) +
  theme_minimal()



Nulos e Brancos







Voto no Lula


mapa_dados |>
  ggplot() +
  geom_sf(aes(fill = pc_votos_validos), color = NA) +
  scale_fill_viridis_c(option = "plasma", direction = -1) +
  labs(title = "% de Votos Lula 2022", fill = "%") +
  theme_minimal()






cor.test(bdlula$perc_analfa, bdlula$pc_votos_validos, method = "spearman")
Warning in cor.test.default(bdlula$perc_analfa, bdlula$pc_votos_validos, :
Impossível calcular o valor exato de p com empates

    Spearman's rank correlation rho

data:  bdlula$perc_analfa and bdlula$pc_votos_validos
S = 5277582834, p-value < 2.2e-16
alternative hypothesis: true rho is not equal to 0
sample estimates:
      rho 
0.8143706 


O resultado mostra uma correlação de Spearman bastante alta (rho = 0,814) entre a porcentagem de analfabetismo (perc_analfa) e a porcentagem de votos válidos no Lula (pc_votos_validos), com um p-valor extremamente pequeno (< 2.2e-16).

Interpretação:

Força da associação: A correlação de 0,81 indica uma associação positiva muito forte — ou seja, municípios com maiores taxas de analfabetismo tendem fortemente a ter maiores porcentagens de votos válidos no Lula.

Significância estatística: O p-valor praticamente zero indica que essa correlação é estatisticamente significativa, mesmo com correção para tamanhos grandes.

Spearman usa posições (ranks), então essa relação é monotônica: conforme o analfabetismo aumenta, o voto no Lula tende a aumentar, sem exigir linearidade.


plot(bdlula$perc_analfa, bdlula$pc_votos_validos,
     pch = 16, col = rgb(0, 0, 1, 0.3),
     xlab = "% Analfabetismo", ylab = "% Votos válidos no Lula")
lines(lowess(bdlula$perc_analfa, bdlula$pc_votos_validos), col = "red", lwd = 2)


modelo_robusto = rlm(pc_votos_validos ~ perc_analfa, data = bdlula)
summary(modelo_robusto)

Call: rlm(formula = pc_votos_validos ~ perc_analfa, data = bdlula)
Residuals:
      Min        1Q    Median        3Q       Max 
-0.782116 -0.068112 -0.002054  0.070311  0.469801 

Coefficients:
            Value    Std. Error t value 
(Intercept)   0.3073   0.0026   117.1656
perc_analfa   0.0200   0.0002   106.7124

Residual standard error: 0.1023 on 5544 degrees of freedom


modelo_ols = lm(pc_votos_validos ~ perc_analfa, data = bdlula)
summary(modelo_ols)

Call:
lm(formula = pc_votos_validos ~ perc_analfa, data = bdlula)

Residuals:
     Min       1Q   Median       3Q      Max 
-0.77172 -0.06919 -0.00179  0.06970  0.46610 

Coefficients:
             Estimate Std. Error t value Pr(>|t|)    
(Intercept) 0.3129147  0.0026519   118.0   <2e-16 ***
perc_analfa 0.0195384  0.0001892   103.2   <2e-16 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 0.1066 on 5544 degrees of freedom
Multiple R-squared:  0.6579,    Adjusted R-squared:  0.6578 
F-statistic: 1.066e+04 on 1 and 5544 DF,  p-value: < 2.2e-16


plot(bdlula$perc_analfa, bdlula$pc_votos_validos,
     pch = 16, col = rgb(0, 0, 1, 0.3),
     xlab = "% Analfabetismo", ylab = "% Votos válidos no Lula")
abline(modelo_robusto, col = "red", lwd = 2)
abline(modelo_ols, col = "black", lty = 2)  # para comparar
legend("topleft", legend = c("Robusta", "OLS"),
       col = c("red", "black"), lty = c(1, 2), bty = "n")


Agora, analisando por região:



#bdlula |>
  #group_by(regiao) |>
  #group_modify(~ tidy(cor.test(.x$perc_analfa, .x$pc_votos_validos, method = "spearman")))


A correlação é mais forte no Sul e Sudeste, sugerindo que, nessas regiões, o analfabetismo está mais diretamente associado ao apoio eleitoral ao Lula.

Já no Nordeste, Norte e Centro-Oeste, embora a correlação também seja significativa, ela é mais fraca, o que pode refletir fatores regionais específicos, como a predominância do apoio ao Lula independentemente da escolaridade.

MAS E A RENDA? COMO SE COMPARA A RENDA

Pessoas de 10 anos ou mais de idade, Valor do rendimento nominal médio mensal, e mediano mensal, das pessoas de 10 anos ou mais de idade, por condição de atividade na semana de referência, segundo a situação do domicílio, o sexo, as classes de rendimento nominal mensal e os grupos de idade.

ATENÇÃO AQUI EU CONTEI TODAS AS PESSOAS DOS MUNICÍPIOS, NÃO SOMENTE ELEITORES. MUNICÍPIOS COM A % DE PESSOAS QUE GANHAM ATÉ 1/2 SALÁRIO MÍNIMO.


# Calcula a soma das pessoas com rendimento até 1/2 SM
#rendimento$`até_1/2SM` <- rendimento$`<1/4SM` + rendimento$`1/4<1/2SM`

# Calcula a porcentagem desse grupo em relação ao total e arredonda para 2 casas decimais
#rendimento$perc_ate_meio_SM <- round((rendimento$`até_1/2SM` / rendimento$Total) * 100, 2)
# 
# # Visualiza os resultados
# head(rendimento[, c("nome", "Total", "até_1/2SM", "perc_ate_meio_SM")])




#mapa_dadosrend = municipios_shape |>
  #left_join(bd3, by = "code_muni")
  
#ggplot(mapa_dadosrend) +
  #geom_sf(aes(fill = perc_ate_meio_SM), color = NA) +
  #scale_fill_viridis_c(option = "magma", direction = -1, na.value = "grey80") +
  #labs(
    #title = "Porcentagem de pessoas que ganham até meio salário mínimo",
    #fill = "% até 1/2 Salário Mínimo"
  #) +
  #theme_minimal()




# bd3 = bd3 |>
#   mutate(faixa_pobres = cut(
#     perc_ate_meio_SM,
#     breaks = c(0, 5, 10, 15, 20, 100),  # Ajuste os limites conforme seus dados
#     labels = c("0–5%", "5–10%", "10–15%", "15–20%", "20%+"),
#     include.lowest = TRUE
#   ))
# 
# bd3 <- bd3 |>
#   filter(!is.na(faixa_pobres), !is.na(pc_votos_validos))
# 
# ggplot(bd3, aes(x = faixa_pobres, y = pc_votos_validos)) +
#   geom_boxplot(fill = "gray90", color = "black", outlier.shape = 1) +
#   labs(
#     x = "% ganham até 1/2 salário mínimo (faixas)",
#     y = "% de Votos Lula 2022",
#     title = "Boxplots de % de Votos Lula 2022 por Faixas de até 1/2 salário mínimo"
#   ) +
#   theme_minimal(base_size = 9)


# bd3 |>
# ggplot(aes(x = perc_ate_meio_SM, y = pc_votos_validos)) +
#   geom_point(alpha = 0.6, color = "darkblue") +
#   labs(
#     x = "% ganham até 1/2 salário mínimo",
#     y = "% Votos Lula 2022",
#     title = "% Até 1/2 salário mínimo vs % de Votos Lula 2022 por Município"
#   ) +
#   theme_minimal()


# cor.test(bd3$perc_ate_meio_SM, bd3$pc_votos_validos, method = "spearman")


# plot(bd3$perc_ate_meio_SM, bd3$pc_votos_validos,
#      pch = 16, col = rgb(0, 0, 1, 0.3),
#      xlab = "% Até meio SM", ylab = "% Votos válidos no Lula")
# lines(lowess(bd3$perc_ate_meio_SM, bd3$pc_votos_validos), col = "red", lwd = 2)


# modelo_robusto2 = rlm(pc_votos_validos ~ perc_ate_meio_SM, data = bd3)
# summary(modelo_robusto)


# modelo_ols2 = lm(pc_votos_validos ~ perc_ate_meio_SM, data = bd3)
# summary(modelo_ols)


# plot(bd3$pc_votos_validos ~ bd3$perc_ate_meio_SM,
#      pch = 16, col = rgb(0, 0, 1, 0.3),
#      xlab = "% até 1/2 Salário Mínimo", ylab = "% Votos válidos no Lula")
# abline(modelo_robusto2, col = "red", lwd = 2)
# abline(modelo_ols, col = "black", lty = 2)  # para comparar
# legend("topleft", legend = c("Robusta", "OLS"),
#        col = c("red", "black"), lty = c(1, 2), bty = "n")


# ggplot(bd3, aes(x = faixa_pobres, y = pc_votos_validos)) +
#   geom_boxplot(fill = "gray90", color = "black", outlier.shape = 1) +
#   labs(
#     x = "% de até 1/2 salário mínimo (faixas)",
#     y = "% de Votos Lula 2022",
#     title = "Boxplots de % de Votos Lula 2022 por Faixas de 1/2 Salário Mínimo",
#     subtitle = "Separado por Região"
#   ) +
#   facet_wrap(~ regiao) +
#   theme_minimal(base_size = 9) +
#   theme(
#     strip.text = element_text(face = "bold"),
#     axis.text.x = element_text(angle = 45, hjust = 1)
#   )

EMBORA ANALFABETISMO E RENDA SE CONFUNDAM QUANDO A GENTE VÊ A VOTAÇÃO PRO LULA ACHO QUE É DÁ PRA PROBLEMATIZAR E LANÇAR UMA VISÃO CRÍTICA DO VOTO DO ANALFABETO; desconstruir a narrativa do enquadramento negativo q as pessoas dão para o voto do analfabeto e do pobre

Lançar luz tb sobre o pobre analfabeto e com baixa escolaridade e o pobre escolarizado talvez.


PARTE 2 ESEB E LAPOP



# Legenda com rótulos descritivos
legenda_edre = c(
  "0" = "0. Nenhum",
  "1" = "1. Fund. incompleto",
  "2" = "2. Fund. completo",
  "3" = "3. Médio incompleto",
  "4" = "4. Médio completo",
  "5" = "5. Sup. incompleto",
  "6" = "6. Sup. completo",
  "888888" = "888888. Não sabe",
  "988888" = "988888. Não responde"
)

# Preparar dados com contagem e porcentagem
dados_edre = LAPOP |>
  filter(!is.na(edre)) |>
  count(edre = as.character(edre)) |>
  mutate(
    label = legenda_edre[edre],
    perc = round(100 * n / sum(n), 1),
    texto = paste0(n, " (", perc, "%)")
  )

# Garantir ordem correta
dados_edre$label = factor(dados_edre$label, levels = legenda_edre)

# Gráfico
ggplot(dados_edre, aes(x = label, y = n)) +
  geom_bar(stat = "identity", fill = "darkorange") +
  geom_text(aes(label = texto), vjust = -0.5, size = 2.8) +
  labs(
    title = "Nível educacional mais alto alcançado (EDRE)",
    x = "Escolaridade",
    y = "Frequência"
  ) +
  theme_minimal() +
  theme(
    axis.text.x = element_text(angle = 45, hjust = 1),
    plot.title = element_text(face = "bold")
  )


# Subconjunto do ESEB: apenas Analfabeto e Primário incompleto
#eseb_baixa_escolaridade <- ESEB |> 
  #filter(D03 %in% c(1, 2))

# Subconjunto do LAPOP: apenas Nenhum e Fund. incompleto
#lapop_baixa_escolaridade <- LAPOP |> 
  #filter(edre %in% c(0, 1))


ESEB <- ESEB |>
  mutate(
    baixa_escolaridade = case_when(
      D03 %in% c(1, 2) ~ "Sim",
      !is.na(D03) ~ "Não",
      TRUE ~ NA_character_
    )
  ) |>
  mutate(
    ideologia = case_when(
      Q19 %in% c(0, 1, 2) ~ "Esquerda",
      Q19 %in% c(3, 4) ~ "Centro-esquerda",
      Q19 %in% c(5) ~ "Centro",
      Q19 %in% c(6, 7) ~ "Centro-direita",
      Q19 %in% c(8, 9, 10) ~ "Direita",
      TRUE ~ NA_character_  # Para lidar com valores faltantes ou inválidos
    )
  )



#LAPOP <- LAPOP |>
  #mutate(
    #baixa_escolaridade = case_when(
      #edre %in% c(0, 1) ~ "Sim",
      #!is.na(edre) ~ "Não",
      #TRUE ~ NA_character_
    #)
 # )
ESEB |>
  filter(baixa_escolaridade == "Sim", !is.na(ideologia)) |>
  count(ideologia) |>
  mutate(
    prop = round(100 * n / sum(n), 1)
  ) |>
  ggplot(aes(x = factor(ideologia, levels = c("Esquerda", "Centro-esquerda", "Centro", "Centro-direita", "Direita")),
             y = prop)) +
  geom_bar(stat = "identity", fill = "darkorange") +
  geom_text(aes(label = paste0(prop, "%")), vjust = -0.5, size = 3.5) +
  labs(
    title = "Distribuição ideológica entre pessoas com baixa escolaridade",
    x = "Ideologia",
    y = "Proporção (%)"
  ) +
  ylim(0, 100) +
  theme_minimal() +
  theme(
    plot.title = element_text(face = "bold"),
    axis.text.x = element_text(angle = 30, hjust = 1)
  )

ESEB |>
  filter(baixa_escolaridade == "Não", !is.na(ideologia)) |>
  count(ideologia) |>
  mutate(
    prop = round(100 * n / sum(n), 1)
  ) |>
  ggplot(aes(x = factor(ideologia, levels = c("Esquerda", "Centro-esquerda", "Centro", "Centro-direita", "Direita")),
             y = prop)) +
  geom_bar(stat = "identity", fill = "darkgray") +
  geom_text(aes(label = paste0(prop, "%")), vjust = -0.5, size = 3.5) +
  labs(
    title = "Distribuição ideológica entre pessoas com alta escolaridade",
    x = "Ideologia",
    y = "Proporção (%)"
  ) +
  ylim(0, 100) +
  theme_minimal() +
  theme(
    plot.title = element_text(face = "bold"),
    axis.text.x = element_text(angle = 30, hjust = 1)
  )

dados_filtrados <- ESEB |>
  filter(
    baixa_escolaridade == "Sim",
    ideologia %in% c("Centro-direita", "Direita"),
    Q10P1b %in% c(1:11)  # Considera apenas votos válidos
  ) |>
  mutate(
    voto_presidencial = case_when(
      Q10P1b == 4 ~ "Bolsonaro",
      Q10P1b == 6 ~ "Lula",
      Q10P1b %in% c(1:11) & !Q10P1b %in% c(4, 6) ~ "Outros"
    )
  )

# Calcular proporções
dados_voto <- dados_filtrados |>
  count(voto_presidencial) |>
  mutate(
    perc = round(100 * n / sum(n), 1)
  )

# Exibir a tabela
print(dados_voto)
# A tibble: 3 × 3
  voto_presidencial     n  perc
  <chr>             <int> <dbl>
1 Bolsonaro            23  36.5
2 Lula                 37  58.7
3 Outros                3   4.8
dados_filtrados2 <- ESEB |>
  filter(
    baixa_escolaridade == "Não",
    ideologia %in% c("Centro-direita", "Direita"),
    Q10P1b %in% c(1:11)  # Considera apenas votos válidos
  ) |>
  mutate(
    voto_presidencial = case_when(
      Q10P1b == 4 ~ "Bolsonaro",
      Q10P1b == 6 ~ "Lula",
      Q10P1b %in% c(1:11) & !Q10P1b %in% c(4, 6) ~ "Outros"
    )
  )

# Calcular proporções
dados_voto2 <- dados_filtrados2 |>
  count(voto_presidencial) |>
  mutate(
    perc = round(100 * n / sum(n), 1)
  )

# Exibir a tabela
print(dados_voto2)
# A tibble: 3 × 3
  voto_presidencial     n  perc
  <chr>             <int> <dbl>
1 Bolsonaro           509  69.4
2 Lula                180  24.6
3 Outros               44   6  
###TABELA DEMOCRACIA 1 BAIXA ESCOLARIDADE
ESEB |>
  filter(baixa_escolaridade == "Sim") |>
  dplyr::select(Q04a, Q04b, Q04c, Q04d) |>
  pivot_longer(cols = everything(), names_to = "pergunta", values_to = "resposta") |>
  filter(resposta %in% 1:5) |>
  count(pergunta, resposta) |>
  group_by(pergunta) |>
  mutate(prop = round(100 * n / sum(n), 1)) |>
  dplyr::select(-n) |>
  pivot_wider(
    names_from = resposta,
    values_from = prop,
    names_prefix = "resp_"
  ) |>
  arrange(pergunta)
# A tibble: 4 × 6
# Groups:   pergunta [4]
  pergunta resp_1 resp_2 resp_3 resp_4 resp_5
  <chr>     <dbl>  <dbl>  <dbl>  <dbl>  <dbl>
1 Q04a       34.3   23.9   17.2    8.2   16.4
2 Q04b       24     17.8   10.9   19.4   27.9
3 Q04c       28     16.7    7.3   12.7   35.3
4 Q04d       52.3   20.5    7.3    7.3   12.6
###TABELA DEMOCRACIA 1 ALTA ESCOLARIDADE
ESEB |>
  filter(baixa_escolaridade == "Não") |>
  dplyr::select(Q04a, Q04b, Q04c, Q04d) |>
  pivot_longer(cols = everything(), names_to = "pergunta", values_to = "resposta") |>
  filter(resposta %in% 1:5) |>
  count(pergunta, resposta) |>
  group_by(pergunta) |>
  mutate(prop = round(100 * n / sum(n), 1)) |>
  dplyr::select(-n) |>
  pivot_wider(
    names_from = resposta,
    values_from = prop,
    names_prefix = "resp_"
  ) |>
  arrange(pergunta)
# A tibble: 4 × 6
# Groups:   pergunta [4]
  pergunta resp_1 resp_2 resp_3 resp_4 resp_5
  <chr>     <dbl>  <dbl>  <dbl>  <dbl>  <dbl>
1 Q04a       55     22      8.2    8.7    6.1
2 Q04b       36.6   22.2    8.9   13     19.3
3 Q04c       14.8   12.1    5.9   16.3   50.9
4 Q04d       36.5   15.5    7.1   13.3   27.6
ESEB |>
  filter(baixa_escolaridade == "Sim") |>
  dplyr::select(Q30a, Q30b, Q30c) |>
  pivot_longer(cols = everything(), names_to = "pergunta", values_to = "resposta") |>
  filter(resposta %in% c(1, 2)) |>
  count(pergunta, resposta) |>
  group_by(pergunta) |>
  mutate(prop = round(100 * n / sum(n), 1)) |>
  dplyr::select(-n) |>
  pivot_wider(
    names_from = resposta,
    values_from = prop,
    names_prefix = "resp_"
  )
# A tibble: 3 × 3
# Groups:   pergunta [3]
  pergunta resp_1 resp_2
  <chr>     <dbl>  <dbl>
1 Q30a       46.4   53.6
2 Q30b       56.3   43.7
3 Q30c       45.1   54.9
ESEB |>
  filter(baixa_escolaridade == "Não") |>
  dplyr::select(Q30a, Q30b, Q30c) |>
  pivot_longer(cols = everything(), names_to = "pergunta", values_to = "resposta") |>
  filter(resposta %in% c(1, 2)) |>
  count(pergunta, resposta) |>
  group_by(pergunta) |>
  mutate(prop = round(100 * n / sum(n), 1)) |>
  dplyr::select(-n) |>
  pivot_wider(
    names_from = resposta,
    values_from = prop,
    names_prefix = "resp_"
  )
# A tibble: 3 × 3
# Groups:   pergunta [3]
  pergunta resp_1 resp_2
  <chr>     <dbl>  <dbl>
1 Q30a       42.7   57.3
2 Q30b       54.9   45.1
3 Q30c       42.4   57.6
# Selecionar apenas quem tem baixa escolaridade
dados_baixa_esc <- ESEB |>
  filter(baixa_escolaridade == "Sim")

# Lista de variáveis Q31
variaveis_q31 <- paste0("Q31_", 1:14)

# Calcular proporções para cada item
tabela_q31 <- dados_baixa_esc |>
  dplyr::select(all_of(variaveis_q31)) |>
  pivot_longer(cols = everything(), names_to = "tema", values_to = "resposta") |>
  filter(resposta %in% c(1, 2, 3)) |>  # apenas respostas válidas
  mutate(resposta = case_when(
    resposta == 1 ~ "A favor",
    resposta == 2 ~ "Contra",
    resposta == 3 ~ "Depende"
  )) |>
  count(tema, resposta) |>
  group_by(tema) |>
  mutate(prop = round(100 * n / sum(n), 1)) |>
  dplyr::select(-n) |>
  pivot_wider(names_from = resposta, values_from = prop) |>
  arrange(tema)

# Exibir a tabela
tabela_q31
# A tibble: 14 × 4
# Groups:   tema [14]
   tema   `A favor` Contra Depende
   <chr>      <dbl>  <dbl>   <dbl>
 1 Q31_1       69.9   28.8     1.4
 2 Q31_10      91.4    6.2     2.5
 3 Q31_11      38.6   57.5     3.9
 4 Q31_12      90.7    6.8     2.5
 5 Q31_13      87.4    8.8     3.8
 6 Q31_14      69.7   25.8     4.5
 7 Q31_2       38.6   56.2     5.2
 8 Q31_3       44.8   52.6     2.6
 9 Q31_4       37.9   56.2     5.9
10 Q31_5       16.3   79.7     3.9
11 Q31_6       34.4   61.8     3.8
12 Q31_7        8.9   85.4     5.7
13 Q31_8       34.6   54.9    10.5
14 Q31_9       29     66.1     4.8
# Selecionar apenas quem tem ALTA escolaridade
dados_alta_esc <- ESEB |>
  filter(baixa_escolaridade == "Não")

# Lista de variáveis Q31
variaveis_q31alta <- paste0("Q31_", 1:14)

# Calcular proporções para cada item
tabela_q31alta <- dados_alta_esc |>
  dplyr::select(all_of(variaveis_q31alta)) |>
  pivot_longer(cols = everything(), names_to = "tema", values_to = "resposta") |>
  filter(resposta %in% c(1, 2, 3)) |>  # apenas respostas válidas
  mutate(resposta = case_when(
    resposta == 1 ~ "A favor",
    resposta == 2 ~ "Contra",
    resposta == 3 ~ "Depende"
  )) |>
  count(tema, resposta) |>
  group_by(tema) |>
  mutate(prop = round(100 * n / sum(n), 1)) |>
  dplyr::select(-n) |>
  pivot_wider(names_from = resposta, values_from = prop) |>
  arrange(tema)

# Exibir a tabela
tabela_q31alta
# A tibble: 14 × 4
# Groups:   tema [14]
   tema   `A favor` Contra Depende
   <chr>      <dbl>  <dbl>   <dbl>
 1 Q31_1       74.4   23.6     1.9
 2 Q31_10      76.2   19.7     4.1
 3 Q31_11      38.3   54.8     6.8
 4 Q31_12      82.6   11.6     5.8
 5 Q31_13      80.9   13.3     5.8
 6 Q31_14      54.7   41.3     4  
 7 Q31_2       53.6   41.4     5  
 8 Q31_3       59.9   35.8     4.4
 9 Q31_4       42.2   48.4     9.4
10 Q31_5       17.4   77.6     5.1
11 Q31_6       41.4   53.5     5.1
12 Q31_7       16.8   72.7    10.5
13 Q31_8       28     59.7    12.3
14 Q31_9       47.9   48.6     3.5
# Criar variável de religião com Candomblé e Umbanda agrupados
ESEB <- ESEB |>
  mutate(
    religiao_simplificada = case_when(
      D10 == 3 ~ "Católica",
      D10 == 5 ~ "Evangélica",
      D10 %in% c(2, 10) ~ "Candomblé/Umbanda",
      D10 %in% c(1, 4, 6, 7, 8, 9, 95, 96, 97) ~ "Outros",
      TRUE ~ NA_character_
    )
  )

# Tabela de proporções apenas para quem tem baixa escolaridade
tabela_religiao <- ESEB |>
  filter(baixa_escolaridade == "Sim", !is.na(religiao_simplificada)) |>
  count(religiao_simplificada) |>
  mutate(proporcao = round(100 * n / sum(n), 1)) |>
  arrange(desc(proporcao))

# Exibir a tabela
tabela_religiao
# A tibble: 4 × 3
  religiao_simplificada     n proporcao
  <chr>                 <int>     <dbl>
1 Católica                111      69.4
2 Evangélica               36      22.5
3 Outros                   12       7.5
4 Candomblé/Umbanda         1       0.6
# Tabela de proporções apenas para quem tem baixa escolaridade
tabela_religiao2 <- ESEB |>
  filter(baixa_escolaridade == "Não", !is.na(religiao_simplificada)) |>
  count(religiao_simplificada) |>
  mutate(proporcao = round(100 * n / sum(n), 1)) |>
  arrange(desc(proporcao))

# Exibir a tabela
tabela_religiao2
# A tibble: 4 × 3
  religiao_simplificada     n proporcao
  <chr>                 <int>     <dbl>
1 Católica                872      47.9
2 Evangélica              585      32.1
3 Outros                  309      17  
4 Candomblé/Umbanda        54       3  
# Tabela com proporção de beneficiários do Auxílio Brasil entre pessoas com baixa escolaridade
auxilio_baixaescolaridade <- ESEB |>
  filter(baixa_escolaridade == "Sim", Q32 %in% c(1, 2)) |>
  mutate(auxilio_brasil = case_when(
    Q32 == 1 ~ "Sim",
    Q32 == 2 ~ "Não"
  )) |>
  count(auxilio_brasil) |>
  mutate(proporcao = round(100 * n / sum(n), 1)) |>
  arrange(desc(proporcao))

# Exibir a tabela
auxilio_baixaescolaridade
# A tibble: 2 × 3
  auxilio_brasil     n proporcao
  <chr>          <int>     <dbl>
1 Não               84      52.8
2 Sim               75      47.2
# Tabela com proporção de beneficiários do Auxílio Brasil entre pessoas com ALTA escolaridade
auxilio_altaescolaridade <- ESEB |>
  filter(baixa_escolaridade == "Não", Q32 %in% c(1, 2)) |>
  mutate(auxilio_brasil = case_when(
    Q32 == 1 ~ "Sim",
    Q32 == 2 ~ "Não"
  )) |>
  count(auxilio_brasil) |>
  mutate(proporcao = round(100 * n / sum(n), 1)) |>
  arrange(desc(proporcao))

# Exibir a tabela
auxilio_altaescolaridade
# A tibble: 2 × 3
  auxilio_brasil     n proporcao
  <chr>          <int>     <dbl>
1 Não             1105      60.4
2 Sim              723      39.6
ESEB |>
  filter(baixa_escolaridade == "Sim", !is.na(ideologia)) |>
  count(ideologia) |>
  mutate(
    prop = round(100 * n / sum(n), 1)
  ) |>
  ggplot(aes(x = factor(ideologia, levels = c("Esquerda", "Centro-esquerda", "Centro", "Centro-direita", "Direita")),
             y = prop)) +
  geom_bar(stat = "identity", fill = "darkorange") +
  geom_text(aes(label = paste0(prop, "%")), vjust = -0.5, size = 3.5) +
  labs(
    title = "Distribuição ideológica entre pessoas com baixa escolaridade",
    x = "Ideologia",
    y = "Proporção (%)"
  ) +
  ylim(0, 100) +
  theme_minimal() +
  theme(
    plot.title = element_text(face = "bold"),
    axis.text.x = element_text(angle = 30, hjust = 1))

# Garantir que Q19 é válido e baixa_escolaridade não é NA
eseb_box_baixa <- ESEB |>
  filter(Q19 %in% 0:10 & !is.na(baixa_escolaridade))

# Criar boxplot
ggplot(eseb_box_baixa, aes(x = baixa_escolaridade, y = Q19, fill = baixa_escolaridade)) +
  geom_boxplot(outlier.size = 0.8, outlier.alpha = 0.4) +
  scale_fill_manual(values = c("Sim" = "tomato", "Não" = "steelblue")) +
  labs(
    title = "Distribuição da autolocalização ideológica (Q19) por baixa escolaridade (ESEB)",
    x = "Baixa escolaridade",
    y = "Posição ideológica (0 = Esquerda, 10 = Direita)"
  ) +
  theme_minimal(base_size = 11) +
  theme(legend.position = "none")

eseb_tab <- ESEB |>
  filter(Q19 %in% 0:10 & !is.na(baixa_escolaridade)) |>
  mutate(Q19 = as.factor(Q19))  # para tabela ordenada
# Tabela simples de frequência
tabela_freq <- table(eseb_tab$baixa_escolaridade, eseb_tab$Q19)

# Exibir como data.frame para visualizar melhor
as.data.frame.matrix(tabela_freq)
      0  1  2  3  4   5  6  7  8  9  10
Não 258 41 43 54 52 238 40 68 92 57 620
Sim  25  1  1  3  2   9  2  1  9  2  69
# Proporções por grupo (por linha)
tabela_prop <- prop.table(tabela_freq, margin = 1)

# Exibir como data.frame com porcentagens arredondadas
round(100 * as.data.frame.matrix(tabela_prop), 1)
       0   1   2   3   4    5   6   7   8   9   10
Não 16.5 2.6 2.8 3.5 3.3 15.2 2.6 4.4 5.9 3.6 39.7
Sim 20.2 0.8 0.8 2.4 1.6  7.3 1.6 0.8 7.3 1.6 55.6
legenda_voto <- c(
  "1" = "Ciro Gomes",
  "2" = "Eymael",
  "3" = "Felipe D'Avila",
  "4" = "Jair Bolsonaro",
  "5" = "Léo Péricles",
  "6" = "Lula",
  "7" = "Padre Kelmon",
  "8" = "Simone Tebet",
  "9" = "Sofia Manzano",
  "10" = "Soraya Thronicke",
  "11" = "Vera",
  "50" = "Anulou",
  "60" = "Branco",
  "97" = "Não sabe / não lembra",
  "98" = "Não respondeu"
)


# Preparar os dados válidos
eseb_voto <- ESEB |>
  filter(Q10P1b %in% names(legenda_voto) & !is.na(baixa_escolaridade)) |>
  mutate(
    voto_label = factor(
      legenda_voto[as.character(Q10P1b)],
      levels = legenda_voto
    )
  )
# Frequência simples
tabela_voto_freq <- table(eseb_voto$baixa_escolaridade, eseb_voto$voto_label)

# Como data frame
as.data.frame.matrix(tabela_voto_freq)
    Ciro Gomes Eymael Felipe D'Avila Jair Bolsonaro Léo Péricles Lula
Não         51      0             10            633            2  686
Sim          2      0              0             38            0   80
    Padre Kelmon Simone Tebet Sofia Manzano Soraya Thronicke Vera Anulou Branco
Não            3           66             2                5    1     44     21
Sim            0            3             0                0    0      0      3
    Não sabe / não lembra Não respondeu
Não                     5            57
Sim                     1             4
# Proporção por linha (grupo)
tabela_voto_prop <- prop.table(tabela_voto_freq, margin = 1)

# Como data frame com porcentagens arredondadas
round(100 * as.data.frame.matrix(tabela_voto_prop), 1)
    Ciro Gomes Eymael Felipe D'Avila Jair Bolsonaro Léo Péricles Lula
Não        3.2      0            0.6           39.9          0.1 43.3
Sim        1.5      0            0.0           29.0          0.0 61.1
    Padre Kelmon Simone Tebet Sofia Manzano Soraya Thronicke Vera Anulou Branco
Não          0.2          4.2           0.1              0.3  0.1    2.8    1.3
Sim          0.0          2.3           0.0              0.0  0.0    0.0    2.3
    Não sabe / não lembra Não respondeu
Não                   0.3           3.6
Sim                   0.8           3.1
# Frequência absoluta
tab = table(LAPOP$d5newb)

# Porcentagens
percent = prop.table(tab) * 100

# Exibir porcentagens com 2 casas decimais
round(percent, 2)

    1     2     3     4     5     6     7     8     9    10 
 8.37  2.61  4.12  3.57  9.19  6.31  7.13  7.82  6.72 44.17 
mapa_dados_rs = mapa_dados |>
  filter(abbrev_state == "RS")

library(viridis)
Carregando pacotes exigidos: viridisLite
mapa_dados_rs |>
  ggplot() +
  geom_sf(aes(fill = pc_votos_validos), color = NA) +
  scale_fill_viridis_c(option = "plasma", direction = -1) +
  labs(
    title = "% de Votos Válidos – Lula 2022 (RS)",
    fill = "%"
  ) +
  theme_minimal()

Histograma + curva de normaliade (pra availiar o pressuposto de normalidade, portanto não é um teste paramétrico;

Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
ℹ Please use `linewidth` instead.
Warning: The dot-dot notation (`..density..`) was deprecated in ggplot2 3.4.0.
ℹ Please use `after_stat(density)` instead.

Teste de correlação não paramétrico Spearman.

Warning in cor.test.default(bd1$perc_analfa, bd1$pc_abstencoes, method =
"spearman"): Impossível calcular o valor exato de p com empates

    Spearman's rank correlation rho

data:  bd1$perc_analfa and bd1$pc_abstencoes
S = 2.3342e+10, p-value < 2.2e-16
alternative hypothesis: true rho is not equal to 0
sample estimates:
      rho 
0.1790039 

Coeficiente rho (ρ) = 0.179:

Indica uma correlação positiva fraca entre % de analfabetismo e % de abstenções.

Ou seja, à medida que o analfabetismo aumenta, a abstenção tende a aumentar ligeiramente.

Existe uma associação estatisticamente significativa entre as duas variáveis, mas ela não é forte.

Há outros fatores mais determinantes para a abstenção além do analfabetismo.

Visualização com densidade para enfatizar ainda mais a análise

ROBUST LINEAR MODEL - OUTRO TESTE NÃO PARAMÉTRICO


Call: rlm(formula = pc_abstencoes ~ perc_analfa, data = bd1)
Residuals:
       Min         1Q     Median         3Q        Max 
-0.1370710 -0.0315673  0.0004071  0.0308762  0.1889440 

Coefficients:
            Value    Std. Error t value 
(Intercept)   0.1998   0.0012   169.1907
perc_analfa   0.0010   0.0001    11.4779

Residual standard error: 0.0462 on 5544 degrees of freedom

Há uma relação positiva e estatisticamente significativa entre o percentual de analfabetismo e a taxa de abstenção eleitoral.

No entanto, o efeito não é muito forte: um aumento de 10 pontos percentuais em analfabetismo resulta, em média, em apenas 1 ponto percentual a mais de abstenção.

% ANALFABETISMO % NULOS E BRANCOS

`geom_smooth()` using formula = 'y ~ x'

Warning in cor.test.default(bd1$perc_analfa, bd1$pc_nulosbrancos, method =
"spearman"): Impossível calcular o valor exato de p com empates

    Spearman's rank correlation rho

data:  bd1$perc_analfa and bd1$pc_nulosbrancos
S = 2.6975e+10, p-value = 0.0001366
alternative hypothesis: true rho is not equal to 0
sample estimates:
       rho 
0.05119652 

Força da correlação:

ρ (rho) ≈ 0.05 indica quase nenhuma correlação prática.

Existe uma leve tendência de que municípios com maior % de analfabetismo tenham maior % de votos nulos/brancos. Mas a relação é muito fraca — pode ser negligenciada em análises mais interpretativas.

Robust Linear Model


Call: rlm(formula = pc_nulosbrancos ~ perc_analfa, data = bd1)
Residuals:
     Min       1Q   Median       3Q      Max 
-3.12187 -0.92987 -0.05534  0.93329  6.54092 

Coefficients:
            Value    Std. Error t value 
(Intercept)   3.8076   0.0336   113.3004
perc_analfa   0.0167   0.0024     6.9774

Residual standard error: 1.382 on 5544 degrees of freedom

ANÁLISE VOTOS NOMINAIS

Histograma % Votação Lula

Gráfico de Dispersão % Analfabetismo e % Voto Lula

`geom_smooth()` using formula = 'y ~ x'

Teste de Correlação de Spearman


    Spearman's rank correlation rho

data:  bdlula$perc_analfa and bdlula$pc_votos_validos
S = 5277582834, p-value < 2.2e-16
alternative hypothesis: true rho is not equal to 0
sample estimates:
      rho 
0.8143706 

Correlação positiva forte: Um valor de rho = 0.81 sugere que quanto maior o percentual de analfabetismo em uma região, maior tende a ser o percentual de votos no Lula.

Significativo: O p-valor muito pequeno indica que essa associação é estatisticamente significativa, ou seja, não é fruto do acaso.

Regressão Linear Robusta


Call: rlm(formula = pc_votos_validos ~ perc_analfa, data = bdlula)
Residuals:
      Min        1Q    Median        3Q       Max 
-0.782116 -0.068112 -0.002054  0.070311  0.469801 

Coefficients:
            Value    Std. Error t value 
(Intercept)   0.3073   0.0026   117.1656
perc_analfa   0.0200   0.0002   106.7124

Residual standard error: 0.1023 on 5544 degrees of freedom

Intercepto (0.3073): Quando o percentual de analfabetismo é zero, o modelo prevê cerca de 30,7% dos votos no Lula.

Coeficiente de perc_analfa (0.0200): Para cada aumento de 1 ponto percentual no analfabetismo, o percentual de votos válidos no Lula aumenta em 2 pontos percentuais, em média, segundo o modelo.

t-valor muito alto (106.71): Forte evidência de que perc_analfa tem efeito estatisticamente significativo no voto no Lula.

Erro padrão pequeno (0.0002): A estimativa do coeficiente é muito precisa.

O modelo robusto confirma e quantifica a forte relação positiva entre analfabetismo e votação no Lula.

Cada aumento de 1% em analfabetismo está associado a um aumento de 2 pontos percentuais nos votos no Lula.

Essa associação permanece mesmo controlando para outliers e influências extremas, o que reforça a robustez do achado.