Essa atividade foi desenvolvida na disciplina de Ciência de Dados Educacionais ministrado numa pós-graduação.
A atividade tratava-se de desenvolver uma análise de dados sobre alguma(s) base(s) de dados educacional(is) aberta(s).
A atividade aqui realizada foi de identificar uma possível relação entre o desempenho dos estudantes do 9º ano das escolas públicas de Pernambuco nas notas de matemática do SAEB e o seu nível socioeconômico disponibilizado pelo INSE. A base do SAEB foi obtida através do site: https://basedosdados.org/, e os dados do INSE foram obtido pelo link: https://www.gov.br/inep/pt-br/acesso-a-informacao/dados-abertos/indicadores-educacionais/nivel-socioeconomico
O desempenho dos estudantes é representado pela média em matemática da escola na prova do SAEB, e o nível socioeconômico da mesma forma, o INSE é dado por escola.
As notas do SAEB são referentes aos anos de 2011, 2013, 2015, 2017 e 2019. Enquanto que os dados do INSE foram publicados em 2011, 2015 e 2019. Levou-se em consideração que o INSE é válido para o ano da publicação e em diante, até a publicação da próxima edição do INSE.
Inicialmente precisou-se limpar e organizar as bases e juntá-las por ano.
A seguir é descrito o processo feito com as bases do SAEB 2011 e INSE 2011-2013, e esse processo é replicado com os outros anos.
library(tidyverse)
library(readr)
library(readxl)
library(rstatix)
library(ggpubr)
As bases já foram carregadas filtrando por dados apenas de Pernambuco e por escolas estaduais e municipais (públicas). Na base do SAEB base também filtrou-se pelas notas apenas dos 9º anos. E por fim, dá-se um select() para captar apenas o que será usado, e retira-se os valores não avaliáveis (NA).
base <- read_csv2("base de dados/TS_ESCOLA_2011.csv") %>% filter(ID_UF == 26) %>% filter(ID_DEPENDENCIA_ADM == 2 | ID_DEPENDENCIA_ADM == 3) %>% filter(ID_SERIE == "9") %>% select(ID_SAEB, ID_ESCOLA, ID_DEPENDENCIA_ADM, MEDIA_MT) %>% na.omit()
base_inse <- read_excel("base de dados/INSE_2011-2013.xlsx", range = "A10:O73582") %>% filter(COD_ESTADO == "26") %>% filter(ID_REDE == "2" | ID_REDE == "3") %>% select (COD_ESCOLA, `INSE - CLASSIFICAÇÃO`) %>% na.omit()
Segue um resumo dos dados carregados.
glimpse(base)
## Rows: 1,360
## Columns: 4
## $ ID_SAEB <dbl> 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 201~
## $ ID_ESCOLA <dbl> 26106582, 26106612, 26106698, 26106701, 26106728, 2~
## $ ID_DEPENDENCIA_ADM <dbl> 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, ~
## $ MEDIA_MT <dbl> 221.91, 232.53, 244.20, 241.24, 208.44, 220.05, 218~
glimpse(base_inse)
## Rows: 2,958
## Columns: 2
## $ COD_ESCOLA <dbl> 26106450, 26106477, 26106582, 26106612, 2610665~
## $ `INSE - CLASSIFICAÇÃO` <chr> "Médio", "Médio", "Médio", "Médio", "Médio", "M~
Renomeou-se as colunas. As informações sobre a rede da escola é trazida pelas bases como números, sendo assim também corrige-se esse problema em base. Em base_inse é necessário transformar o nível socioeconômico em fator e estabelecer uma relação de nível.
names(base) <- c("ano", "id_escola", "rede", "nota_saeb_matematica")
names(base_inse) <- c("id_escola", "inse")
base$rede <- gsub(2, "estadual", base$rede)
base$rede <- gsub(3, "municipal", base$rede)
base_inse$inse <- factor(base_inse$inse, levels= c("Muito Baixo", "Baixo", "Médio Baixo", "Médio", "Médio Alto", "Alto", "Muito Alto"))
E, por último, une-se as duas bases.
base <- left_join(base, base_inse, by = "id_escola")
base_2011 <- base %>% na.omit()
remove(base_inse)
remove(base)
Essa análise também foi replicada para os outros anos.
Plotou-se um boxplot, com ggplot, para visualizar a estatística descritiva dos dados e um summary.
## ano id_escola rede nota_saeb_matematica
## Min. :2011 Min. :26000024 Length:1360 Min. :175.5
## 1st Qu.:2011 1st Qu.:26051553 Class :character 1st Qu.:216.3
## Median :2011 Median :26089930 Mode :character Median :226.5
## Mean :2011 Mean :26086359 Mean :227.6
## 3rd Qu.:2011 3rd Qu.:26121506 3rd Qu.:237.3
## Max. :2011 Max. :26548720 Max. :341.3
##
## inse
## Muito Baixo: 2
## Baixo :154
## Médio Baixo:658
## Médio :513
## Médio Alto : 31
## Alto : 1
## Muito Alto : 1
É possível ver uma discrepância considerável entre os resultados dos estudantes de nível socioeconômico Médio Alto e os inferiores. Nos INSEs inferiores, têm-se medianas muito próximas na rede estadual, e medianas parecidas entre o Médio e o Médio Baixo, mas estas ainda são superiores os níveis Baixo e Muito Baixo.
O teste que será aplicado é o de Kruskal-Wallis, com um grau de confiança de 95%, para verificar se existe relação entre a variável nota_saeb_matematica e inse. Dessa forma, é necessário analisar se os pressupostos são atendidos para tal. Os pressupostos são: Os dados precisam ser independentes e não podem ter uma distribuição normal
Os dados são independentes, pois a nossa hipótese é de que o nível socioeconômico influencia na nota de matematica da prova do SAEB, e não há nada que comprove isso nos dados brutos.
Utilizou-se o teste de kolmogorov para verificar a normalidade.
ks.test(base_2011$nota_saeb_matematica, rnorm(1360))
## Warning in ks.test(base_2011$nota_saeb_matematica, rnorm(1360)): p-value will be
## approximate in the presence of ties
##
## Two-sample Kolmogorov-Smirnov test
##
## data: base_2011$nota_saeb_matematica and rnorm(1360)
## D = 1, p-value < 2.2e-16
## alternative hypothesis: two-sided
Como p-value < 2.2e-16 então nega-se a hipótese nula (dados normais) e aceita-se a alternativa (dados não-normais).
res_teste_kruskal <- base_2011 %>% kruskal_test(nota_saeb_matematica ~ inse)
res_teste_kruskal
## # A tibble: 1 x 6
## .y. n statistic df p method
## * <chr> <int> <dbl> <int> <dbl> <chr>
## 1 nota_saeb_matematica 1360 72.7 6 1.13e-13 Kruskal-Wallis
Note que o p-valor é inferior a 0.05, então nega-se a hipótese nula (todos os grupos apresentam medianas são iguais) e aceita-se a alternativa (existem grupos que apresentam medianas diferentes). Logo, alguns grupos com níveis socioeconômicos diferentes, apresentam notas de matemática diferentes.
res_efeito_kruskal <- base_2011 %>% kruskal_effsize(nota_saeb_matematica ~ inse)
res_efeito_kruskal
## # A tibble: 1 x 5
## .y. n effsize method magnitude
## * <chr> <int> <dbl> <chr> <ord>
## 1 nota_saeb_matematica 1360 0.0493 eta2[H] small
A magnitude, ou o tamanho, do efeito é pequeno, isso significa que a relação entre as duas variáveis não é tão forte, mas o teste de Kruskal-Wallis verificou a existência de relação. O tamanho do efeito resultou em moderado quando aplicado no ano de 2015s.
res_dunn_test <- base_2011 %>% dunn_test(nota_saeb_matematica ~ inse, p.adjust.method = "bonferroni") %>% filter(p.adj.signif != "ns") %>% select(group1, group2, n1, n2, p.adj, p.adj.signif)
res_dunn_test
## # A tibble: 6 x 6
## group1 group2 n1 n2 p.adj p.adj.signif
## <chr> <chr> <int> <int> <dbl> <chr>
## 1 Muito Baixo Médio Alto 2 31 9.22e- 3 **
## 2 Baixo Médio Baixo 154 658 1.20e- 6 ****
## 3 Baixo Médio 154 513 3.53e- 6 ****
## 4 Baixo Médio Alto 154 31 1.13e-11 ****
## 5 Médio Baixo Médio Alto 658 31 7.73e- 6 ****
## 6 Médio Médio Alto 513 31 7.89e- 6 ****
Utilizou-se o teste de Dunn, com o método de ajuste Bonferroni, para verificar entre quais grupos havia diferença estatisticamente significativa. O resultado indica 6 relações entre os grupos.
my_comparisons <- list( c("Muito Baixo", "Médio Alto"), c("Baixo", "Médio Baixo"), c("Baixo", "Médio"), c("Baixo", "Médio Alto"), c("Médio Baixo", "Médio Alto"), c("Médio", "Médio Alto"))
base_2011 %>% filter(inse != "Alto" & inse != "Muito Alto") %>% ggboxplot(x = "inse", y = "nota_saeb_matematica", color = "inse", bxp.errorbar = TRUE, facet.by = "rede") + stat_compare_means(comparisons = my_comparisons) + labs(subtitle = get_test_label(res_teste_kruskal, type = "expression", detailed = TRUE), caption = get_pwc_label(res_dunn_test, type = "expression"), x = "INSE", y = "Nota SAEB Matematica") + theme(axis.text.x = element_text(size = 6 ,angle = 60, hjust = 1))
Em my_comparisons indica-se quais relações serão expostas no boxplot. Pode-se observar no plot que há diferença significativa na nota de matemática entre a maior parte dos níveis socioeconômicos, e que os níveis socioeconômicos maiores tendem a ter uma nota de matemática maior.