A educação brasileira carrega, ao longo de décadas, desafios estruturais que impactam diretamente o futuro de milhões de estudantes. Entre esses desafios, dois se destacam pela intensidade com que afetam a trajetória escolar: a distorção idade-série — quando o estudante está em uma série incompatível com sua idade — e o abandono escolar, fenômeno que interrompe o direito à educação e compromete oportunidades futuras.
Ambos os indicadores se conectam profundamente à desigualdade social, ao acesso desigual a políticas públicas e às condições socioeconômicas regionais. Em muitos contextos, a repetência e o atraso escolar funcionam como um ciclo que se retroalimenta: estudantes mais velhos, deslocados do grupo etário, tendem a apresentar menor engajamento, maior exposição a riscos e maior probabilidade de abandonar a escola.
Neste trabalho, busco compreender como esses dois fenômenos — distorção idade-série e abandono escolar — influenciam a taxa de aprovação no Brasil, utilizando dados oficiais do INEP entre 2022 e 2024. Por meio de análise estatística e visualização de dados, investigamos padrões, relações e possíveis implicações para o sistema educacional brasileiro.
Meu objetivo não é apenas descrever números, mas gerar reflexão sobre os fatores que moldam a permanência e o sucesso dos estudantes. Ao entender como essas variáveis se relacionam, contribuímos para uma discussão essencial: como garantir que mais alunos avancem em suas trajetórias escolares com dignidade e qualidade?
A reprovação e o abandono escolar continuam sendo indicadores críticos na educação básica brasileira. Entretanto, esses fenômenos não acontecem de forma isolada. Diversos estudos apontam que eles estão profundamente associados à distorção idade-série, situação em que o estudante acumula atrasos sucessivos que prejudicam seu aprendizado, sua motivação e seu vínculo com a escola.
O problema central que investigamos é:
Em que medida a distorção idade-série e o abandono escolar explicam a variação nas taxas de aprovação?
Justifica-se esta análise porque:
A distorção idade-série funciona como um marcador de desigualdade educacional.
O abandono escolar está associado a vulnerabilidades sociais e impactos econômicos.
A aprovação escolar é um dos principais indicadores de progressão e sucesso educacional.
Entender as relações entre esses indicadores auxilia gestores, pesquisadores e escolas na criação de políticas mais eficientes.
Além disso, o período analisado (2022–2024) é particularmente relevante, pois marca a fase de recuperação pós-pandemia, quando o país enfrentou picos de defasagem de aprendizagem e aumento nas desigualdades regionais.
A análise proposta parte da seguinte declaração de problema: entender como a distorção idade-série e o abandono escolar influenciam a taxa de aprovação no Brasil. Para abordar essa questão, utilizo os microdados oficiais do INEP referentes aos indicadores educacionais de 2022 a 2024, incluindo informações desagregadas por dependência administrativa, localização geográfica e etapas de ensino. Esses dados foram previamente tratados, padronizados e consolidados em uma base unificada, garantindo consistência, comparabilidade e ausência de duplicidades.
A metodologia empregada combina análise descritiva, estudos correlacionais e visualização gráfica. Primeiro, foram calculados indicadores agregados de aprovação, abandono e distorção idade-série, permitindo observar tendências gerais. Em seguida, aplicou-se uma análise de correlação para verificar a direção e intensidade das relações entre as variáveis. Por fim, utilizaram-se gráficos de dispersão e tendências para interpretar visualmente o comportamento dos fenômenos ao longo dos anos e entre diferentes grupos. Essa abordagem é adequada porque permite identificar, de forma direta, se taxas mais elevadas de distorção e abandono se associam a reduções nas taxas de aprovação — oferecendo evidências estatísticas e empíricas para sustentar conclusões.
Ao adotar essa técnica, minha intenção é fornecer um diagnóstico claro que ajuda a responder total ou parcialmente o problema proposto. Embora a correlação não determine causalidade, ela revela padrões consistentes que sugerem onde políticas públicas ou ações de gestão podem ser mais efetivas. A combinação de estatísticas descritivas e correlações permite mapear fragilidades do sistema educacional e identificar grupos mais vulneráveis a reprovação e abandono.
Essa análise também tem utilidade prática para potenciais “clientes” — como gestores escolares, secretarias de educação, pesquisadores e formuladores de políticas públicas. Os resultados ajudam a:
identificar fatores que mais pressionam a taxa de aprovação;
priorizar regiões, redes ou etapas de ensino que exigem intervenção imediata;
compreender como distorção e abandono caminham juntos e afetam o desempenho;
embasar decisões com evidências, evitando achismos;
orientar alocação de recursos, formação docente e políticas de permanência.
Com isso, a análise não apenas descreve o cenário educacional brasileiro, mas contribui para a formulação de estratégias mais eficientes, voltadas à redução da desigualdade e à melhoria da qualidade da educação.
Todos os pacotes necessários para a análise foram carregados antecipadamente com o objetivo de garantir transparência, reprodutibilidade e facilidade de replicação dos resultados. Ao explicitar previamente as dependências do projeto, qualquer leitor, avaliador ou pesquisador pode instalar as mesmas bibliotecas e reproduzir o processamento de dados e as análises estatísticas sem inconsistências ou incompatibilidades.
Permite importar arquivos Excel (.xlsx) diretamente para o R.
Fundamental porque os indicadores educacionais do INEP são fornecidos exatamente nesse formato.
Pacote central para manipulação e transformação de dados.
Usado para selecionar colunas, filtrar linhas, criar novas variáveis, agrupar dados e sumarizar resultados.
Conjunto de funções para manipulação de texto (strings).
Essencial para ajustar nomes de variáveis, extrair anos dos nomes de arquivos e padronizar categorias.
padronizar nomes das colunas (clean_names()),
remover linhas vazias ou duplicadas,
facilitar inspeções iniciais da base.
Principal biblioteca de visualização de dados no R.
Utilizado para gerar gráficos de correlação, dispersão e tendências temporais.
Todos os dados utilizados neste projeto estão disponíveis publicamente no portal do INEP, na área de dados abertos.
Link para fonte dos dados: INEP – Indicadores Educacionais
Os dados utilizados neste projeto foram obtidos no portal de Dados Abertos do Instituto Nacional de Estudos e Pesquisas Educacionais Anísio Teixeira (INEP), que publica anualmente indicadores oficiais da Educação Básica. O propósito original dessas bases é monitorar o desempenho e condições do fluxo escolar, permitindo que gestores, pesquisadores e o público geral acompanhem:
Taxas de aprovação, reprovação e abandono escolar
Indicadores de distorção idade-série
Resultados desagregados por ano, unidade da federação, localização (urbana/rural) e dependência administrativa (Federal, Estadual, Municipal)
As bases utilizadas correspondem aos anos 2022, 2023 e 2024, sendo disponibilizadas pelo INEP já em formato de planilha Excel (.xlsx). Cada arquivo contém múltiplas seções e cabeçalhos extensos, pois foram originalmente organizados para leitura humana, não para análise automática. Assim, foi necessário um processo consistente de limpeza.
Os dados originais possuíam:
Várias linhas de cabeçalho decorativo (identificação do INEP, título da tabela, explicações metodológicas).
Ausência de nomes claros para as colunas, exigindo criação manual.
Uso de vírgula no padrão brasileiro (“95,3”), necessitando conversão para ponto decimal.
Valores ausentes representados por “–”, células vazias ou zeros artificiais, dependendo do indicador.
O volume de variáveis variava entre arquivos, mas cada tabela continha aproximadamente:
4 variáveis categóricas (ano, UF/região, localização, dependência administrativa)
+38 a 60 variáveis numéricas, dependendo do tipo (rendimento ou distorção)
Essas características tornam essas bases típicas de dados governamentais brutos: completos, porém não imediatamente adequados para análise computacional.
limpar_inep_rendimento <- function(arquivo) {
# Ler arquivo pulando cabeçalhos decorativos
df <- read_excel(arquivo, skip = 9, col_names = FALSE)
# Criar nomes das colunas conforme estrutura oficial
nomes <- c(
"ano", "unidade_geografica", "localizacao", "dependencia_administrativa",
# Aprovação EF
paste0("aprov_fund_", c(
"total", "anos_iniciais", "anos_finais",
"1ano","2ano","3ano","4ano","5ano","6ano","7ano","8ano","9ano"
)),
# Aprovação EM
paste0("aprov_med_", c("total","1serie","2serie","3serie","4serie","nao_seriado")),
# Reprovação EF
paste0("reprov_fund_", c(
"total", "anos_iniciais", "anos_finais",
"1ano","2ano","3ano","4ano","5ano","6ano","7ano","8ano","9ano"
)),
# Reprovação EM
paste0("reprov_med_", c("total","1serie","2serie","3serie","4serie","nao_seriado")),
# Abandono EF
paste0("aband_fund_", c(
"total", "anos_iniciais", "anos_finais",
"1ano","2ano","3ano","4ano","5ano","6ano","7ano","8ano","9ano"
)),
# Abandono EM
paste0("aband_med_", c("total","1serie","2serie","3serie","4serie","nao_seriado"))
)
# Aplicar nomes
colnames(df) <- nomes
# Tratamento de dados
df <- df %>%
mutate(across(where(is.character), ~ gsub(",", ".", .))) %>% # vírgula → ponto
mutate(across(everything(), ~ na_if(., "--"))) %>% # "--" → NA
mutate(across(everything(), ~ na_if(., ""))) %>% # "" → NA
mutate(across(-c(ano, unidade_geografica, localizacao, dependencia_administrativa),
~ suppressWarnings(as.numeric(.)))) # converter números
return(df)
}
Esta função realiza o tratamento das planilhas de rendimento do INEP, que possuem várias linhas de cabeçalhos decorativos e valores inconsistentes. Primeiro ignoramos as linhas iniciais e aplicamos nomes padronizados às colunas, garantindo que cada indicador (aprovação, reprovação e abandono por série e nível de ensino) seja identificado corretamente. Em seguida, substituímos vírgulas por pontos, convertemos valores inválidos (“–”, strings vazias) em NA e transformamos as colunas numéricas para permitir análises estatísticas confiáveis.
limpar_inep_distorcao <- function(arquivo) {
df <- read_excel(arquivo, skip = 9, col_names = FALSE)
nomes <- c(
"ano", "unidade_geografica", "localizacao", "dependencia_administrativa",
# TDI – Ensino Fundamental
paste0("tdi_fund_", c(
"total","anos_iniciais","anos_finais",
"1ano","2ano","3ano","4ano","5ano",
"6ano","7ano","8ano","9ano"
)),
# TDI – Ensino Médio
paste0("tdi_med_", c("total","1serie","2serie","3serie","4serie"))
)
colnames(df) <- nomes
df <- df %>%
mutate(across(where(is.character), ~ gsub(",", ".", .))) %>%
mutate(across(everything(), ~ na_if(., "--"))) %>%
mutate(across(everything(), ~ na_if(., ""))) %>%
mutate(across(-c(ano, unidade_geografica, localizacao, dependencia_administrativa),
~ suppressWarnings(as.numeric(.))))
return(df)
}
Esta função segue a mesma lógica da anterior, mas aplicada às planilhas de distorção idade-série. Após ignorar os cabeçalhos decorativos, atribuímos nomes coerentes às colunas (TDI no EF e EM), padronizamos valores, tratamos ausências e convertemos os indicadores para formato numérico. Isso garante que os dados de TDI fiquem organizados e consistentes para integração com as demais bases.
library(readxl)
library(dplyr)
library(purrr)
library(janitor)
caminho <- "C:/Users/carlo/Downloads/data"
arquivos <- list(
rendimento_2022 = file.path(caminho, "tx_rend_brasil_regioes_ufs_2022.xlsx"),
rendimento_2023 = file.path(caminho, "tx_rend_brasil_regioes_ufs_2023.xlsx"),
rendimento_2024 = file.path(caminho, "tx_rend_brasil_regioes_ufs_2024.xlsx"),
distorcao_2022 = file.path(caminho, "TDI_BRASIL_REGIOES_UFS_2022.xlsx"),
distorcao_2023 = file.path(caminho, "TDI_BRASIL_REGIOES_UFS_2023.xlsx"),
distorcao_2024 = file.path(caminho, "TDI_BRASIL_REGIOES_UFS_2024.xlsx")
)
dados <- map(arquivos, ~ read_excel(.x) %>% clean_names())
names(dados) <- names(arquivos)
Aqui apenas organizamos os caminhos dos arquivos e realizamos uma leitura inicial. Esse passo cria uma estrutura clara e reproduzível para acessar todas as planilhas do INEP antes do tratamento definitivo.
dados <- map2(
names(arquivos),
arquivos,
function(nm, arq) {
if (grepl("rendimento", nm)) {
limpar_inep_rendimento(arq)
} else {
limpar_inep_distorcao(arq)
}
}
) %>% set_names(names(arquivos))
Utilizamos map2() para aplicar automaticamente a função correta (rendimento ou distorção) a cada arquivo. Isso padroniza o processo de limpeza para todos os anos (2022–2024) e assegura que todas as planilhas sejam tratadas da mesma maneira, eliminando inconsistências.
# Rendimento (2022–2024)
rendimento <- bind_rows(
dados$rendimento_2022 %>% mutate(ano = 2022),
dados$rendimento_2023 %>% mutate(ano = 2023),
dados$rendimento_2024 %>% mutate(ano = 2024)
)
# Distorção idade-série
distorcao <- bind_rows(
dados$distorcao_2022 %>% mutate(ano = 2022),
dados$distorcao_2023 %>% mutate(ano = 2023),
dados$distorcao_2024 %>% mutate(ano = 2024)
)
Neste passo consolidamos os dados de cada ano em duas grandes bases: rendimento e distorção. A união por ano permite análises comparativas, tendências e agregação dos indicadores ao longo do tempo.
# --- 1. Unir os datasets já tratados ---
rendimento$origem <- "rendimento"
distorcao$origem <- "distorcao"
# Garantir que ano, localização, unidade, dependência existam em ambos
chaves <- c("ano","unidade_geografica","localizacao","dependencia_administrativa")
# Selecionar só variáveis importantes
rend_key <- rendimento %>% select(any_of(chaves),
starts_with("aprov"),
starts_with("reprov"),
starts_with("aband"))
dist_key <- distorcao %>% select(any_of(chaves),
starts_with("tdi"))
# --- 2. Juntar (inner_join garante alinhamento perfeito entre bases) ---
base_final <- rend_key %>%
inner_join(dist_key, by = chaves)
glimpse(base_final)
## Rows: 1,772
## Columns: 75
## $ ano <dbl> 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2…
## $ unidade_geografica <chr> "Brasil", "Brasil", "Brasil", "Brasil", "Br…
## $ localizacao <chr> "Total", "Urbana", "Rural", "Total", "Urban…
## $ dependencia_administrativa <chr> "Total", "Total", "Total", "Federal", "Fede…
## $ aprov_fund_total <dbl> 94.2, 94.7, 90.8, 96.1, 96.0, 98.6, 93.8, 9…
## $ aprov_fund_anos_iniciais <dbl> 96.0, 96.5, 93.1, 97.5, 97.5, 97.5, 96.9, 9…
## $ aprov_fund_anos_finais <dbl> 92.1, 92.7, 87.5, 95.5, 95.4, 100.0, 92.7, …
## $ aprov_fund_1ano <dbl> 98.7, 98.7, 98.5, 98.4, 98.4, 100.0, 98.9, …
## $ aprov_fund_2ano <dbl> 97.8, 97.9, 97.5, 97.5, 97.4, 100.0, 98.4, …
## $ aprov_fund_3ano <dbl> 94.2, 94.7, 91.4, 95.6, 95.7, 85.7, 95.3, 9…
## $ aprov_fund_4ano <dbl> 95.0, 95.7, 91.0, 97.9, 97.9, 100.0, 97.3, …
## $ aprov_fund_5ano <dbl> 94.2, 95.3, 87.8, 97.9, 97.9, 100.0, 95.2, …
## $ aprov_fund_6ano <dbl> 92.4, 93.3, 86.3, 96.5, 96.5, 100.0, 94.3, …
## $ aprov_fund_7ano <dbl> 91.9, 92.6, 86.7, 95.4, 95.4, 100.0, 93.2, …
## $ aprov_fund_8ano <dbl> 91.3, 91.9, 86.9, 95.0, 94.9, 100.0, 91.8, …
## $ aprov_fund_9ano <dbl> 92.9, 93.2, 90.4, 95.1, 95.1, 100.0, 91.6, …
## $ aprov_med_total <dbl> 86.6, 86.7, 85.2, 88.3, 88.2, 88.6, 85.0, 8…
## $ aprov_med_1serie <dbl> 85.1, 85.2, 83.5, 84.6, 84.6, 84.5, 83.6, 8…
## $ aprov_med_2serie <dbl> 86.5, 86.6, 85.5, 89.4, 89.2, 90.5, 84.9, 8…
## $ aprov_med_3serie <dbl> 88.7, 88.8, 87.7, 91.9, 91.7, 93.6, 87.1, 8…
## $ aprov_med_4serie <dbl> 89.9, 90.1, 86.7, 89.6, 90.0, 84.0, 89.8, 9…
## $ aprov_med_nao_seriado <dbl> 79.2, 79.0, 80.5, 86.1, 86.2, 84.9, 74.6, 7…
## $ reprov_fund_total <dbl> 4.7, 4.3, 7.0, 3.8, 3.9, 1.4, 4.9, 4.8, 5.9…
## $ reprov_fund_anos_iniciais <dbl> 3.5, 3.1, 6.0, 2.4, 2.4, 2.5, 2.6, 2.4, 5.4…
## $ reprov_fund_anos_finais <dbl> 6.0, 5.7, 8.5, 4.4, 4.5, 0.0, 5.7, 5.6, 6.2…
## $ reprov_fund_1ano <dbl> 0.8, 0.8, 0.7, 1.4, 1.4, 0.0, 0.5, 0.4, 1.3…
## $ reprov_fund_2ano <dbl> 1.8, 1.8, 1.8, 2.5, 2.5, 0.0, 1.2, 1.2, 2.4…
## $ reprov_fund_3ano <dbl> 5.4, 5.0, 7.8, 4.1, 4.0, 14.3, 4.3, 4.1, 7.…
## $ reprov_fund_4ano <dbl> 4.5, 3.9, 8.0, 2.1, 2.1, 0.0, 2.2, 1.9, 6.2…
## $ reprov_fund_5ano <dbl> 5.2, 4.2, 10.8, 1.9, 2.0, 0.0, 4.2, 3.9, 8.…
## $ reprov_fund_6ano <dbl> 6.3, 5.7, 10.8, 3.4, 3.4, 0.0, 4.8, 4.7, 6.…
## $ reprov_fund_7ano <dbl> 6.4, 6.0, 9.6, 4.4, 4.4, 0.0, 5.4, 5.4, 6.4…
## $ reprov_fund_8ano <dbl> 6.5, 6.3, 8.4, 4.9, 5.0, 0.0, 6.3, 6.3, 6.2…
## $ reprov_fund_9ano <dbl> 4.8, 4.8, 4.8, 4.9, 4.9, 0.0, 6.0, 6.0, 6.1…
## $ reprov_med_total <dbl> 7.7, 7.8, 6.6, 9.5, 9.6, 8.9, 8.4, 8.5, 6.6…
## $ reprov_med_1serie <dbl> 9.4, 9.5, 8.2, 12.9, 13.0, 12.5, 10.2, 10.3…
## $ reprov_med_2serie <dbl> 7.6, 7.7, 6.2, 8.7, 8.9, 7.6, 8.4, 8.5, 6.3…
## $ reprov_med_3serie <dbl> 5.5, 5.6, 4.6, 6.2, 6.4, 4.5, 6.2, 6.3, 4.8…
## $ reprov_med_4serie <dbl> 6.0, 5.8, 8.4, 7.6, 7.2, 12.9, 4.9, 4.7, 9.…
## $ reprov_med_nao_seriado <dbl> 9.3, 9.1, 10.8, 10.4, 10.5, 9.3, 14.6, 15.8…
## $ aband_fund_total <dbl> 1.1, 1.0, 2.2, 0.1, 0.1, 0.0, 1.3, 1.3, 2.5…
## $ aband_fund_anos_iniciais <dbl> 0.5, 0.4, 0.9, 0.1, 0.1, 0.0, 0.5, 0.4, 1.5…
## $ aband_fund_anos_finais <dbl> 1.9, 1.6, 4.0, 0.1, 0.1, 0.0, 1.6, 1.6, 3.0…
## $ aband_fund_1ano <dbl> 0.5, 0.5, 0.8, 0.2, 0.2, 0.0, 0.6, 0.6, 1.3…
## $ aband_fund_2ano <dbl> 0.4, 0.3, 0.7, 0.0, 0.1, 0.0, 0.4, 0.3, 1.2…
## $ aband_fund_3ano <dbl> 0.4, 0.3, 0.8, 0.3, 0.3, 0.0, 0.4, 0.4, 1.2…
## $ aband_fund_4ano <dbl> 0.5, 0.4, 1.0, 0.0, 0.0, 0.0, 0.5, 0.4, 1.5…
## $ aband_fund_5ano <dbl> 0.6, 0.5, 1.4, 0.2, 0.1, 0.0, 0.6, 0.4, 2.1…
## $ aband_fund_6ano <dbl> 1.3, 1.0, 2.9, 0.1, 0.1, 0.0, 0.9, 0.9, 1.9…
## $ aband_fund_7ano <dbl> 1.7, 1.4, 3.7, 0.2, 0.2, 0.0, 1.4, 1.3, 2.4…
## $ aband_fund_8ano <dbl> 2.2, 1.8, 4.7, 0.1, 0.1, 0.0, 1.9, 1.9, 3.4…
## $ aband_fund_9ano <dbl> 2.3, 2.0, 4.8, 0.0, 0.0, 0.0, 2.4, 2.3, 4.1…
## $ aband_med_total <dbl> 5.7, 5.5, 8.2, 2.2, 2.2, 2.5, 6.6, 6.5, 8.9…
## $ aband_med_1serie <dbl> 5.5, 5.3, 8.3, 2.5, 2.4, 3.0, 6.2, 6.1, 9.0…
## $ aband_med_2serie <dbl> 5.9, 5.7, 8.3, 1.9, 1.9, 1.9, 6.7, 6.6, 8.9…
## $ aband_med_3serie <dbl> 5.8, 5.6, 7.7, 1.9, 1.9, 1.9, 6.7, 6.6, 8.3…
## $ aband_med_4serie <dbl> 4.1, 4.1, 4.9, 2.8, 2.8, 3.1, 5.3, 5.1, 10.…
## $ aband_med_nao_seriado <dbl> 11.5, 11.9, 8.7, 3.5, 3.3, 5.8, 10.8, 11.1,…
## $ tdi_fund_total <dbl> 12.3, 11.4, 18.5, 10.4, 10.4, 7.8, 14.2, 13…
## $ tdi_fund_anos_iniciais <dbl> 7.1, 6.6, 10.3, 4.2, 4.2, 3.8, 6.5, 5.7, 16…
## $ tdi_fund_anos_finais <dbl> 18.5, 17.0, 30.6, 13.0, 13.0, 12.9, 17.0, 1…
## $ tdi_fund_1ano <dbl> 4.0, 3.9, 4.3, 1.9, 2.0, 0.0, 4.3, 3.8, 10.…
## $ tdi_fund_2ano <dbl> 4.4, 4.3, 4.7, 2.9, 2.9, 5.9, 3.9, 3.4, 10.…
## $ tdi_fund_3ano <dbl> 6.3, 6.0, 8.3, 3.2, 3.2, 6.7, 5.8, 5.1, 15.…
## $ tdi_fund_4ano <dbl> 8.1, 7.5, 12.3, 4.0, 4.0, 6.7, 6.5, 5.5, 18…
## $ tdi_fund_5ano <dbl> 12.5, 11.2, 20.1, 8.1, 8.2, 0.0, 10.7, 9.6,…
## $ tdi_fund_6ano <dbl> 16.5, 15.0, 27.5, 11.0, 11.1, 0.0, 14.1, 13…
## $ tdi_fund_7ano <dbl> 18.2, 16.6, 30.7, 11.7, 11.7, 14.3, 15.9, 1…
## $ tdi_fund_8ano <dbl> 19.7, 18.0, 32.6, 14.8, 14.8, 16.7, 18.4, 1…
## $ tdi_fund_9ano <dbl> 19.8, 18.4, 31.7, 14.0, 14.0, 23.1, 19.3, 1…
## $ tdi_med_total <dbl> 22.2, 21.5, 34.4, 23.4, 23.6, 22.6, 24.4, 2…
## $ tdi_med_1serie <dbl> 24.2, 23.5, 35.5, 21.3, 21.1, 22.4, 26.7, 2…
## $ tdi_med_2serie <dbl> 21.3, 20.7, 33.1, 25.2, 25.5, 23.7, 23.4, 2…
## $ tdi_med_3serie <dbl> 20.4, 19.7, 34.2, 21.9, 22.2, 20.0, 22.6, 2…
## $ tdi_med_4serie <dbl> 30.8, 30.5, 34.1, 31.9, 31.8, 34.5, 24.6, 2…
Aqui unimos as duas bases tratadas utilizando variáveis comuns (ano, unidade, localização e dependência). O uso de inner_join garante que apenas combinações válidas e correspondentes sejam mantidas. O resultado é um dataset final completo, contendo simultaneamente aprovação, abandono e distorção para a mesma unidade de análise.
base_final <- base_final %>%
mutate(
# Indicadores combinados
distorcao_total = rowMeans(select(., tdi_fund_total, tdi_med_total), na.rm = TRUE),
abandono_total = rowMeans(select(., aband_fund_total, aband_med_total), na.rm = TRUE),
aprovacao_total = rowMeans(select(., aprov_fund_total, aprov_med_total), na.rm = TRUE)
)
Criamos três indicadores agregados principais — aprovação total, abandono total e distorção total. Eles sintetizam dezenas de variáveis em métricas únicas que representam o desempenho geral da educação. Esses indicadores servem como base para toda a análise estatística e gráfica do estudo.
# Mostrar 10 linhas e todas as colunas
head(base_final, 10)
library(dplyr)
resumo_variaveis <- base_final %>%
summarise(
across(
c(aprovacao_total, abandono_total, distorcao_total),
list(media = ~mean(., na.rm = TRUE),
mediana = ~median(., na.rm = TRUE),
minimo = ~min(., na.rm = TRUE),
maximo = ~max(., na.rm = TRUE),
desvio_padrao = ~sd(., na.rm = TRUE))
)
)
resumo_variaveis
As estatísticas mostram que a aprovação média é alta, enquanto abandono e distorção variam mais entre regiões e redes. O desvio-padrão relativamente elevado da distorção indica forte desigualdade entre unidades. Essas métricas oferecem uma visão geral do comportamento dos indicadores e ajudam a contextualizar padrões mais profundos.
library(dplyr)
correlacoes <- base_final %>%
select(aprovacao_total, distorcao_total, abandono_total)
as.data.frame(cor(correlacoes, use = "complete.obs"))
A análise de correlação revela relações claras:
Aprovação × Distorção: relação negativa moderada (cerca de –0.67).
Aprovação × Abandono: relação negativa forte (aprox. –0.79).
Distorção × Abandono: relação positiva significativa (aprox. +0.70).
Esses resultados indicam que quanto maior a distorção e o abandono, menor tende a ser a taxa de aprovação.
tabela_resumo <- base_final %>%
group_by(ano, unidade_geografica, localizacao) %>%
summarise(
media_aprov = mean(aprovacao_total, na.rm = TRUE),
media_aband = mean(abandono_total, na.rm = TRUE),
media_tdi = mean(distorcao_total, na.rm = TRUE),
.groups = "drop"
)
tabela_resumo
Os resumos por grupo mostram desigualdades persistentes: redes rurais e algumas UFs mantêm maiores níveis de distorção e abandono, enquanto regiões urbanas e federais apresentam melhores taxas de aprovação. Essas variações ajudam a identificar grupos e contextos prioritários.
library(ggplot2)
ggplot(base_final, aes(x = distorcao_total, y = aprovacao_total, color = localizacao)) +
geom_point(alpha = 0.7) +
geom_smooth(method = "lm", se = FALSE) +
labs(
title = "Relação entre Distorção Idade-Série e Taxa de Aprovação",
x = "Distorção Idade-Série (%)",
y = "Taxa de Aprovação (%)"
)
O gráfico evidencia uma tendência decrescente: unidades com maior distorção idade-série apresentam sistematicamente menores taxas de aprovação. A linha de regressão confirma essa relação negativa.
ggplot(base_final, aes(x = abandono_total, y = aprovacao_total)) +
geom_point(alpha = 0.6, color = "darkred") +
geom_smooth(method = "lm", color = "black") +
labs(
title = "Relação entre Abandono Escolar e Taxa de Aprovação",
x = "Taxa de abandono (%)",
y = "Taxa de aprovação (%)"
) +
theme_minimal()
Há uma clara queda na aprovação conforme o abandono escolar cresce. A dispersão mostra que mesmo pequenos aumentos no abandono estão associados a reduções perceptíveis na aprovação.
ggplot(base_final, aes(x = distorcao_total, y = abandono_total)) +
geom_point(alpha = 0.6, color = "steelblue") +
geom_smooth(method = "lm", color = "black") +
labs(
title = "Relação entre Distorção Idade-Série e Abandono Escolar",
x = "Distorção idade-série (%)",
y = "Abandono escolar (%)"
) +
theme_minimal()
A relação positiva indica que escolas e redes com maior distorção idade-série também tendem a apresentar maior abandono. Isso reforça a ideia de que atraso escolar e desistência fazem parte de um mesmo ciclo de exclusão.
A análise dos indicadores educacionais brasileiros entre 2022 e 2024 mostra de forma consistente que a distorção idade-série e o abandono escolar exercem influência direta e negativa sobre a taxa de aprovação. Os resultados revelam três padrões principais: (1) quanto maior a distorção idade-série, menor tende a ser a aprovação; (2) quanto maior o abandono, menor a aprovação; e (3) distorção e abandono caminham juntos, reforçando mutuamente seus efeitos sobre o fluxo escolar. Essa dinâmica ficou evidente nas correlações encontradas: a aprovação apresenta correlações negativas tanto com a distorção (r = –0.67) quanto com o abandono (r = –0.79), enquanto distorção e abandono possuem correlação positiva significativa (r = 0.70).
Do ponto de vista educacional, os resultados indicam que o fracasso escolar não se distribui de forma isolada: ele se acumula e se amplifica ao longo do tempo. Estudantes com atraso escolar enfrentam maiores barreiras de aprendizagem, maior probabilidade de reprovação e, como consequência, maior risco de abandono. Esses fatores reduzem diretamente a taxa de aprovação, criando um ciclo prolongado de exclusão educacional — especialmente em contextos mais vulneráveis. Assim, os achados reforçam a necessidade de políticas públicas voltadas à correção de fluxo, monitoramento preventivo do abandono, recuperação de aprendizagem, e intervenções direcionadas a grupos específicos (como redes rurais e estaduais).
Em síntese, entender essas relações não apenas esclarece o funcionamento dos indicadores educacionais, mas também contribui para a construção de um diagnóstico sólido que pode orientar gestores, escolas e pesquisadores na formulação de ações eficazes para melhorar o desempenho e promover maior equidade no sistema educacional brasileiro.