1 Introdução

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.


1.1 Preparação

Preparação do ambiente com os pacotes e dados necessários.

1.1.1 Processamento e memória

Este markdown foi gerado em um notebook com processador COREi5 e com 12GB de RAM. Essa é a configuração mínima para reprodução.

1.1.2 Pacotes

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

1.1.3 Dados

Carregar a base de dados:

enade2017 = read_csv2("MICRODADOS_ENADE_2017.txt")

Verificando os nomes as variáveis:

names(enade2017)
##   [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:

rm(enade2017)

2 Tratando a base de dados

A preparação das variáveis para a análise será feita com limpeza e categorização.

2.1 Estado Civil

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

2.2 Região

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

2.3 Sexo

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

2.4 Horas de Estudo

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

2.5 Renda Familiar

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

2.6 Turnos

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

3 Letras Inglês - LET 905

Filtra pelo curso de Letras Inglês:

microdados_let905 = microdados_enade_filtrados %>% filter(CO_GRUPO == 905)

Verificação do filtro:

table(microdados_let905$CO_GRUPO)
## 
##  905 
## 7963
table(microdados_let905$estado_civil)
## 
##   Casado(a)       Outro Separado(a) Solteiro(a)    Viúvo(a) 
##        1743         271         311        4544          35
table(microdados_let905$regiao)
## 
## Centro-Oeste     Nordeste        Norte      Sudeste          Sul 
##         1247          919          475         3951         1371
table(microdados_let905$sexo)
## 
##  Feminino Masculino 
##      5848      2115
table(microdados_let905$hestudos)
## 
##                   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
table(microdados_let905$renda_familiar)
## 
##    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
table(microdados_let905$turnos)
## 
##   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()

4 Análise Descritiva das notas do curso de Letras Inglês em 2017

4.1 Resumindo os dados

s = summary(microdados_let905)
d = describe(microdados_let905)

Destacando as variáveis de interesse:

d$renda_familiar$values
## $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
d$regiao$values
## $value
## [1] "Centro-Oeste" "Nordeste"     "Norte"        "Sudeste"      "Sul"         
## 
## $frequency
## [1] 1247  919  475 3951 1371
round(d$regiao$values$frequency / sum(d$CO_REGIAO_CURSO$values$frequency) * 100,2)
## [1] 15.66 11.54  5.97 49.62 17.22
s[1:4, 1:6]
##     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

4.2 Estatística descritiva da variável Nota:

4.2.1 As notas da Formação Geral dos alunos de Letras Inglês que prestaram o ENADE em 2017 podem ser descritas assim:

## # 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.

4.2.2 As notas da Conhecimentos Específicos dos alunos de Letras Inglês que prestaram o ENADE em 2017 podem ser descritas assim:

## # 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.


5 Cruzamento de Notas e Renda Familiar

5.1 Descrição das variáveis

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.

5.2 Boxplots

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.

6 Conclusão

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.