Análise de Acertos dos Residentes

Carregamento de Pacotes e Dados

Primeiro, carregamos os pacotes necessários para manipulação de dados (tidyverse) e formatação de tabelas (gt).

# Instale os pacotes se ainda não tiver: install.packages(c("tidyverse", "gt"))
library(tidyverse)
library(gt)

# Carregando o banco de dados
# O delimitador é ponto e vírgula (;), então usamos read_delim
dados <- read_delim("Banco de dados Gemini.csv", delim = ";", show_col_types = FALSE)

# Visualizando as primeiras linhas para confirmar o carregamento
head(dados)
# A tibble: 6 × 13
     ID Sexo    Ano_residencia Questao_1 Questao_2 Questao_3 Questao_4 Questao_5
  <dbl> <chr>            <dbl> <chr>     <chr>     <chr>     <chr>     <chr>    
1    30 Mascul…           2024 Correto   Correto   Correto   Correto   Errado   
2    31 Mascul…           2025 Errado    Correto   Correto   Errado    Correto  
3    32 Mascul…           2025 Correto   Correto   Correto   Correto   Correto  
4    39 Mascul…           2024 Errado    Correto   Correto   Errado    Correto  
5    44 Mascul…           2023 Correto   Errado    Correto   Correto   Correto  
6    47 Mascul…           2023 Errado    Errado    Correto   Errado    Correto  
# ℹ 5 more variables: Questao_6 <chr>, Questao_7 <chr>, Questao_8 <chr>,
#   Questao_9 <chr>, Questao_10 <chr>

Análise das Proporções de Acertos Vamos transformar os dados para calcular a porcentagem de respostas “Correto” para as questões de 1 a 10.

# Selecionar apenas as colunas das questões e transformar para formato longo
df_resumo <- dados %>%
  select(starts_with("Questao")) %>%
  pivot_longer(cols = everything(), 
               names_to = "Questao", 
               values_to = "Resultado") %>%
  # Extrair o número da questão para ordenar corretamente (opcional, mas bom para gráficos)
  mutate(Numero_Questao = as.numeric(str_extract(Questao, "\\d+"))) %>%
  group_by(Questao, Numero_Questao) %>%
  summarise(
    Total = n(),
    Acertos = sum(Resultado == "Correto", na.rm = TRUE),
    Proporcao = Acertos / Total,
    Porcentagem = Proporcao * 100,
    .groups = 'drop'
  ) %>%
  arrange(Numero_Questao)

# Exibindo a tabela formatada
df_resumo %>%
  select(Questao, Acertos, Total, Porcentagem) %>%
  gt() %>%
  tab_header(
    title = "Proporção de Acertos por Questão"
  ) %>%
  fmt_number(
    columns = c(Porcentagem),
    decimals = 1,
    suffixing = FALSE,
    pattern = "{x}%"
  )
Proporção de Acertos por Questão
Questao Acertos Total Porcentagem
Questao_1 29 40 72.5%
Questao_2 32 40 80.0%
Questao_3 40 40 100.0%
Questao_4 28 40 70.0%
Questao_5 30 40 75.0%
Questao_6 15 40 37.5%
Questao_7 18 40 45.0%
Questao_8 32 40 80.0%
Questao_9 21 40 52.5%
Questao_10 35 40 87.5%

Visualização Gráfica Abaixo, um gráfico de barras mostrando a taxa de acerto para cada questão.

ggplot(df_resumo, aes(x = reorder(Questao, Numero_Questao), y = Porcentagem)) +
  geom_col(fill = "#4E79A7", width = 0.7) +
  geom_text(aes(label = sprintf("%.1f%%", Porcentagem)), 
            vjust = -0.5, size = 3.5) +
  scale_y_continuous(limits = c(0, 110), breaks = seq(0, 100, 20)) +
  labs(
    title = "Taxa de Acertos por Questão",
    subtitle = "Análise baseada nas respostas 'Correto'",
    x = "Questão",
    y = "Porcentagem de Acertos (%)"
  ) +
  theme_minimal() +
  theme(
    axis.text.x = element_text(angle = 45, hjust = 1),
    panel.grid.major.x = element_blank()
  )