Pensei em criar uma visualização que comparasse o resultado dos alunos de escola pública e privada no ENEM. Para isso, comparei o desempenho de cada tipo de escola nas provas do ENEM, verificando se existe correlação entre as notas. Entretanto, juntei um mapa de calor a isso, para procurar clusters nos quais houvesse maior concentração de candidatos. O primeiro caso que analisei foram as notas em Matemática e Ciências Humanas.

library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.4     ✔ readr     2.1.5
## ✔ forcats   1.0.0     ✔ stringr   1.5.1
## ✔ ggplot2   3.5.0     ✔ tibble    3.2.1
## ✔ lubridate 1.9.3     ✔ tidyr     1.3.1
## ✔ purrr     1.0.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
theme_set(theme_bw())
library(gridExtra)
## 
## Attaching package: 'gridExtra'
## 
## The following object is masked from 'package:dplyr':
## 
##     combine
load("dados/enem2021.RData")

limite_x <- scale_x_continuous(limits = c(0, 1000))
limite_y <- scale_y_continuous(limits = c(0, 1000))

opcao_viridis <- "E"
g1 <- 
  enem2021_limpo |> 
  filter(TP_ESCOLA == "Pública") |> 
  ggplot(aes(x = NU_NOTA_CH, y = NU_NOTA_MT)) +
  geom_hex() +
  scale_fill_viridis_c(option = opcao_viridis) +
  labs(x = "", y = "", fill = "Contagem", title = "Pública") +
  limite_x +
  limite_y
g2 <- 
  enem2021_limpo |> 
  filter(TP_ESCOLA == "Privada") |> 
  ggplot(aes(x = NU_NOTA_CH, y = NU_NOTA_MT)) +
  geom_hex() +
  scale_fill_viridis_c(option = opcao_viridis) +
  labs(x = "", y = "", fill = "Contagem", title = "Privada") +
  limite_x +
  limite_y
grid.arrange(g1, g2, nrow = 1,
             left = "Nota em Matemática", 
             bottom = "Nota em Ciências Humanas") 

É interessante notar como há uma correlação positiva entre as notas, como era de se esperar, para ambos os tipos de escola. Entretanto, a concentração de alunos de escola pública é maior próximo dos 470 e 500 pontos para Ciências Humanas e Matemática, respectivamente, enquanto para as escolas privadas esses valores sobem para 580 e 620, mais de 100 pontos de diferença.

Quando olhamos para o tipos de dependência administrativa, obtemos resultados interessantes:

g1 <- 
  enem2021_limpo |> 
  filter(TP_DEPENDENCIA_ADM_ESC == "Federal") |> 
  ggplot(aes(x = NU_NOTA_CH, y = NU_NOTA_MT)) +
  geom_hex() +
  scale_fill_viridis_c(option = opcao_viridis) +
  labs(x = "", y = "", fill = "Contagem", title = "Federal") +
  limite_x +
  limite_y
g2 <- 
  enem2021_limpo |> 
  filter(TP_DEPENDENCIA_ADM_ESC == "Estadual") |> 
  ggplot(aes(x = NU_NOTA_CH, y = NU_NOTA_MT)) +
  geom_hex() +
  scale_fill_viridis_c(option = opcao_viridis) +
  labs(x = "", y = "", fill = "Contagem", title = "Estadual") +
  limite_x +
  limite_y
g3 <- 
  enem2021_limpo |> 
  filter(TP_DEPENDENCIA_ADM_ESC == "Municipal") |> 
  ggplot(aes(x = NU_NOTA_CH, y = NU_NOTA_MT)) +
  geom_hex() +
  scale_fill_viridis_c(option = opcao_viridis) +
  labs(x = "", y = "", fill = "Contagem", title = "Municipal") +
  limite_x +
  limite_y
g4 <- 
  enem2021_limpo |> 
  filter(TP_DEPENDENCIA_ADM_ESC == "Privada") |> 
  ggplot(aes(x = NU_NOTA_CH, y = NU_NOTA_MT)) +
  geom_hex() +
  scale_fill_viridis_c(option = opcao_viridis) +
  labs(x = "", y = "", fill = "Contagem", title = "Privada") +
  limite_x +
  limite_y
grid.arrange(g1, g2, g3, g4, nrow = 2,
             left = "Nota em Matemática",
             bottom = "Nota em Ciências Humanas")

Note como as concentrações de notas para escolas federais e privadas estão muito próximas, enquanto as notas para as escolcas estaduais e municipais apresentam uma grande defasagem.

Fica como exercício para o leitor verificar se esse tipo de comportamento se mantém para as notas das outras provas. O conjunto de dados completo do ENEM pode ser obtido no site do INEP. Entretanto, o conjunto de dados enem_limpo, utilizado nessa análise e bem mais leve, pode ser baixado neste link.