Esta página é uma apresentação do trabalho final da disciplina Estatística Descritiva, ministrada pela professor Thiago Marques no Curso de Especialização em Ciência de Dados do CEPERJ.
Trata-se de uma análise exploratória dos dados da base de microdados do ENADE 2017. Importação, tratamento e limpeza dos dados serão feitas antes da análise descritiva de algumas várias de interesse.
Os dados dos participantes do ENADE do curso de Letras Inglês serão descritos e também serão comparados os dados de todos os participantes do ENADE 2017.
Após a primeira descrição das notas de Formação Geral e de Conhecimentos Específicos será feito um cruzamento das notas com a variável das faixas de Renda Familiar, que parecem sugerir uma correlação.
Preparação do ambiente com os pacotes e dados necessários.
Este markdown foi gerado em um notebook com processador COREi5 e com 12GB de RAM. Essa é a configuração mínima para reprodução.
library(tidyverse)
vetor_pacotes = c(
"readr",
"ggplot2",
"plotly",
"e1071",
"dplyr",
"Hmisc",
"DescTools",
"esquisse",
"gridExtra"
)
lapply(vetor_pacotes, require, character.only = TRUE)## [[1]]
## [1] TRUE
##
## [[2]]
## [1] TRUE
##
## [[3]]
## [1] TRUE
##
## [[4]]
## [1] TRUE
##
## [[5]]
## [1] TRUE
##
## [[6]]
## [1] TRUE
##
## [[7]]
## [1] TRUE
##
## [[8]]
## [1] TRUE
##
## [[9]]
## [1] TRUE
Carregar a base de dados:
Verificando os nomes as variáveis:
## [1] "NU_ANO" "CO_IES" "CO_CATEGAD"
## [4] "CO_ORGACAD" "CO_GRUPO" "CO_CURSO"
## [7] "CO_MODALIDADE" "CO_MUNIC_CURSO" "CO_UF_CURSO"
## [10] "CO_REGIAO_CURSO" "NU_IDADE" "TP_SEXO"
## [13] "ANO_FIM_EM" "ANO_IN_GRAD" "CO_TURNO_GRADUACAO"
## [16] "TP_INSCRICAO_ADM" "TP_INSCRICAO" "NU_ITEM_OFG"
## [19] "NU_ITEM_OFG_Z" "NU_ITEM_OFG_X" "NU_ITEM_OFG_N"
## [22] "NU_ITEM_OCE" "NU_ITEM_OCE_Z" "NU_ITEM_OCE_X"
## [25] "NU_ITEM_OCE_N" "DS_VT_GAB_OFG_ORIG" "DS_VT_GAB_OFG_FIN"
## [28] "DS_VT_GAB_OCE_ORIG" "DS_VT_GAB_OCE_FIN" "DS_VT_ESC_OFG"
## [31] "DS_VT_ACE_OFG" "DS_VT_ESC_OCE" "DS_VT_ACE_OCE"
## [34] "TP_PRES" "TP_PR_GER" "TP_PR_OB_FG"
## [37] "TP_PR_DI_FG" "TP_PR_OB_CE" "TP_PR_DI_CE"
## [40] "TP_SFG_D1" "TP_SFG_D2" "TP_SCE_D1"
## [43] "TP_SCE_D2" "TP_SCE_D3" "NT_GER"
## [46] "NT_FG" "NT_OBJ_FG" "NT_DIS_FG"
## [49] "NT_FG_D1" "NT_FG_D1_PT" "NT_FG_D1_CT"
## [52] "NT_FG_D2" "NT_FG_D2_PT" "NT_FG_D2_CT"
## [55] "NT_CE" "NT_OBJ_CE" "NT_DIS_CE"
## [58] "NT_CE_D1" "NT_CE_D2" "NT_CE_D3"
## [61] "CO_RS_I1" "CO_RS_I2" "CO_RS_I3"
## [64] "CO_RS_I4" "CO_RS_I5" "CO_RS_I6"
## [67] "CO_RS_I7" "CO_RS_I8" "CO_RS_I9"
## [70] "QE_I01" "QE_I02" "QE_I03"
## [73] "QE_I04" "QE_I05" "QE_I06"
## [76] "QE_I07" "QE_I08" "QE_I09"
## [79] "QE_I10" "QE_I11" "QE_I12"
## [82] "QE_I13" "QE_I14" "QE_I15"
## [85] "QE_I16" "QE_I17" "QE_I18"
## [88] "QE_I19" "QE_I20" "QE_I21"
## [91] "QE_I22" "QE_I23" "QE_I24"
## [94] "QE_I25" "QE_I26" "QE_I27"
## [97] "QE_I28" "QE_I29" "QE_I30"
## [100] "QE_I31" "QE_I32" "QE_I33"
## [103] "QE_I34" "QE_I35" "QE_I36"
## [106] "QE_I37" "QE_I38" "QE_I39"
## [109] "QE_I40" "QE_I41" "QE_I42"
## [112] "QE_I43" "QE_I44" "QE_I45"
## [115] "QE_I46" "QE_I47" "QE_I48"
## [118] "QE_I49" "QE_I50" "QE_I51"
## [121] "QE_I52" "QE_I53" "QE_I54"
## [124] "QE_I55" "QE_I56" "QE_I57"
## [127] "QE_I58" "QE_I59" "QE_I60"
## [130] "QE_I61" "QE_I62" "QE_I63"
## [133] "QE_I64" "QE_I65" "QE_I66"
## [136] "QE_I67" "QE_I68" "QE_I69"
## [139] "QE_I70" "QE_I71" "QE_I72"
## [142] "QE_I73" "QE_I74" "QE_I75"
## [145] "QE_I76" "QE_I77" "QE_I78"
## [148] "QE_I79" "QE_I80" "QE_I81"
Selecionando as variáveis (select) de interesse.
microdados_enade_filtrados = enade2017 %>% select(
CO_GRUPO,
CO_REGIAO_CURSO,
NU_IDADE,
TP_SEXO,
CO_TURNO_GRADUACAO,
NT_GER,
QE_I01,
QE_I02,
QE_I08,
QE_I21,
QE_I23,
NT_OBJ_FG,
NT_OBJ_CE
)Removendo a base de dados original para liberar memória:
A preparação das variáveis para a análise será feita com limpeza e categorização.
microdados_enade_filtrados = microdados_enade_filtrados %>% mutate(
estado_civil = case_when(
QE_I01 == "A" ~ "Solteiro(a)",
QE_I01 == "B" ~ "Casado(a)",
QE_I01 == "C" ~ "Separado(a)",
QE_I01 == "D" ~ "Viúvo(a)",
QE_I01 == "E" ~ "Outro"
)
)
table(microdados_enade_filtrados$estado_civil)##
## Casado(a) Outro Separado(a) Solteiro(a) Viúvo(a)
## 116106 17035 14471 318407 1637
microdados_enade_filtrados = microdados_enade_filtrados %>% mutate(
regiao = case_when(
CO_REGIAO_CURSO == 1 ~ "Norte",
CO_REGIAO_CURSO == 2 ~ "Nordeste",
CO_REGIAO_CURSO == 3 ~ "Sudeste",
CO_REGIAO_CURSO == 4 ~ "Sul",
CO_REGIAO_CURSO == 5 ~ "Centro-Oeste"
)
)
table(microdados_enade_filtrados$regiao)##
## Centro-Oeste Nordeste Norte Sudeste Sul
## 40093 94526 37708 252320 112789
microdados_enade_filtrados = microdados_enade_filtrados %>% mutate(sexo = case_when(TP_SEXO == "M" ~ "Masculino", TP_SEXO == "F" ~ "Feminino"))
table(microdados_enade_filtrados$sexo)##
## Feminino Masculino
## 292107 245329
microdados_enade_filtrados = microdados_enade_filtrados %>% mutate(
hestudos = case_when(
QE_I23 == "A" ~ "Nenhuma, apenas assisto às aulas",
QE_I23 == "B" ~ "De uma a três",
QE_I23 == "C" ~ "De quatro a sete",
QE_I23 == "D" ~ "De oito a doze",
QE_I23 == "E" ~ "Mais de doze"
)
)
table(microdados_enade_filtrados$hestudos)##
## De oito a doze De quatro a sete
## 60636 140405
## De uma a três Mais de doze
## 192297 55742
## Nenhuma, apenas assisto às aulas
## 18576
microdados_enade_filtrados = microdados_enade_filtrados %>% mutate(
renda_familiar = case_when(
QE_I08 == "A" ~ "Ate 1,5 sal. min.",
QE_I08 == "B" ~ "De 1,5 a 3 sal. min.",
QE_I08 == "C" ~ "De 3 a 4,5 sal. min.",
QE_I08 == "D" ~ "De 4,5 a 6 sal. min.",
QE_I08 == "E" ~ "De 6 a 10 sal. min.",
QE_I08 == "F" ~ "De 10 a 30 sal. min.",
QE_I08 == "G" ~ "Mais de 30 sal. min."
)
)
table(microdados_enade_filtrados$renda_familiar)##
## Ate 1,5 sal. min. De 1,5 a 3 sal. min. De 10 a 30 sal. min.
## 105918 135503 27934
## De 3 a 4,5 sal. min. De 4,5 a 6 sal. min. De 6 a 10 sal. min.
## 95843 49096 49348
## Mais de 30 sal. min.
## 4014
microdados_enade_filtrados = microdados_enade_filtrados %>% mutate(
turnos = case_when(
CO_TURNO_GRADUACAO == 1 ~ "Matutino",
CO_TURNO_GRADUACAO == 2 ~ "Vespertino",
CO_TURNO_GRADUACAO == 3 ~ "Integral",
CO_TURNO_GRADUACAO == 4 ~ "Noturno"
)
)
table(microdados_enade_filtrados$turnos)##
## Integral Matutino Noturno Vespertino
## 101530 75337 336976 23128
LET 905Filtra pelo curso de Letras Inglês:
Verificação do filtro:
##
## 905
## 7963
##
## Casado(a) Outro Separado(a) Solteiro(a) Viúvo(a)
## 1743 271 311 4544 35
##
## Centro-Oeste Nordeste Norte Sudeste Sul
## 1247 919 475 3951 1371
##
## Feminino Masculino
## 5848 2115
##
## De oito a doze De quatro a sete
## 923 2170
## De uma a três Mais de doze
## 2835 727
## Nenhuma, apenas assisto às aulas
## 249
##
## Ate 1,5 sal. min. De 1,5 a 3 sal. min. De 10 a 30 sal. min.
## 1797 2169 213
## De 3 a 4,5 sal. min. De 4,5 a 6 sal. min. De 6 a 10 sal. min.
## 1438 711 556
## Mais de 30 sal. min.
## 20
##
## Integral Matutino Noturno Vespertino
## 689 1090 5883 301
Verificação e limpeza dos valores faltantes (NAs) em cada variável
microdados_let905_sem_NA = microdados_let905 %>% na.omit()
microdados_enade_filtrados_sem_NA <- microdados_enade_filtrados %>% na.omit()Destacando as variáveis de interesse:
## $value
## [1] "Ate 1,5 sal. min." "De 1,5 a 3 sal. min." "De 10 a 30 sal. min."
## [4] "De 3 a 4,5 sal. min." "De 4,5 a 6 sal. min." "De 6 a 10 sal. min."
## [7] "Mais de 30 sal. min."
##
## $frequency
## [1] 1797 2169 213 1438 711 556 20
## $value
## [1] "Centro-Oeste" "Nordeste" "Norte" "Sudeste" "Sul"
##
## $frequency
## [1] 1247 919 475 3951 1371
## [1] 15.66 11.54 5.97 49.62 17.22
## CO_GRUPO CO_REGIAO_CURSO NU_IDADE TP_SEXO
## Min. :905 Min. :1.000 Min. :19.00 Length:7963
## 1st Qu.:905 1st Qu.:3.000 1st Qu.:23.00 Class :character
## Median :905 Median :3.000 Median :27.00 Mode :character
## Mean :905 Mean :3.251 Mean :29.83
## CO_TURNO_GRADUACAO NT_GER
## Min. :1.000 Min. : 0.00
## 1st Qu.:3.000 1st Qu.:33.70
## Median :4.000 Median :43.20
## Mean :3.427 Mean :44.06
## # A tibble: 1 x 7
## quantidade media mediana moda cv assimetria curtose
## <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 6522 47.7 50 50 39.5 -0.0552 -0.249
Podemos notar que a mediana e a moda são idênticas e que a média está muito próxima. Isso poderia indicar que os dados são simétricos. Porém, com a média abaixo da mediana, verificamos uma leve assimetria negativa, com o valor de -0.05.
Ao plotar a densidade, a assimetria é tão leve que não salta aos olhos:
Mas se destacarmos a média e a mediana podemos notar a assimetria:
Quanto à curtose, verificamos um valor -0,25% indicando que a curva é platicúrtica.
Se compararmos com as notas de Formação Geral de todos os participantes do ENADE 2017, temos que:
## # A tibble: 1 x 7
## quantidade media mediana moda cv assimetria curtose
## <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 442496 50.0 50 50 43.1 -0.0180 -0.451
Notamos que a média, a mediana e a moda são idênticas, portanto os dados são simétricos, e também é platicúrtica. A comparação também mostra que a média de Formação Geral dos alunos de Letras é 2,3% mais baixa que média geral de 2017.
## # A tibble: 1 x 7
## quantidade media mediana moda cv assimetria curtose
## <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 6522 42.8 40 36 37.8 0.249 -0.296
Nota-se a diferença em relação às notas de formação geral. A média maior que a mediana, e esta menor que moda indicam uma assimetria positiva clara, com 0.25.
O gráfico é claro:
E as notas de Conhecimentos Específicos de todos os cursos que foram objeto do ENADE em 2017, em comparação:
## # A tibble: 1 x 7
## quantidade media mediana moda cv assimetria curtose
## <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 442496 43.0 42.1 39.1 38.3 0.217 -0.311
Podemos perceber que a distribuição das notas de Conhecimentos Específicos dos alunos de Letras não difere da distribuição das notas dos demais cursos que foram objeto do ENADE 2017. Mesma assimetria à direita e curtose negativa.
Um sumário das notas da Formação Geral dos alunos de Letras Inglês, agrupadas por Faixa de Renda Familiar:
## # A tibble: 7 x 8
## renda_familiar quantidade media mediana moda cv assimetria curtose
## <chr> <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 De 10 a 30 sal. min. 200 59.2 62.5 62.5 33.5 -0.327 -0.326
## 2 De 6 a 10 sal. min. 524 53.5 50 50 35.4 -0.272 -0.0536
## 3 Mais de 30 sal. min. 17 52.9 50 62.5 35.9 -0.273 -0.576
## 4 De 4,5 a 6 sal. min. 667 50.6 50 50 37.6 -0.112 -0.267
## 5 De 3 a 4,5 sal. min. 1352 49.1 50 50 38.0 -0.155 -0.312
## 6 De 1,5 a 3 sal. min. 2066 46.6 50 50 38.8 -0.0299 -0.156
## 7 Ate 1,5 sal. min. 1696 43.5 50 50 42.4 0.0211 -0.196
A tabela ordenada, por mediana e média decrescentes, mostra que: - a mediana é idêntica em todas faixas, exceto entre 10 e 30 salários mínimos de Renda Familiar; - a média mostra uma diferença de 15,77 entre a mais baixa e a mais alta; e - com exceção da faixa salarial mais alta (acima de 30 salários), as médias são crescentes e ordenadas de acordo com o aumento de faixa.
As notas de Conhecimentos Específicos mostram um alinhamento total:
## # A tibble: 7 x 8
## renda_familiar quantidade media mediana moda cv assimetria curtose
## <chr> <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 Mais de 30 sal. min. 17 57.9 56 56 19.7 -0.0852 -1.23
## 2 De 10 a 30 sal. min. 200 54.8 56 56 29.6 -0.482 -0.00221
## 3 De 6 a 10 sal. min. 524 50.0 48 48 33.4 -0.115 -0.310
## 4 De 4,5 a 6 sal. min. 667 46.5 48 48 36.6 0.0360 -0.614
## 5 De 3 a 4,5 sal. min. 1352 44.8 44 36 36.0 0.156 -0.207
## 6 De 1,5 a 3 sal. min. 2066 41.2 40 40 36.7 0.346 -0.0299
## 7 Ate 1,5 sal. min. 1696 37.9 36 32 39.0 0.360 -0.0992
A média das notas está exatamente alinhada com a faixa de renda. E a diferença entre a faixa mais baixa e a mais alta aumenta para quase 20 pontos.
Se olharmos para a mediana e para a moda, podemos perceber dois grupos com um número menor de alunos: mediana e moda 56; e mediana e moda 48. E um grande grupo, com mediana e moda abaixo de 45.
O boxplot abaixo mostra a concentração das notas, especialmente entre o 1º e 3º quartis, acompanha da faixa de renda:
Se adicionarmos a variável sexo, podemos perceber ainda mais detalhadamente os padrões.
Em conclusão, eu diria que temos esperar a disciplina de Estatística Inferencial com o professor Thiago Marques para avaliar se realmente temos uma correlação entre Notas e Renda Familiar.
Além disso, a base dados sugere outros cruzamentos de dados. Esses cruzamentos poderiam ser, por exemplo, com as bases de anos anteriores do próprio ENADE ou com dados demográficos do IBGE de 2017. Essas comparações enriqueceriam a análise e sugeririam padrões que não foram destacados aqui.