library(readr) #para ler dados
library(dplyr) #para tratamento de dados
library(ggplot2) #para gerar e tratar gráficos
library(gtsummary) #para tratamento de análises estatísticas e relatórios
library(sjPlot) #para plotar gráficos do modelo de regressão
dados <- read.csv("ideb.csv")
Ao analisar as linhas e colunas observamos que as variáveis podem ser divididas em: Qualitativas Nominais (sigla_uf, id_municipio, id_escola e rede), Qualitativas Ordinais (ano, ensino e anos escolares) e Quantitativas Contínuas (indicador rendimento, nota_saeb_media_padronizada, nota_saeb_matematica, nota_saeb_lingua_portuguesa, ideb e taxa aprovação). Como estamos tratando do Ideb, creio que a variável dependente deva ser ela. Já as independentes seriam nota_saeb_matematica, nota_saeb_lingua_portuguesa, e taxa_aprovacao. Já sigla_uf, rede, ensino, id_municipio e escola, podem ser utilizadas para trazer um elemento específico da escola, município, estado etc.
Como escolhemos o ideb, a nossa meta será 6,0. Meta proposta também pelo governo federal. Sendo que esses estudantes também alcançam alto desempenho no PISA. Fonte: https://jeduca.org.br/guia/guia-explica-o-ideb. Acesso: 14 de outubro de 2024.
dados <- dados |>
mutate(atingiu = ifelse(ideb > 5.9,1,0))
tabela <- table(dados$atingiu)
proporcao <- prop.table(tabela)
print(proporcao)
##
## 0 1
## 0.8613071 0.1386929
A nota do ideb é calculada por ((pt + mat)/2).(tx_aprov/100), por isso, três dessas variáveis são fundamentais para o modelo. Sendo interessante utilizar a variável rede para analisar sua influência na possibilidade de alcançar notas altas.
regressao_logistica_ideb <- glm(atingiu ~ nota_saeb_lingua_portuguesa +
nota_saeb_matematica + taxa_aprovacao + rede,
data = dados, family = binomial)
summary(regressao_logistica_ideb)
##
## Call:
## glm(formula = atingiu ~ nota_saeb_lingua_portuguesa + nota_saeb_matematica +
## taxa_aprovacao + rede, family = binomial, data = dados)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -4.657e+01 1.723e-01 -270.24 <2e-16 ***
## nota_saeb_lingua_portuguesa -6.512e-02 4.086e-04 -159.37 <2e-16 ***
## nota_saeb_matematica 1.005e-01 4.763e-04 211.07 <2e-16 ***
## taxa_aprovacao 3.659e-01 1.600e-03 228.77 <2e-16 ***
## redefederal 1.014e+00 9.432e-02 10.75 <2e-16 ***
## redemunicipal 1.182e+00 1.033e-02 114.45 <2e-16 ***
## redeprivada -1.746e+00 9.701e-02 -18.00 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 567878 on 705291 degrees of freedom
## Residual deviance: 324585 on 705285 degrees of freedom
## (459215 observations deleted due to missingness)
## AIC: 324599
##
## Number of Fisher Scoring iterations: 8
São dados quatro coeficientes: intercept - onde a função toca o eixo y, ou seja, valor da variável dependente quando todas as variáveis independentes forem nulas. Em seguida, são fornecidos os coeficiente beta 1, 2 e 3. O Std. Erros é o erro padrão de cada coeficiente estimado. Tendo a variável nota_saeb_lingua_portuguesa o coeficiente com menor erro padrão e o intercept o maior erro padrão. Por fim, temos um p-value próximo de zero, mostrando que tais variáveis são estatisticamente muito significativos. Não soube analisar os demais dados, visto que parece ser contraditório, inicialmente o modelo parece bom, no final não.
tbl_regression(regressao_logistica_ideb, #Para mostrar os Odds Ratios
label = list(nota_saeb_lingua_portuguesa ~ "Nota SAEB Língua Portuguesa",
nota_saeb_matematica ~ "Nota SAEB Matemática",
taxa_aprovacao ~ "Taxa de Aprovação")) #Renomear variáveis se desejado)
| Characteristic | log(OR)1 | 95% CI1 | p-value |
|---|---|---|---|
| Nota SAEB Língua Portuguesa | -0.07 | -0.07, -0.06 | <0.001 |
| Nota SAEB Matemática | 0.10 | 0.10, 0.10 | <0.001 |
| Taxa de Aprovação | 0.37 | 0.36, 0.37 | <0.001 |
| rede | |||
| estadual | — | — | |
| federal | 1.0 | 0.83, 1.2 | <0.001 |
| municipal | 1.2 | 1.2, 1.2 | <0.001 |
| privada | -1.7 | -1.9, -1.6 | <0.001 |
| 1 OR = Odds Ratio, CI = Confidence Interval | |||
Todos os coeficientes, com excessão da rede estadual. Um dos motivos é que o p-valor é menor que 0,05. Indicando um alto grau de ajuste entre o modelo e os dados.
plot_model(regressao_logistica_ideb,
type = "est",
show.values = TRUE,
value.offset = 0.3,
title = "Coeficientes da Regressão Logística",
axis.labels = c("Rede Privada", "Rede Municipal","Rede Federal",
"Taxa de Aprovação", "Nota SAEB Matemática",
"Nota SAEB Língua Portuguesa"),
ci.method = "wald") + # Usando o método Wald para CI
theme_minimal()
Como podemos observar no gráfico, em vermelho estão as variáveis que trazem um descréscimo em relaçãoa probabilidade de uma determinada escola atingir a mádia 6.0. Já as em azul indicam um aumento nas chances, sendo que a Rede Municipal e Federal, aumentam em algumas vezes essa chance. Os três asteriscos indicam que tais variáveis são estatísticamente muito sigiificativas.
tbl_regression(regressao_logistica_ideb,
exponentiate = TRUE, # Para mostrar os Odds Ratios
label = list(nota_saeb_lingua_portuguesa ~ "Nota SAEB Língua Portuguesa",
nota_saeb_matematica ~ "Nota SAEB Matemática",
taxa_aprovacao ~ "Taxa de Aprovação",
rede ~ "Tipo de Rede")) # Para os rótulos das variáveis
| Characteristic | OR1 | 95% CI1 | p-value |
|---|---|---|---|
| Nota SAEB Língua Portuguesa | 0.94 | 0.94, 0.94 | <0.001 |
| Nota SAEB Matemática | 1.11 | 1.10, 1.11 | <0.001 |
| Taxa de Aprovação | 1.44 | 1.44, 1.45 | <0.001 |
| Tipo de Rede | |||
| estadual | — | — | |
| federal | 2.76 | 2.29, 3.32 | <0.001 |
| municipal | 3.26 | 3.20, 3.33 | <0.001 |
| privada | 0.17 | 0.14, 0.21 | <0.001 |
| 1 OR = Odds Ratio, CI = Confidence Interval | |||
Aqui vamos analisar as Odds Ratios, visto que o intervalo de confiabilidade e o p-value já foram discutidos. Contudo, vale ressaltar que sendo o p-valor bem pequeno e o intervalo de confiabilidade também pequeno temos um indicativo de alta precisão. Em relação a OR da Nota SAEB de Língua Portuguesa (0,94) indica que um aumento nessa nota implica num descréscimo da probabilidade de uma escola atingir a média 6.0 no Ideb. Em relação, ao demais parâmetros quantitativos, todos eles têm associados um acréscimo na probabilidade da escola de atingir a média esperada. Por fim, ao tratarmos do tipo de rede, observamos que a escola sendo federal ou municipal possui 2.76 e 3.26 vezes a chance de atingir a média esperada. Enquanto ser uma escola privada reduz a chance de atingir essa média em 83%. No caso específico da rede privada, tempo um intervalo de confiança maior, mas mesmo assim, ainda preciso.
Pudemos observar que através de um modelo simples, com poucas linhas de código em R construímos resultados interessantes. Conseguimos inferir a partir de uma base de dados abertos, relações de predição desses dados a partir das suas notas de matemática e português, algo já compreendido por todas as escolas, mas também em relação a rede, em específico, ficando em aberto fazer inferências em relação as outras variáveis. Dessa forma, podemos inferir através da regressão logística quais as probabilidades de uma escola específica, ou município, em relação ao longo dos anos, mas também em relação ao qual nível escolar, e entender qual dessas variáveis impacta mais fortemente a probabilidade dessa escola de atingir a média esperada. Podendo inclusive, traçar planos de ação da escola, a partir desses resultados.