Financiamento e Desempenho na Pós-Graduação Brasileira: Uma Análise Integrada dos Discentes Stricto Sensu e da Concessão de Bolsas da CAPES
1 Introdução
A pós-graduação stricto sensu (Mestrado e Doutorado) constitui o principal pilar da produção científica, tecnológica e de inovação no Brasil. Coordenado e avaliado pela CAPES (Coordenação de Aperfeiçoamento de Pessoal de Nível Superior), o Sistema Nacional de Pós-Graduação (SNPG) forma dezenas de milhares de mestres e doutores anualmente, ao mesmo tempo em que enfrenta desafios históricos relacionados à assimetria regional, à retenção de talentos, ao tempo de titulação e à distribuição eficiente de recursos públicos de fomento (bolsas de estudo).
Compreender como o corpo discente está distribuído pelo país e como a concessão de bolsas da CAPES se relaciona com o porte, a excelência acadêmica (Conceito CAPES) e as taxas de sucesso (titulação vs. evasão) dos programas de pós-graduação é uma questão central para a ciência de dados aplicada a políticas públicas educacionais.
(Navegue pelas abas abaixo para explorar detalhadamente cada dimensão introdutória deste estudo).
1.1 Declaração do Problema
Qual é o problema endereçado e por que devemos nos interessar por ele?
O financiamento público da ciência no Brasil opera sob restrições orçamentárias constantes, exigindo que agências de fomento como a CAPES aloquem dezenas de milhares de bolsas de estudo entre milhares de Programas de Pós-Graduação (PPGs) distribuídos em um território continental marcado por desigualdades socioeconômicas e científicas. Nesse cenário, surgem questões críticas que frequentemente carecem de respostas empíricas integradas:
- Cobertura e Equidade de Fomento: Como se dá a relação entre o volume de alunos efetivamente matriculados em um programa de pós-graduação e a quantidade de bolsas concedidas pela CAPES? Existem disparidades severas de cobertura entre as macrorregiões brasileiras (ex.: Norte/Nordeste vs. Sudeste/Sul) ou entre Grandes Áreas do Conhecimento?
- Eficiência Acadêmica e Evasão: Qual é o perfil demográfico e acadêmico dos pós-graduandos brasileiros, quanto tempo levam para defender suas dissertações e teses, e em que medida o suporte financeiro via bolsas e o Conceito CAPES do programa estão associados a maiores taxas de titulação e menores índices de abandono/desligamento?
- Alocação Estratégica vs. Institucional: Como os diferentes mecanismos de fomento da CAPES — programas institucionais regulares (como DS, PROEX e PROSUP) versus programas estratégicos e induzidos (como PDPG e editais temáticos) — atendem às demandas de Mestrado e Doutorado?
Interessar-se por este problema é fundamental porque mais de 90% da produção científica nacional ocorre dentro dos programas de pós-graduação stricto sensu. Se os recursos de fomento forem mal distribuídos ou insuficientes, o país sofre com a “fuga de cérebros”, o aumento da evasão estudantil na pós-graduação e o aprofundamento das desigualdades científicas regionais.
1.2 Abordagem e Metodologia
Como planejamos abordar essa declaração de problema?
Para investigar essas questões de forma rigorosa e reprodutível, adotamos uma abordagem quantitativa e exploratória baseada na integração de duas bases de dados oficiais de dados abertos da CAPES:
- Base de Discentes da Pós-Graduação Stricto Sensu (Coleta Sucupira - Ano-Base 2021): Conjunto de microdados no nível do indivíduo contendo 419.905 registros e 37 variáveis, abrangendo todos os alunos matriculados, titulados, desligados ou que abandonaram cursos de Mestrado e Doutorado (acadêmicos e profissionais) no Brasil.
- Base de Concessão de Bolsas da CAPES por IES e Programa (Referência 2022): Conjunto de dados agregados contendo 13.815 registros e 17 variáveis, detalhando as 98.285 bolsas concedidas pela CAPES por Instituição de Ensino Superior (IES), Programa de Pós-Graduação, Nível (Mestrado, Doutorado, Pós-Doutorado) e Programa de Fomento.
A metodologia empregada segue o fluxo clássico da Ciência de Dados (Data Science Pipeline):
- Importação e Padronização (Data Ingestion &
Normalization): Leitura otimizada de arquivos de grande
porte separados por ponto e vírgula (
;) em codificaçãoISO-8859-1(Latin-1), padronização de textos e conversão de datas no padrão SAS/Oracle (DDMMMYYYY:HH:MM:SS) para objetosDatenativos do R. - Saneamento e Tratamento de Peculiaridades (Data
Cleaning): Identificação e recodificação de valores
ausentes codificados textualmente (como
"NÃO SE APLICA"e"NI"— Não Informado), filtragem de registros inconsistentes e tipagem adequada de fatores ordenados (como o Conceito CAPES de 1 a 7). - Reformulação e Engenharia de Atributos (Reshaping &
Feature Engineering): Transformação de dados entre os
formatos longo (long) e largo (wide) com
pivot_wider()epivot_longer(), separação e união de variáveis compostas, e criação de indicadores analíticos inéditos no nível do Programa de Pós-Graduação (CD_PROGRAMA_IES) e Nível Acadêmico. - Integração Relacional (Data Merging): Cruzamento (relational join) entre o quadro discente agregado dos programas e as concessões de bolsas da CAPES, permitindo mensurar diretamente a razão de bolsas por aluno ativo, a taxa de titulação e a taxa de evasão.
1.3 Técnicas Propostas
Quais técnicas e ferramentas específicas sustentarão a solução do problema?
A arquitetura técnica deste estudo combina manipulação avançada de dados com recursos modernos de visualização estática e interativa em R:
- Agregação Multinível e Cruzamento Relacional: Como
os microdados de discentes não informam individualmente o recebimento de
bolsa (por restrições de sigilo e arquitetura da Plataforma Sucupira),
propomos uma técnica de agregação multinível por chave
composta (
CD_PROGRAMA_IES+NIVEL_PADRAO). Agregamos os 419.905 discentes nos 4.696 programas de pós-graduação e cruzamos com os 3.814 programas contemplados na base de bolsas (atingindo mais de 99,3% de interseção dos programas financiados). - Reformulação Estrutural (Pivoting): Utilização de pivotagem para desdobrar as concessões de bolsas por modalidade de fomento (Institucional vs. Estratégico) e por situação acadêmica (Matriculado, Titulado, Evadido), viabilizando o cálculo de taxas de conversão e cobertura.
- Criação de Indicadores Compostos: Desenvolvimento
de variáveis derivadas essenciais, tais como:
- Idade Estimada e Tempo Efetivo de Curso: Derivados das datas de nascimento, matrícula e situação.
- Taxa de Cobertura de Bolsas
(
TAXA_COBERTURA_BOLSAS): Razão entre o total de bolsas CAPES concedidas ao programa/nível e o total de discentes ativos/matriculados naquele programa/nível. - Taxa de Evasão (
TAXA_EVASAO) e Taxa de Sucesso na Titulação (TAXA_TITULACAO): Proporções calculadas sobre o corpo discente para avaliar a eficiência acadêmica de cada PPG.
- Visualização Interativa e Tabelas Dinâmicas:
Emprego de gráficos construídos com
ggplot2e convertidos para objetos interativos viaplotly, além de tabelas paginadas, pesquisáveis e ordenáveis via pacoteDT, permitindo que o leitor explore tanto o panorama macroeconômico quanto o desempenho específico de qualquer universidade ou programa do país.
1.4 Potenciais Clientes e Impacto
Como esta análise ajudará os potenciais clientes e partes interessadas (stakeholders)?
Os resultados, indicadores e produtos interativos gerados por esta análise oferecem valor direto para quatro grupos principais de clientes:
- Gestores Públicos da CAPES, MEC e Fundações Estaduais de Amparo à Pesquisa (FAPs): Poderão identificar “desertos de financiamento” — regiões, estados ou áreas estratégicas onde programas com bom desempenho acadêmico possuem baixa cobertura de bolsas por aluno — subsidiando a calibração de novos editais de fomento (como o PDPG).
- Pró-Reitorias de Pós-Graduação (PRPGs) e Coordenadores de PPGs nas IES: Terão em mãos um benchmarking nacional do tempo médio de titulação, das taxas de abandono e do volume de bolsas recebidas por programas de mesmo Conceito CAPES e Grande Área, auxiliando no planejamento estratégico para a Avaliação Quadrienal da CAPES.
- Estudantes de Graduação e Futuros Pós-Graduandos: Poderão consultar a base consolidada para tomar decisões de carreira mais informadas ao escolher onde cursar seu Mestrado ou Doutorado, avaliando objetivamente a nota do programa, o tempo típico de conclusão e a probabilidade de obtenção de bolsa da CAPES.
- Pesquisadores em Ciência de Dados, Cientometria e Economia da Educação: Contarão com um protocolo documentado e reprodutível de limpeza, higienização e pareamento das bases abertas da Plataforma Sucupira/CAPES, superando as barreiras técnicas de codificação e granularidade que costumam dificultar o uso integrado desses dados.
2 Pacotes Requeridos
Para garantir a total reprodutibilidade deste estudo, todos os pacotes utilizados em todas as etapas do projeto são carregados antecipadamente nesta seção. Caso algum pacote não esteja presente no ambiente local, o bloco de código abaixo verifica e realiza sua instalação automática antes do carregamento.
# Lista de pacotes necessários para a análise e geração do relatório
pacotes_necessarios <- c(
"rmdformats", # Templates HTML avançados para R Markdown (readthedown)
"dplyr", # Gramática de manipulação, filtragem, agrupamento e junção de dados
"tidyr", # Reformulação estrutural de dados (pivot_wider, pivot_longer, unite, separate)
"readr", # Leitura rápida e controlada de arquivos tabulares (CSV)
"stringr", # Manipulação, limpeza e padronização de cadeias de caracteres (strings)
"lubridate", # Tratamento, conversão e aritmética de datas e fusos horários
"forcats", # Manipulação de variáveis categóricas e fatores ordenados
"ggplot2", # Criação de visualizações gráficas baseadas na Gramática dos Gráficos
"plotly", # Construção de gráficos interativos para exploração web
"DT", # Geração de tabelas HTML interativas (DataTables) com busca e paginação
"knitr", # Motor de renderização dinâmica de relatórios e tabelas estáticas (kable)
"kableExtra", # Estilização avançada de tabelas HTML/Bootstrap
"scales" # Formatação de escalas numéricas, percentuais e monetárias nos gráficos
)
# Instala automaticamente pacotes que ainda não estejam instalados na máquina
pacotes_faltantes <- pacotes_necessarios[!(pacotes_necessarios %in% installed.packages()[, "Package"])]
if (length(pacotes_faltantes) > 0) {
install.packages(pacotes_faltantes, repos = "https://cloud.r-project.org")
}
# Carrega todos os pacotes silenciosamente na sessão R
invisible(lapply(pacotes_necessarios, library, character.only = TRUE))3 Preparação dos Dados
Nesta seção, apresentamos a origem oficial dos conjuntos de dados, detalhamos suas características estruturais e peculiaridades de coleta, executamos um processo sistemático e documentado de limpeza, transformação e integração em R, e exibimos o conjunto de dados limpo acompanhado do resumo consolidado de suas variáveis de interesse.
3.1 Fonte Original dos Dados
Os dois conjuntos de dados utilizados neste projeto são públicos,
gratuitos e provenientes do Portal de Dados Abertos da
CAPES (Coordenação de Aperfeiçoamento de Pessoal de Nível
Superior), autarquia vinculada ao Ministério da Educação (MEC),
integrados também ao Portal Brasileiro de Dados Abertos
(dados.gov.br):
- Discentes da Pós-Graduação Stricto Sensu no Brasil
(2021):
- Fonte Oficial: Portal de Dados Abertos da CAPES — Conjunto de Dados: Discentes da Pós-Graduação Stricto Sensu do Brasil
- Arquivo utilizado:
br-capes-colsucup-discentes-2021-2025-03-31 (1).csv(~171,6 MB).
- Concessão de Bolsas da CAPES por Instituição de Ensino
Superior — IES (2022):
- Fonte Oficial: Portal de Dados Abertos da CAPES — Conjunto de Dados: Concessão de Bolsas de Pós-Graduação da CAPES no Brasil
- Arquivo utilizado:
br-capes-concessao-bolsas-ies-2022-2023-03-01.csv(~2,8 MB).
3.2 Explicação Minuciosa dos Dados de Origem
Antes de qualquer manipulação algorítmica, é indispensável compreender a natureza institucional, o momento de coleta, a dimensionalidade original e as peculiaridades técnicas de cada base de dados bruta.
3.2.1 Base 1: Microdados de Discentes (Plataforma Sucupira)
- Propósito Original: Registrar individualmente o vínculo e o histórico acadêmico de todos os estudantes de pós-graduação stricto sensu do Brasil para fins do Censo da Pós-Graduação e da Avaliação Quadrienal da CAPES (ciclo 2021–2024), coletados anualmente junto às coordenadorias de cada PPG por meio do módulo Coleta da Plataforma Sucupira.
- Período de Coleta e Atualização: Os dados
referem-se ao Ano-Base de 2021
(
AN_BASE = 2021), com extração e consolidação oficial disponibilizada pela CAPES em 31 de março de 2025 (conforme indicado no sufixo do arquivo2025-03-31). - Dimensões Originais: O arquivo bruto possui 419.905 observações (linhas) e 37 variáveis (colunas). Cada linha representa o vínculo de um discente em um programa de pós-graduação naquele ano-base.
- Peculiaridades Técnicas e Registro de Valores
Ausentes:
- Formato e Codificação: Arquivo separado por ponto e
vírgula (
;) e codificado emISO-8859-1(Latin-1), padrão legado de sistemas governamentais brasileiros. - Anonimização Parcial (LGPD): O documento de
identificação (
NR_DOCUMENTO_DISCENTE) encontra-se mascarado no formato***.734.169-**, mas o identificador único numérico do indivíduo no sistema (ID_PESSOA) é preservado. - Codificação Textual de Valores Ausentes
(
"NÃO SE APLICA"e"NI"): Em vez de células vazias (NA), a base utiliza a string"NÃO SE APLICA"em 337.215 linhas (80,3% da base) para as variáveisNM_TESE_DISSERTACAOeNM_ORIENTADOR_PRINCIPAL, e o valor numérico0paraQT_MES_TITULACAO. Isso ocorre porque essas informações só são preenchidas para os 82.690 alunos com situação"TITULADO"no ano-base; para alunos ainda"MATRICULADO"(321.147),"DESLIGADO"(10.962) ou que"ABANDONOU"(4.823), o sistema preenche"NÃO SE APLICA"e0meses. Há ainda1registro com"NI"emNM_PAIS_NACIONALIDADE_DISCENTEe 13.706 valores ausentes (NA) na colunaCD_ENTIDADE_EMEC(referentes a institutos de pesquisa como FIOCRUZ, INPA e IMPA, que são credenciados na CAPES, mas não possuem código e-MEC de graduação). - Conceito CAPES Alfanumérico
(
CD_CONCEITO_PROGRAMA): Embora a escala de notas da CAPES vá de1a7, a coluna é do tipo caractere (chr) porque contém 1.281 registros com o conceito"A"(atribuído a cursos recém-aprovados em fase de implantação que ainda equivalem ao conceito mínimo 3). - Datas no Padrão SAS/Oracle
(
DDMMMYYYY:HH:MM:SS): As variáveisDT_MATRICULA_DISCENTEeDT_SITUACAO_DISCENTEestão gravadas como texto com abreviação do mês em inglês e carimbo de hora zerado (ex.:"06AUG2020:00:00:00"), exigindo parsing específico.
- Formato e Codificação: Arquivo separado por ponto e
vírgula (
3.2.2 Base 2: Concessão de Bolsas da CAPES por IES e Programa
- Propósito Original: Dar transparência ativa à distribuição de bolsas de estudo e pesquisa financiadas pela CAPES (Sistemas SCBA/SICAPES), discriminando quantas cotas foram pagas por instituição, programa de pós-graduação, modalidade de fomento e nível acadêmico.
- Período de Coleta e Atualização: Os dados
referem-se ao Ano de Referência de 2022
(
AN_REFERENCIA = 2022), com extração consolidada em 01 de março de 2023 (2023-03-01). (Nota metodológica: como o vínculo discente de 2021 na Sucupira reflete a base instalada de alunos e o conceito vigente que baliza a distribuição de cotas do ciclo seguinte, o pareamento entre o corpo discente de 2021 e a concessão de bolsas de 2022 é estruturalmente consistente, apresentando 99,3% de compatibilidade nos códigos de programas). - Dimensões Originais: O arquivo bruto contém 13.815 observações (linhas) e 17 variáveis (colunas), totalizando 98.285 bolsas concedidas (sendo 50.699 de Doutorado, 44.019 de Mestrado, 3.542 de Pós-Doutorado e 25 na categoria Outros).
- Peculiaridades Técnicas e Registro de Valores
Ausentes:
- Granularidade Múltipla por Programa: Um mesmo
Programa de Pós-Graduação (
CD_PROGRAMA) aparece em múltiplas linhas caso receba bolsas de diferentes programas de fomento (SG_PROGRAMA_FOMENTO, comoDS,PROEX,PROSUP,PDPG-FAP, etc.) ou para diferentes níveis (NM_NIVEL_PADRAO). - Valores Ausentes Codificados como
"NI"(Não Informado): Embora não existam células vazias (NA) no arquivo bruto, uma inspeção minuciosa revela 47 linhas ondeCD_PROGRAMA == "NI"e 428 linhas ondeNM_PROGRAMA,NM_GRANDE_AREA,NM_AREA_AVALIACAOeNM_AREA_CONHECIMENTOestão preenchidos como"NI". Isso ocorre em concessões de programas especiais de fomento (como Pós-Doutorado institucional ou projetos interinstitucionais) alocadas diretamente à IES sem vínculo a um PPG específico.
- Granularidade Múltipla por Programa: Um mesmo
Programa de Pós-Graduação (
3.3 Etapas de Importação e Limpeza dos Dados
A seguir, será mostrada as etapas de impórtação, limpeza e filtragem dos dados. ### Etapa 1: Importação Controlada dos Arquivos Brutos
Importamos ambos os arquivos CSV utilizando read.csv2()
com codificação latin1 e
stringsAsFactors = FALSE, garantindo a correta
interpretação dos caracteres acentuados da língua portuguesa e
preservando os códigos identificadores como texto/inteiros sem
distorção.
# 1. Importação da base bruta de Discentes (Coleta Sucupira - 2021)
discentes_bruto <- read.csv2(
file = "datasets/br-capes-colsucup-discentes-2021-2025-03-31 (1).csv",
fileEncoding = "latin1",
stringsAsFactors = FALSE,
na.strings = c("", "NA")
)
# 2. Importação da base bruta de Concessão de Bolsas (CAPES - 2022)
bolsas_bruto <- read.csv2(
file = "datasets/br-capes-concessao-bolsas-ies-2022-2023-03-01.csv",
fileEncoding = "latin1",
stringsAsFactors = FALSE,
na.strings = c("", "NA")
)
# Verificação imediata das dimensões brutas importadas
tibble(
Conjunto_de_Dados = c("1. Discentes Stricto Sensu (Bruto)", "2. Concessão de Bolsas CAPES (Bruto)"),
Observacoes_Linhas = c(nrow(discentes_bruto), nrow(bolsas_bruto)),
Variaveis_Colunas = c(ncol(discentes_bruto), ncol(bolsas_bruto))
) %>%
kable(
col.names = c("Conjunto de Dados Importado", "Nº de Linhas (Observações)", "Nº de Colunas (Variáveis)"),
format.args = list(big.mark = ".", decimal.mark = ","),
caption = "Tabela 2: Dimensões originais dos conjuntos de dados imediatamente após a importação."
) %>%
kable_styling(bootstrap_options = c("striped", "hover", "condensed"), full_width = FALSE)| Conjunto de Dados Importado | Nº de Linhas (Observações) | Nº de Colunas (Variáveis) |
|---|---|---|
|
419.905 | 37 |
|
13.815 | 17 |
3.3.1 Etapa 2: Limpeza, Padronização e realização de cálculos a partir dos Microdados dos Discentes
Por que realizamos estas operações de limpeza na base de discentes?
- Seleção de Variáveis Relevantes: Das 37 colunas
originais, removemos metadados internos de fotografia de banco de dados
(
ID_ADD_FOTO_PROGRAMA,ID_ADD_FOTO_PROGRAMA_IES), identificadores pessoais sensíveis ou mascarados (NM_DISCENTE,NR_DOCUMENTO_DISCENTE,TP_DOCUMENTO_DISCENTE) e colunas redundantes, mantendo as variáveis analíticas essenciais. - Recodificação de Valores Ausentes Implícitos
(
"NÃO SE APLICA"e"NI"): Conforme diagnosticado na seção 3.2,QT_MES_TITULACAO == 0para alunos não titulados não significa que o aluno concluiu o curso em zero meses, mas sim que o tempo de titulação ainda não se aplica. Manter zeros distorceria severamente a média de tempo de titulação. Portanto, convertemosQT_MES_TITULACAOparaNAsempre queNM_SITUACAO_DISCENTE != "TITULADO"ou quando o valor for<= 0, e recodificamos"NI"em nacionalidade paraNA. - Conversão de Datas Não Normalizadas
(
DT_MATRICULA_DISCENTEeDT_SITUACAO_DISCENTE): Os textos no formato"06AUG2020:00:00:00"possuem nomes de meses em inglês. Extraímos os primeiros 9 caracteres ("06AUG2020") e convertemos para a classeDateusandoas.Date(..., format = "%d%b%Y")comLC_TIME = "C". - Normalização de Conceito CAPES (
CONCEITO_NUM) e Criação de Novas Variáveis:- Convertimos o conceito
"A"(cursos novos autorizados) para o valor numérico3(nota base de entrada no SNPG) e criamos a variável numéricaCONCEITO_CAPES_NUM(de 1 a 7), além da variável categórica de excelência (PERFIL_EXCELENCIA: notas 6 e 7 como “Excelência Internacional (6-7)”, 4 e 5 como “Consolidado (4-5)”, e 1 a 3 como “Em Consolidação (1-3)”). - União e Harmonização de Nível Acadêmico: Enquanto a
base de discentes distingue
"MESTRADO","MESTRADO PROFISSIONAL","DOUTORADO"e"DOUTORADO PROFISSIONAL", a base de bolsas classifica apenas em"MESTRADO"e"DOUTORADO". Criamos a variável padronizadaNIVEL_PADRAOagrupando Mestrado Acadêmico/Profissional em"MESTRADO"e Doutorado Acadêmico/Profissional em"DOUTORADO"para viabilizar a mesclagem exata entre as bases. - Cálculo da Idade do Discente
(
IDADE_DISCENTE): Criada a partir da diferença entre o ano-base (AN_BASE = 2021) e o ano de nascimento (AN_NASCIMENTO_DISCENTE), filtrando eventuais registros com idades biologicamente implausíveis (< 18 ou > 90 anos). - União de Variáveis (
LOCAL_IES): Unimos a sigla da UF (SG_UF_PROGRAMA) e a sigla da instituição (SG_ENTIDADE_ENSINO) em um identificador legível (UF_IES, ex.:"PE - UFPE").
- Convertimos o conceito
# Salva a configuração de locale atual e usa locale "C" temporariamente para ler meses em inglês (JAN, FEB, AUG...)
locale_antigo <- Sys.getlocale("LC_TIME")
Sys.setlocale("LC_TIME", "C")#> [1] "C"
discentes_limpo <- discentes_bruto %>%
# 1. Seleção das variáveis analíticas de interesse
select(
AN_BASE, ID_PESSOA, CD_PROGRAMA_IES, NM_PROGRAMA_IES,
CD_ENTIDADE_CAPES, SG_ENTIDADE_ENSINO, NM_ENTIDADE_ENSINO,
CS_STATUS_JURIDICO, DS_DEPENDENCIA_ADMINISTRATIVA,
NM_REGIAO, SG_UF_PROGRAMA, NM_MUNICIPIO_PROGRAMA_IES,
NM_GRANDE_AREA_CONHECIMENTO, NM_AREA_AVALIACAO,
NM_MODALIDADE_PROGRAMA, DS_GRAU_ACADEMICO_DISCENTE,
CD_CONCEITO_PROGRAMA, AN_NASCIMENTO_DISCENTE, DS_FAIXA_ETARIA,
NM_PAIS_NACIONALIDADE_DISCENTE, ST_INGRESSANTE, NM_SITUACAO_DISCENTE,
DT_MATRICULA_DISCENTE, DT_SITUACAO_DISCENTE, QT_MES_TITULACAO
) %>%
# 2. Padronização de strings e tratamento de ausentes codificados como texto
mutate(
NM_PROGRAMA_IES = str_squish(str_to_upper(NM_PROGRAMA_IES)),
SG_ENTIDADE_ENSINO = str_squish(str_to_upper(SG_ENTIDADE_ENSINO)),
NM_PAIS_NACIONALIDADE_DISCENTE = na_if(NM_PAIS_NACIONALIDADE_DISCENTE, "NI"),
# 3. Conversão das datas do padrão SAS ("06AUG2020:00:00:00") para classe Date
DT_MATRICULA = as.Date(str_sub(DT_MATRICULA_DISCENTE, 1, 9), format = "%d%b%Y"),
DT_SITUACAO = as.Date(str_sub(DT_SITUACAO_DISCENTE, 1, 9), format = "%d%b%Y"),
# 4. Normalização do Conceito CAPES ("A" equivale a curso recém-aprovado nota 3)
CONCEITO_CAPES_NUM = as.integer(ifelse(CD_CONCEITO_PROGRAMA == "A", "3", CD_CONCEITO_PROGRAMA)),
PERFIL_EXCELENCIA = case_when(
CONCEITO_CAPES_NUM >= 6 ~ "Excelência Internacional (6 e 7)",
CONCEITO_CAPES_NUM >= 4 ~ "Consolidado (4 e 5)",
TRUE ~ "Em Consolidação (1 a 3 / A)"
),
# 5. Harmonização do Nível Acadêmico para cruzamento com a base de Bolsas
NIVEL_PADRAO = case_when(
str_detect(DS_GRAU_ACADEMICO_DISCENTE, "DOUTORADO") ~ "DOUTORADO",
str_detect(DS_GRAU_ACADEMICO_DISCENTE, "MESTRADO") ~ "MESTRADO",
TRUE ~ "OUTROS"
),
# 6. Criação da variável de Idade do Discente e Tempo de Titulação Válido (apenas titulados)
IDADE_DISCENTE = AN_BASE - AN_NASCIMENTO_DISCENTE,
IDADE_DISCENTE = ifelse(IDADE_DISCENTE < 18 | IDADE_DISCENTE > 90, NA_integer_, IDADE_DISCENTE),
MESES_TITULACAO_VALIDO = ifelse(NM_SITUACAO_DISCENTE == "TITULADO" & QT_MES_TITULACAO > 0,
QT_MES_TITULACAO, NA_integer_)
) %>%
# 7. União de variáveis (UF + Sigla da IES) para identificação rápida
unite("UF_IES", SG_UF_PROGRAMA, SG_ENTIDADE_ENSINO, sep = " - ", remove = FALSE) %>%
# Remove as colunas de data brutas em texto após a conversão
select(-DT_MATRICULA_DISCENTE, -DT_SITUACAO_DISCENTE)
# Restaura o locale original do sistema
Sys.setlocale("LC_TIME", locale_antigo)#> [1] "Portuguese_Brazil.utf8"
3.3.2 Etapa 3: Limpeza, Filtragem e Reformulação da Base de Bolsas
Por que realizamos estas operações na base de bolsas?
- Filtragem de Registros Não Vinculados a Programas
Stricto Sensu: Na base de bolsas, existem 47 registros
com
CD_PROGRAMA == "NI"(bolsas avulsas não alocadas a um PPG) e concessões de"PÓS-DOUTORADO"(2.595 linhas) e"OUTROS"(23 linhas), que não correspondem a discentes de Mestrado e Doutorado stricto sensu. Filtramos os registros comCD_PROGRAMA != "NI"eNM_NIVEL_PADRAO %in% c("MESTRADO", "DOUTORADO")para garantir consistência de escopo ao mesclar com a base de discentes (mantendo também um objeto separado com o total geral da IES quando necessário). - Separação de Variável Composta
(
CD_PROGRAMA): O código de um programa na CAPES (ex.:"40015017007P5") é uma chave composta onde os 8 primeiros dígitos ("40015017") identificam a Entidade/IES e os 5 últimos ("007P5") identificam a sequência do programa e seu dígito verificador. Utilizamosseparate()para demonstrar a decomposição estrutural dessa variável. - Reformulação de Longo para Largo
(
pivot_wider): Como a base de bolsas está em formato longo (múltiplas linhas para um mesmo programa/nível devido aos diferentes programas de fomento e tiposINSTITUCIONALvs.ESTRATÉGICO), aplicamos uma agregação seguida depivot_wider()para transformar as categorias deTP_PROGRAMAem colunas separadas (BOLSAS_INSTITUCIONALeBOLSAS_ESTRATEGICO), além de calcular oTOTAL_BOLSAS_CAPESe a quantidade de linhas de fomento distintas (QTD_FONTES_FOMENTO) por Programa e Nível.
# Limpeza, separação e reformulação (Long -> Wide) da base de Bolsas CAPES
bolsas_por_programa_nivel <- bolsas_bruto %>%
# 1. Filtra registros válidos de programas Stricto Sensu (Mestrado e Doutorado)
filter(
CD_PROGRAMA != "NI",
NM_NIVEL_PADRAO %in% c("MESTRADO", "DOUTORADO"),
QT_BOLSAS_CONCEDIDAS > 0
) %>%
# 2. Demonstração de separação do código composto do programa (8 dígitos IES + 5 caracteres do PPG)
separate(
col = CD_PROGRAMA,
into = c("CD_IES_EXTRAIDO", "SUFIXO_PPG"),
sep = 8,
remove = FALSE
) %>%
# 3. Padroniza o texto do tipo de programa de fomento para pivotagem
mutate(
TIPO_FOMENTO_CLEAN = ifelse(TP_PROGRAMA == "INSTITUCIONAL", "BOLSAS_INSTITUCIONAL", "BOLSAS_ESTRATEGICO")
) %>%
# 4. Agrupa por Programa, Nível e Tipo de Fomento
group_by(CD_PROGRAMA, NM_NIVEL_PADRAO, TIPO_FOMENTO_CLEAN) %>%
summarise(
BOLSAS_SOMA = sum(QT_BOLSAS_CONCEDIDAS, na.rm = TRUE),
FONTES_DISTINTAS = n_distinct(SG_PROGRAMA_FOMENTO),
.groups = "drop"
) %>%
# 5. Reformulação de formato Longo (Long) para Largo (Wide) com pivot_wider
pivot_wider(
id_cols = c(CD_PROGRAMA, NM_NIVEL_PADRAO),
names_from = TIPO_FOMENTO_CLEAN,
values_from = BOLSAS_SOMA,
values_fill = list(BOLSAS_SOMA = 0)
) %>%
# 6. Criação da variável de total de bolsas concedidas (Institucional + Estratégico)
mutate(
TOTAL_BOLSAS_CAPES = BOLSAS_INSTITUCIONAL + BOLSAS_ESTRATEGICO,
PROP_BOLSAS_ESTRATEGICAS = round((BOLSAS_ESTRATEGICO / TOTAL_BOLSAS_CAPES) * 100, 2)
)3.3.3 Etapa 4: Mesclagem (Merge) dos Conjuntos de Dados e Criação de Indicadores Analíticos
Por que agregamos os discentes por Programa/Nível e mesclamos com a base de bolsas?
Para responder ao problema central do projeto — a relação entre o
financiamento da CAPES e o desempenho/cobertura dos programas de
pós-graduação — precisamos integrar as duas bases na mesma unidade de
análise: Programa de Pós-Graduação × Nível Acadêmico
(CD_PROGRAMA_IES + NIVEL_PADRAO).
Nesta etapa:
- Agregamos os 419.905 discentes por programa e nível
(
MESTRADOeDOUTORADO), contabilizando o número de discentes segundo sua situação (MATRICULADO,TITULADO,ABANDONOU,DESLIGADO), o número de ingressantes no ano, a idade média e a mediana/média do tempo de titulação (em meses). - Realizamos a junção relacional
(
left_join) com a base reformulada de bolsas (bolsas_por_programa_nivel). Para os programas/níveis que não receberam cotas de bolsas no período (ex.: mestrados profissionais privados ou programas sem bolsas alocadas), preenchemos os contadores de bolsas com0. - Criamos variáveis analíticas derivadas
fundamentais:
TOTAL_DISCENTES: Total de discentes vinculados ao programa/nível no ano-base.DISCENTES_EVADIDOS: Soma dos alunos com status"ABANDONOU"+"DESLIGADO".TAXA_TITULACAO_PCT: Percentual de discentes que defenderam a dissertação/tese no ano em relação ao total de vinculados.TAXA_EVASAO_PCT: Percentual de discentes evadidos (abandono ou desligamento) em relação ao total de vinculados.BOLSAS_POR_100_MATRICULADOS(Índice de Cobertura de Bolsas): Quantidade de bolsas CAPES concedidas para cada 100 alunos ativamente matriculados no programa/nível.DEFICIT_DESCOBERTOS_ESTIMADO: Estimativa absoluta da diferença entre o número de alunos ativamente matriculados e o total de bolsas CAPES concedidas ao programa (truncado em zero quando o número de cotas anuais supera os matriculados remanescentes no final do ano-base).
# 1. Agregação dos microdados de Discentes ao nível de Programa (PPG) e Nível (Mestrado/Doutorado)
discentes_agregado <- discentes_limpo %>%
group_by(
CD_PROGRAMA_IES, NM_PROGRAMA_IES, CD_ENTIDADE_CAPES,
SG_ENTIDADE_ENSINO, NM_ENTIDADE_ENSINO, UF_IES,
CS_STATUS_JURIDICO, DS_DEPENDENCIA_ADMINISTRATIVA,
NM_REGIAO, SG_UF_PROGRAMA, NM_MUNICIPIO_PROGRAMA_IES,
NM_GRANDE_AREA_CONHECIMENTO, NM_AREA_AVALIACAO,
NM_MODALIDADE_PROGRAMA, CD_CONCEITO_PROGRAMA,
CONCEITO_CAPES_NUM, PERFIL_EXCELENCIA, NIVEL_PADRAO
) %>%
summarise(
TOTAL_DISCENTES = n(),
QTD_MATRICULADOS = sum(NM_SITUACAO_DISCENTE == "MATRICULADO", na.rm = TRUE),
QTD_TITULADOS = sum(NM_SITUACAO_DISCENTE == "TITULADO", na.rm = TRUE),
QTD_ABANDONO = sum(NM_SITUACAO_DISCENTE == "ABANDONOU", na.rm = TRUE),
QTD_DESLIGADOS = sum(NM_SITUACAO_DISCENTE == "DESLIGADO", na.rm = TRUE),
QTD_INGRESSANTES = sum(ST_INGRESSANTE == "SIM", na.rm = TRUE),
IDADE_MEDIA_DISCENTES = round(mean(IDADE_DISCENTE, na.rm = TRUE), 1),
TEMPO_MEDIO_TITULACAO = round(mean(MESES_TITULACAO_VALIDO, na.rm = TRUE), 1),
TEMPO_MEDIANO_TITUL = round(median(MESES_TITULACAO_VALIDO, na.rm = TRUE), 1),
.groups = "drop"
)
# 2. Mesclagem (Left Join) entre a base agregada de Discentes e a base reformulada de Bolsas CAPES
dados_integrados_ppg <- discentes_agregado %>%
left_join(
bolsas_por_programa_nivel,
by = c("CD_PROGRAMA_IES" = "CD_PROGRAMA", "NIVEL_PADRAO" = "NM_NIVEL_PADRAO")
) %>%
# 3. Tratamento de NAs pós-junção (programas sem bolsas recebem 0) e criação de indicadores compostos
mutate(
BOLSAS_INSTITUCIONAL = replace_na(BOLSAS_INSTITUCIONAL, 0),
BOLSAS_ESTRATEGICO = replace_na(BOLSAS_ESTRATEGICO, 0),
TOTAL_BOLSAS_CAPES = replace_na(TOTAL_BOLSAS_CAPES, 0),
PROP_BOLSAS_ESTRATEGICAS = replace_na(PROP_BOLSAS_ESTRATEGICAS, 0),
# Variáveis derivadas de desempenho e financiamento
DISCENTES_EVADIDOS = QTD_ABANDONO + QTD_DESLIGADOS,
TAXA_TITULACAO_PCT = round((QTD_TITULADOS / TOTAL_DISCENTES) * 100, 2),
TAXA_EVASAO_PCT = round((DISCENTES_EVADIDOS / TOTAL_DISCENTES) * 100, 2),
BOLSAS_POR_100_MATRICULADOS = ifelse(QTD_MATRICULADOS > 0,
round((TOTAL_BOLSAS_CAPES / QTD_MATRICULADOS) * 100, 2),
NA_real_),
DEFICIT_BOLSAS_MATRICULADOS = pmax(0, QTD_MATRICULADOS - TOTAL_BOLSAS_CAPES),
RECEBE_BOLSA_CAPES = factor(ifelse(TOTAL_BOLSAS_CAPES > 0, "Sim", "Não"), levels = c("Sim", "Não")),
# Conversão das principais variáveis categóricas em Fatores Ordenados
PERFIL_EXCELENCIA = factor(
PERFIL_EXCELENCIA,
levels = c("Em Consolidação (1 a 3 / A)", "Consolidado (4 e 5)", "Excelência Internacional (6 e 7)"),
ordered = TRUE
),
NM_REGIAO = factor(NM_REGIAO, levels = c("SUDESTE", "SUL", "NORDESTE", "CENTRO-OESTE", "NORTE"))
)3.4 Apresentação Condensada do Conjunto de Dados Final
Com os dados devidamente limpos, padronizados e integrados, obtivemos
a base analítica final dados_integrados_ppg, composta por
7.883 unidades de curso (Programa × Nível) distribuídas
em 4.696 Programas de Pós-Graduação e 514
Instituições de Ensino e Pesquisa, consolidando as informações
dos 419.905 discentes e das bolsas concedidas pela
CAPES.
# Seleciona as colunas nucleares para visualização condensada e limita às primeiras 100 linhas (<= 200 linhas)
amostra_condensada <- dados_integrados_ppg %>%
arrange(desc(TOTAL_BOLSAS_CAPES), desc(TOTAL_DISCENTES)) %>%
slice_head(n = 100) %>%
select(
CD_PROGRAMA_IES, UF_IES, NM_REGIAO, NM_PROGRAMA_IES,
NM_GRANDE_AREA_CONHECIMENTO, NIVEL_PADRAO, CONCEITO_CAPES_NUM,
TOTAL_DISCENTES, QTD_MATRICULADOS, QTD_TITULADOS, DISCENTES_EVADIDOS,
TEMPO_MEDIO_TITULACAO, TOTAL_BOLSAS_CAPES, BOLSAS_INSTITUCIONAL,
BOLSAS_ESTRATEGICO, BOLSAS_POR_100_MATRICULADOS
)
datatable(
amostra_condensada,
rownames = FALSE,
filter = "top",
caption = htmltools::tags$caption(
style = "caption-side: top; text-align: left; font-weight: bold; color: #2c3e50;",
"Tabela 3: Visualização condensada do conjunto de dados limpo e integrado (Top 100 cursos por volume de bolsas CAPES — exibindo 10 linhas por página)."
),
colnames = c(
"Cód. PPG", "UF - IES", "Região", "Nome do Programa",
"Grande Área", "Nível", "Nota CAPES",
"Total Alunos", "Matriculados", "Titulados", "Evadidos",
"Tempo Médio Tit. (Meses)", "Total Bolsas CAPES", "Bolsas Inst.",
"Bolsas Estrat.", "Bolsas / 100 Matric."
),
options = list(
pageLength = 10,
lengthMenu = c(5, 10, 25, 50),
scrollX = TRUE,
autoWidth = TRUE,
language = list(
search = "Buscar:",
lengthMenu = "Exibir _MENU_ registros por página",
info = "Mostrando _START_ a _END_ de _TOTAL_ registros (Amostra de 100 linhas)",
paginate = list(previous = "Anterior", `next` = "Próximo")
)
)
)3.5 Resumo Consolidado das Variáveis de Interesse
Em vez de imprimir saídas brutas de console como str()
ou summary(), apresentamos a seguir uma síntese narrativa
com estatísticas calculadas dinamicamente em código embutido (inline
R code), seguida de uma Tabela Consolidada de Dicionário e
Resumo Estatístico das Variáveis de Interesse
3.5.1 Síntese Narrativa dos Dados Limpos
No panorama nacional consolidado para o ensino stricto sensu, o Brasil conta com 419.905 discentes vinculados distribuídos em 4.696 Programas de Pós-Graduação (7.883 cursos ao separar Mestrado e Doutorado). A idade média do pós-graduando brasileiro é de 34.3 anos (mediana de 32 anos, variando do 1º quartil de 28 ao 3º quartil de 39 anos). Entre os alunos que concluíram seus cursos no período (82.690 titulados), o tempo médio até a defesa é de 28.6 meses no Mestrado e 52 meses no Doutorado. Quanto ao fomento direto vinculado aos programas stricto sensu, foram integradas 98.050 bolsas ativas de Mestrado e Doutorado, resultando em uma média de 12.4 bolsas por curso (mediana de 11 bolsas, com máximo de 117 bolsas em um único curso).
3.5.2 Tabela de Resumo Consolidado das Variáveis
| Variável | Tipo / Escala | Descrição Funcional | Resumo Estatístico Consolidado (Base Limpa) |
|---|---|---|---|
| CD_PROGRAMA_IES | Caractere (Chave) | Código identificador único do Programa de Pós-Graduação na CAPES (13 caracteres). | 4.696 programas únicos em 514 instituições (IES). |
| NM_REGIAO | Fator (5 níveis) | Macrorregião geográfica brasileira onde o programa está sediado. | Sudeste: 44,5% dos cursos ; Sul: 21,6% ; Nordeste: 19,3% ; Centro-Oeste: 8,6% ; Norte: 5,9%. |
| DS_DEPENDENCIA_ADMINISTRATIVA | Caractere (2 categorias) | Natureza administrativa da IES mantenedora do programa (Pública vs. Privada). | Pública: 84,6% dos discentes (Federal: 59,7%, Estadual: 24,6%, Municipal: 0,4%) ; Privada: 15,4%. |
| NM_MODALIDADE_PROGRAMA | Caractere (2 categorias) | Modalidade do programa de pós-graduação (Acadêmico vs. Profissional). | Acadêmico: 84,5% dos discentes (84,9% dos cursos) ; Profissional: 15,5% dos discentes. |
| NM_GRANDE_AREA_CONHECIMENTO | Caractere (9 áreas) | Grande Área do Conhecimento segundo a árvore de avaliação da CAPES. | 9 Grandes Áreas (destaque em Multidisciplinar, Ciências Humanas, Saúde e Engenharias). |
| NIVEL_PADRAO | Caractere (2 níveis) | Nível acadêmico padronizado do curso (Mestrado ou Doutorado). | Mestrado: 5.181 cursos (62,5% dos alunos) ; Doutorado: 2.702 cursos (37,5% dos alunos). |
| CONCEITO_CAPES_NUM | Inteiro (Escala 1 a 7) | Nota da avaliação CAPES do programa convertida para escala numérica (1 a 7). | Média: 4,5 ; Mediana: 4 ; IIQ: [4 – 5] ; Min–Máx: [1 – 7] |
| PERFIL_EXCELENCIA | Fator Ordenado (3 níveis) | Classificação do programa em faixas de consolidação acadêmica e excelência internacional. | Em Consolidação (1-3): 17,0% dos cursos ; Consolidado (4-5): 64,5% ; Excelência (6-7): 18,5%. |
| IDADE_DISCENTE | Numérico (Discente) | Idade do pós-graduando no ano-base (calculada a partir do ano de nascimento). | Média: 34,3 anos ; Mediana: 32 anos ; IIQ: [28 – 39] ; Min–Máx: [18 – 88] |
| MESES_TITULACAO_VALIDO | Numérico (Discente Titulado) | Tempo decorrido (em meses) desde a matrícula até a defesa para os alunos titulados. | Média: 34,6 meses ; Mediana: 30 meses ; IIQ: [26 – 42] ; Min–Máx: [1 – 247] |
| TOTAL_DISCENTES | Inteiro (Curso/PPG) | Total de discentes vinculados ao curso (soma de matriculados, titulados e evadidos). | Média: 53,3 alunos ; Mediana: 45 alunos ; IIQ: [30 – 65] ; Min–Máx: [1 – 885] |
| QTD_MATRICULADOS | Inteiro (Curso/PPG) | Total de discentes com matrícula ativa em andamento no curso ao final do ano-base. | Média: 40,7 matr. ; Mediana: 34 matr. ; IIQ: [22 – 51] ; Min–Máx: [0 – 710] |
| TAXA_TITULACAO_PCT | Numérico Contínuo (%) | Proporção de discentes vinculados ao curso que defenderam dissertação/tese no ano. | Média: 19,9% ; Mediana: 19% ; IIQ: [11,5 – 27,3] ; Min–Máx: [0 – 100] |
| TAXA_EVASAO_PCT | Numérico Contínuo (%) | Proporção de discentes vinculados que abandonaram ou foram desligados do curso. | Média: 4,1% ; Mediana: 2,4% ; IIQ: [0 – 5,4] ; Min–Máx: [0 – 100] |
| TOTAL_BOLSAS_CAPES | Inteiro (Curso/PPG) | Total de bolsas da CAPES (Institucionais + Estratégicas) concedidas ao curso. | Média: 12,4 bolsas ; Mediana: 11 bolsas ; IIQ: [4 – 18] ; Min–Máx: [0 – 117] |
| PROP_BOLSAS_ESTRATEGICAS | Numérico Contínuo (%) | Percentual das bolsas do curso provenientes de editais estratégicos/induzidos da CAPES. | Média: 10,7% ; Mediana: 0% ; IIQ: [0 – 14,3] ; Min–Máx: [0 – 100] |
| BOLSAS_POR_100_MATRICULADOS | Numérico Contínuo (Índice) | Razão de bolsas concedidas pela CAPES para cada 100 alunos ativamente matriculados. | Média: 45,8 ; Mediana: 31 ; IIQ: [13,2 – 51,5] ; Min–Máx: [0 – 6.200] |