Eu fiz algumas escolhas aqui
sf::sf_use_s2(FALSE)
biomes_br %>%
filter(name_biome == "Caatinga") -> biomes_caat
mun_brasil[biomes_caat,] -> mun_cat #Brazilian municipaities with caatinga forest
as.factor(mun_cat$code_muni)-> mun_cat$code_muni
censo_escolar %>%
mutate(across(.cols = c(2:10), .fns = as.factor)) %>%
right_join(y = mun_cat, by = c("id_municipio" = "code_muni", "sigla_uf"="abbrev_state")) %>%
filter(ano=="2011") %>% # retirando a pandemia
filter(tipo_localizacao=="2") %>% #escola rural
filter(tipo_situacao_funcionamento=="1") %>%
filter(rede!="4") %>%
select(2:10, local_funcionamento_predio_escolar, agua_filtrada, agua_inexistente,
energia_inexistente, esgoto_inexistente, banheiro_fora_predio, banheiro_dentro_predio,
banheiro_educacao_infantil, banheiro_pne, bercario, biblioteca,
cozinha, laboratorio_ciencias, laboratorio_informatica,
parque_infantil, quadra_esportes, sala_diretoria, sala_professor, sala_atendimento_especial,
dependencia_pne, equipamento_computador, equipamento_copiadora,
equipamento_impressora, equipamento_dvd,equipamento_tv,
internet, alimentacao, -tipo_categoria_escola_privada,
etapa_ensino_infantil_creche, etapa_ensino_fundamental, etapa_ensino_medio) %>%
#filter(is.na(etapa_ensino_infantil_creche)) %>% glimpse #59 rows are NA and there NA in both F and M
drop_na() %>%
dplyr::select(4, 9:38) %>%
mutate( banheiro_full=case_when(
banheiro_fora_predio==1 ~ 1,
banheiro_dentro_predio == 1 ~ 1,
banheiro_fora_predio==0 & banheiro_dentro_predio == 0 ~ 0,
banheiro_fora_predio==0 & banheiro_dentro_predio == 1 ~ 1,
banheiro_fora_predio==1 & banheiro_dentro_predio == 0 ~ 1,
),
levels_schools=case_when(
etapa_ensino_infantil_creche==1 & etapa_ensino_fundamental==0 & etapa_ensino_medio==0 ~ "inf",
etapa_ensino_infantil_creche==0 & etapa_ensino_fundamental==1 & etapa_ensino_medio==0 ~ "school_F",
etapa_ensino_infantil_creche==0 & etapa_ensino_fundamental==0 & etapa_ensino_medio==1 ~ "school_M",
etapa_ensino_infantil_creche==1 & etapa_ensino_fundamental==1 & etapa_ensino_medio==0 ~ "inf_F",
etapa_ensino_infantil_creche==1 & etapa_ensino_fundamental==0 & etapa_ensino_medio==1 ~ "inf_M",
etapa_ensino_infantil_creche==0 & etapa_ensino_fundamental==1 & etapa_ensino_medio==1 ~ "F_M",
etapa_ensino_infantil_creche==1 & etapa_ensino_fundamental==1 & etapa_ensino_medio==1 ~ "inf_F_M",
etapa_ensino_infantil_creche==0 & etapa_ensino_fundamental==0 & etapa_ensino_medio==0 ~ "only_0"
),
to_group=case_when(
levels_schools=="inf" ~ "c_ber",
levels_schools=="school_F" ~ "s_ber",
levels_schools=="school_M" ~ "s_ber",
levels_schools=="inf_F" ~ "c_ber",
levels_schools=="inf_M" ~ "c_ber",
levels_schools=="F_M" ~ "s_ber",
levels_schools=="inf_F_M" ~ "c_ber",
levels_schools=="only_0" ~ "only_0",
),
across(.cols=c(levels_schools, to_group), .fns=as.factor)) %>%
dplyr::select(-etapa_ensino_infantil_creche, -etapa_ensino_fundamental, -etapa_ensino_medio,
-banheiro_fora_predio, -banheiro_dentro_predio) %>%
group_by(to_group, .add = TRUE) %>%
#summarise(fre1=sum(length(id_escola)))
group_split()->data_list
data_list[[1]] %>% # com coluna berçario
dplyr::select(id_escola, levels_schools, everything(), -to_group) %>%
glimpse ->infantil_schools
## Rows: 5,253
## Columns: 28
## $ id_escola <fct> 24043320, 24017892, 26066971, 22079…
## $ levels_schools <fct> inf_F, inf, inf_F, inf_F, inf_F, in…
## $ local_funcionamento_predio_escolar <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,…
## $ agua_filtrada <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,…
## $ agua_inexistente <int> 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ energia_inexistente <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ esgoto_inexistente <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ banheiro_educacao_infantil <int> 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ banheiro_pne <int> 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,…
## $ bercario <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ biblioteca <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ cozinha <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,…
## $ laboratorio_ciencias <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ laboratorio_informatica <int> 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0,…
## $ parque_infantil <int> 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,…
## $ quadra_esportes <int> 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,…
## $ sala_diretoria <int> 0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0, 1,…
## $ sala_professor <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,…
## $ sala_atendimento_especial <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ dependencia_pne <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ equipamento_computador <int> 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0,…
## $ equipamento_copiadora <int> 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,…
## $ equipamento_impressora <int> 1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0,…
## $ equipamento_dvd <int> 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0,…
## $ equipamento_tv <int> 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0,…
## $ internet <int> 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,…
## $ alimentacao <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,…
## $ banheiro_full <dbl> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,…
data_list[[2]] %>% # escolas que irei excluir
glimpse
## Rows: 580
## Columns: 29
## $ id_escola <fct> 22014594, 25050516, 22049282, 29444…
## $ local_funcionamento_predio_escolar <int> 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1,…
## $ agua_filtrada <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,…
## $ agua_inexistente <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ energia_inexistente <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ esgoto_inexistente <int> 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ banheiro_educacao_infantil <int> 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,…
## $ banheiro_pne <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ bercario <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ biblioteca <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ cozinha <int> 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1,…
## $ laboratorio_ciencias <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ laboratorio_informatica <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ parque_infantil <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ quadra_esportes <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,…
## $ sala_diretoria <int> 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0,…
## $ sala_professor <int> 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0,…
## $ sala_atendimento_especial <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ dependencia_pne <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ equipamento_computador <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ equipamento_copiadora <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ equipamento_impressora <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ equipamento_dvd <int> 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,…
## $ equipamento_tv <int> 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,…
## $ internet <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ alimentacao <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,…
## $ banheiro_full <dbl> 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1,…
## $ levels_schools <fct> only_0, only_0, only_0, only_0, onl…
## $ to_group <fct> only_0, only_0, only_0, only_0, onl…
data_list[[3]] %>% # escolas que posso retirar a coluna berçario
dplyr::select(id_escola, levels_schools, everything(),
-parque_infantil, -bercario, -banheiro_educacao_infantil, -to_group) %>%
glimpse->F_M_schools
## Rows: 20,775
## Columns: 25
## $ id_escola <fct> 22111018, 25043048, 25047809, 22138…
## $ levels_schools <fct> school_F, school_F, school_F, schoo…
## $ local_funcionamento_predio_escolar <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,…
## $ agua_filtrada <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,…
## $ agua_inexistente <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,…
## $ energia_inexistente <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,…
## $ esgoto_inexistente <int> 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1,…
## $ banheiro_pne <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ biblioteca <int> 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,…
## $ cozinha <int> 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,…
## $ laboratorio_ciencias <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ laboratorio_informatica <int> 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0,…
## $ quadra_esportes <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ sala_diretoria <int> 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0,…
## $ sala_professor <int> 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,…
## $ sala_atendimento_especial <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ dependencia_pne <int> 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,…
## $ equipamento_computador <int> 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0,…
## $ equipamento_copiadora <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ equipamento_impressora <int> 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0,…
## $ equipamento_dvd <int> 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0,…
## $ equipamento_tv <int> 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0,…
## $ internet <int> 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,…
## $ alimentacao <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,…
## $ banheiro_full <dbl> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,…
Como a ideia aqui é repetir exatamente o que o Soares fez, eu utilizei as variáveis de matrícula como uma forma de separar as escolas quanto aos seus níveis (infantil, fundamental e médio). NO entanto, descobri que existem escolas onde nessas três categorias o valor é 0:
etapa_ensino_infantil_creche==0 & etapa_ensino_fundamental==0 & etapa_ensino_medio==0 ~ "only_0"
Ao todo, dá um valor menor que 600 escolas. Então eu resolvi removê-las. Essas escolas são provavelmente, escolas profissionalizantes , EJA, etc.
Como Luke sugeriu, eu separei as escolas em infantil e Fundamental/Médio. Os valores eram, respectivamente, 5253 e 20775 escolas. E rodei um modelo irt de 2 parametros para cada um desses grupos.
Comecei retirando a variável alimentação, uma vez que ela não apresenta variação (todas as escolas tem uma mesma resposta já que são públicas).
infantil_schools %>%
select(-alimentacao) %>% glimpse->infantil_schools
## Rows: 5,253
## Columns: 27
## $ id_escola <fct> 24043320, 24017892, 26066971, 22079…
## $ levels_schools <fct> inf_F, inf, inf_F, inf_F, inf_F, in…
## $ local_funcionamento_predio_escolar <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,…
## $ agua_filtrada <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,…
## $ agua_inexistente <int> 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ energia_inexistente <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ esgoto_inexistente <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ banheiro_educacao_infantil <int> 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ banheiro_pne <int> 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,…
## $ bercario <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ biblioteca <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ cozinha <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,…
## $ laboratorio_ciencias <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ laboratorio_informatica <int> 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0,…
## $ parque_infantil <int> 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,…
## $ quadra_esportes <int> 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,…
## $ sala_diretoria <int> 0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0, 1,…
## $ sala_professor <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,…
## $ sala_atendimento_especial <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ dependencia_pne <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ equipamento_computador <int> 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0,…
## $ equipamento_copiadora <int> 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,…
## $ equipamento_impressora <int> 1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0,…
## $ equipamento_dvd <int> 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0,…
## $ equipamento_tv <int> 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0,…
## $ internet <int> 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,…
## $ banheiro_full <dbl> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,…
m_2pl_infantil_schools <- mirt(infantil_schools[,c(-1:-2)], 1, itemtype = "2PL", verbose = T)
##
Iteration: 1, Log-Lik: -37741.553, Max-Change: 2.41415
Iteration: 2, Log-Lik: -34776.486, Max-Change: 1.22362
Iteration: 3, Log-Lik: -34328.465, Max-Change: 0.53468
Iteration: 4, Log-Lik: -34150.003, Max-Change: 0.33718
Iteration: 5, Log-Lik: -34071.177, Max-Change: 0.24990
Iteration: 6, Log-Lik: -34031.219, Max-Change: 0.16330
Iteration: 7, Log-Lik: -34011.606, Max-Change: 0.14091
Iteration: 8, Log-Lik: -34003.457, Max-Change: 0.11953
Iteration: 9, Log-Lik: -33999.070, Max-Change: 0.08688
Iteration: 10, Log-Lik: -33997.370, Max-Change: 0.07381
Iteration: 11, Log-Lik: -33995.102, Max-Change: 0.04304
Iteration: 12, Log-Lik: -33994.077, Max-Change: 0.03673
Iteration: 13, Log-Lik: -33993.607, Max-Change: 0.03048
Iteration: 14, Log-Lik: -33993.227, Max-Change: 0.02031
Iteration: 15, Log-Lik: -33993.027, Max-Change: 0.01489
Iteration: 16, Log-Lik: -33992.824, Max-Change: 0.00745
Iteration: 17, Log-Lik: -33992.800, Max-Change: 0.00597
Iteration: 18, Log-Lik: -33992.781, Max-Change: 0.00383
Iteration: 19, Log-Lik: -33992.765, Max-Change: 0.00140
Iteration: 20, Log-Lik: -33992.758, Max-Change: 0.00128
Iteration: 21, Log-Lik: -33992.753, Max-Change: 0.00117
Iteration: 22, Log-Lik: -33992.738, Max-Change: 0.00033
Iteration: 23, Log-Lik: -33992.738, Max-Change: 0.00030
Iteration: 24, Log-Lik: -33992.737, Max-Change: 0.00027
Iteration: 25, Log-Lik: -33992.737, Max-Change: 0.00026
Iteration: 26, Log-Lik: -33992.736, Max-Change: 0.00130
Iteration: 27, Log-Lik: -33992.735, Max-Change: 0.00059
Iteration: 28, Log-Lik: -33992.735, Max-Change: 0.00028
Iteration: 29, Log-Lik: -33992.735, Max-Change: 0.00024
Iteration: 30, Log-Lik: -33992.735, Max-Change: 0.00117
Iteration: 31, Log-Lik: -33992.734, Max-Change: 0.00064
Iteration: 32, Log-Lik: -33992.734, Max-Change: 0.00031
Iteration: 33, Log-Lik: -33992.734, Max-Change: 0.00021
Iteration: 34, Log-Lik: -33992.734, Max-Change: 0.00103
Iteration: 35, Log-Lik: -33992.734, Max-Change: 0.00096
Iteration: 36, Log-Lik: -33992.733, Max-Change: 0.00090
Iteration: 37, Log-Lik: -33992.733, Max-Change: 0.00091
Iteration: 38, Log-Lik: -33992.732, Max-Change: 0.00066
Iteration: 39, Log-Lik: -33992.732, Max-Change: 0.00035
Iteration: 40, Log-Lik: -33992.732, Max-Change: 0.00017
Iteration: 41, Log-Lik: -33992.732, Max-Change: 0.00067
Iteration: 42, Log-Lik: -33992.732, Max-Change: 0.00039
Iteration: 43, Log-Lik: -33992.732, Max-Change: 0.00016
Iteration: 44, Log-Lik: -33992.732, Max-Change: 0.00062
Iteration: 45, Log-Lik: -33992.732, Max-Change: 0.00048
Iteration: 46, Log-Lik: -33992.732, Max-Change: 0.00014
Iteration: 47, Log-Lik: -33992.732, Max-Change: 0.00012
Iteration: 48, Log-Lik: -33992.732, Max-Change: 0.00057
Iteration: 49, Log-Lik: -33992.732, Max-Change: 0.00028
Iteration: 50, Log-Lik: -33992.732, Max-Change: 0.00013
Iteration: 51, Log-Lik: -33992.732, Max-Change: 0.00010
Iteration: 52, Log-Lik: -33992.732, Max-Change: 0.00052
Iteration: 53, Log-Lik: -33992.731, Max-Change: 0.00049
Iteration: 54, Log-Lik: -33992.731, Max-Change: 0.00010
M2(m_2pl_infantil_schools)
## M2 df p RMSEA RMSEA_5 RMSEA_95 SRMSR TLI
## stats 5736.199 275 0 0.06149153 0.0601054 0.0628766 0.04907296 0.8586996
## CFI
## stats 0.8704746
A função M2 calcula o quanto o modelo se adapta aos dados por meio de vários índices diferentes. De maneira muito simples:
Assim, de modo geral, podemos considerar que o modelo tá ruim. Quase nenhum critério é atendido. Para entender melhor o que tá causando isso, eu tentei avaliar os itens (variáveis) que estão sendo usados.
Isso pode ser feito de várias formas também. Aqui optei por usar
todas que eu conhecia, começando pela análise de fator das variáveis
(summary), e depois calculandos os valores de RMSEA para
cada uma delas (itemfit). Por fim, também determinei a
descriminação e dificuldades dos itens (coef).
summary(m_2pl_infantil_schools) # should be >50
## F1 h2
## local_funcionamento_predio_escolar 0.5107 0.26083
## agua_filtrada -0.1112 0.01237
## agua_inexistente -0.2729 0.07446
## energia_inexistente -0.6939 0.48154
## esgoto_inexistente -0.6018 0.36217
## banheiro_educacao_infantil 0.4061 0.16494
## banheiro_pne 0.6474 0.41908
## bercario 0.0897 0.00804
## biblioteca 0.5689 0.32369
## cozinha 0.5768 0.33275
## laboratorio_ciencias 0.6707 0.44988
## laboratorio_informatica 0.7983 0.63725
## parque_infantil 0.4231 0.17900
## quadra_esportes 0.7162 0.51300
## sala_diretoria 0.6672 0.44518
## sala_professor 0.5246 0.27516
## sala_atendimento_especial 0.7581 0.57475
## dependencia_pne 0.5477 0.29998
## equipamento_computador 0.9069 0.82249
## equipamento_copiadora 0.6651 0.44232
## equipamento_impressora 0.9144 0.83608
## equipamento_dvd 0.8933 0.79793
## equipamento_tv 0.9204 0.84713
## internet 0.8444 0.71297
## banheiro_full 0.6845 0.46857
##
## SS loadings: 10.742
## Proportion Var: 0.43
##
## Factor correlations:
##
## F1
## F1 1
itemfit(m_2pl_infantil_schools)
## item S_X2 df.S_X2 RMSEA.S_X2 p.S_X2
## 1 local_funcionamento_predio_escolar 41.850 10 0.025 0.000
## 2 agua_filtrada 23.255 14 0.011 0.056
## 3 agua_inexistente 56.526 13 0.025 0.000
## 4 energia_inexistente 19.704 8 0.017 0.012
## 5 esgoto_inexistente 43.432 9 0.027 0.000
## 6 banheiro_educacao_infantil 48.346 13 0.023 0.000
## 7 banheiro_pne 16.290 12 0.008 0.178
## 8 bercario 28.863 11 0.018 0.002
## 9 biblioteca 59.590 12 0.027 0.000
## 10 cozinha 23.550 9 0.018 0.005
## 11 laboratorio_ciencias 0.088 2 0.000 0.957
## 12 laboratorio_informatica 120.552 10 0.046 0.000
## 13 parque_infantil 17.378 13 0.008 0.183
## 14 quadra_esportes 24.339 11 0.015 0.011
## 15 sala_diretoria 35.648 11 0.021 0.000
## 16 sala_professor 56.990 12 0.027 0.000
## 17 sala_atendimento_especial 17.005 10 0.012 0.074
## 18 dependencia_pne 47.701 13 0.023 0.000
## 19 equipamento_computador 34.090 8 0.025 0.000
## 20 equipamento_copiadora 29.573 12 0.017 0.003
## 21 equipamento_impressora 36.949 8 0.026 0.000
## 22 equipamento_dvd 67.367 7 0.041 0.000
## 23 equipamento_tv 37.404 7 0.029 0.000
## 24 internet 77.968 10 0.036 0.000
## 25 banheiro_full 48.688 8 0.031 0.000
params2PL_inf_schools <- coef(m_2pl_infantil_schools, IRTpars = TRUE, simplify = TRUE)
round(params2PL_inf_schools$items, 2)
## a b g u
## local_funcionamento_predio_escolar 1.01 -3.36 0 1
## agua_filtrada -0.19 14.80 0 1
## agua_inexistente -0.48 -4.77 0 1
## energia_inexistente -1.64 -2.93 0 1
## esgoto_inexistente -1.28 -3.23 0 1
## banheiro_educacao_infantil 0.76 3.45 0 1
## banheiro_pne 1.45 2.89 0 1
## bercario 0.15 28.97 0 1
## biblioteca 1.18 2.14 0 1
## cozinha 1.20 -3.28 0 1
## laboratorio_ciencias 1.54 5.25 0 1
## laboratorio_informatica 2.26 0.77 0 1
## parque_infantil 0.79 4.11 0 1
## quadra_esportes 1.75 2.23 0 1
## sala_diretoria 1.52 0.10 0 1
## sala_professor 1.05 1.85 0 1
## sala_atendimento_especial 1.98 2.70 0 1
## dependencia_pne 1.11 3.09 0 1
## equipamento_computador 3.66 0.16 0 1
## equipamento_copiadora 1.52 1.81 0 1
## equipamento_impressora 3.84 0.35 0 1
## equipamento_dvd 3.38 -0.11 0 1
## equipamento_tv 4.01 -0.22 0 1
## internet 2.68 1.66 0 1
## banheiro_full 1.60 -2.95 0 1
A análise de fator mostra os valores de F1 e h2. F1 indica o quanto
cada item é relacionado com a variável latente (acima de 0.5 é bom). E
h2 mostra a propoção que a variável explica da variável latente. Em
nosso caso, os itens:
agua_filtrada, agua_inexistente, banheiro_educacao_infantil, bercario, parque_infantil
apresentam valor abaixo de 0.5. Principalmente, os itens:
agua_filtrada, agua_inexistente, bercario, já que eles
também tem uma baixíssima variância (h2).
A análise de cada item separadamente mostrou resultados um pouco
diferentes. Para essa análise, um item se encaixe bem no modelo se S_X2
e RMSEA.S_X2 forem pequenos (RMSEA.S_X2<0.08 é aceitável) e p.S_X2
não significante (> 0.05). Nossos resultados demonstram que embora
todas os nossos valores estejam dentro do RMSEA aceitável, quase nenhuma
variável deu não siginificante. Exceto
agua_filtrada, banheiro_pne, laboratorio_ciencias, parque_infantil e sala_atendimento_especial
todas as outras deram significantes.
Por fim, a última análise foi sobre a discriminação (a)
e dificuldade de cada item (b). A discriminação corresponde
a capacidade do item de discriminar os indivíduos (escolas) com
diferentes níveis do trait (infraestrutura). Enquanto que a dificuldade
é onde o item está na escala da variável latente. De maneira mais
simples, é a posícção mais informativa do item na escala/curva da
variável latente. De maneira geral, baixos valores de a
indicam que a variável não contribui muito enquanto que se
b for muito discrepante, indica que aquela variável tá
puxando a curva para um lado. nossos resultados mostram que os mesmos
itens da análise de fator estão com baixa discrminação
(agua_filtrada, agua_inexistente, banheiro_educacao_infantil, bercario, parque_infantil).
Além disso, agua_filtrada e bercario tem valores
exorbitantes de dificuldade.
Com tudo isso, pode ser difícil interpretar qual variável está prejudicando o modelo. A significância do valor de p nesse caso, pode ser devido a i) poucos dados, ii) x2 ser ser sensitivo a misfit local e iii) existência de outros fatores que modificam os itens. Acredito que é mais fácil ter acontecido isso pelas razões i e ii. Mas a terceira opção é válida visto que não controlamos as escolas de acordo com a complexidade.
infantil_schools %>%
dplyr::select(-agua_filtrada, -agua_inexistente, -banheiro_educacao_infantil, -bercario,
-parque_infantil)->reshape_data_inft_schools
m_2pl_infantil_schools_02 <- mirt(reshape_data_inft_schools[,c(-1:-2)], 1, itemtype = "2PL", verbose = T)
##
Iteration: 1, Log-Lik: -31678.297, Max-Change: 2.30059
Iteration: 2, Log-Lik: -29206.478, Max-Change: 0.90398
Iteration: 3, Log-Lik: -28805.410, Max-Change: 0.55005
Iteration: 4, Log-Lik: -28626.136, Max-Change: 0.30421
Iteration: 5, Log-Lik: -28554.036, Max-Change: 0.22425
Iteration: 6, Log-Lik: -28517.637, Max-Change: 0.17367
Iteration: 7, Log-Lik: -28499.606, Max-Change: 0.14060
Iteration: 8, Log-Lik: -28491.047, Max-Change: 0.10465
Iteration: 9, Log-Lik: -28485.966, Max-Change: 0.10356
Iteration: 10, Log-Lik: -28483.367, Max-Change: 0.07208
Iteration: 11, Log-Lik: -28481.713, Max-Change: 0.07018
Iteration: 12, Log-Lik: -28480.877, Max-Change: 0.05012
Iteration: 13, Log-Lik: -28480.303, Max-Change: 0.03593
Iteration: 14, Log-Lik: -28479.956, Max-Change: 0.02989
Iteration: 15, Log-Lik: -28479.749, Max-Change: 0.02174
Iteration: 16, Log-Lik: -28479.500, Max-Change: 0.01261
Iteration: 17, Log-Lik: -28479.469, Max-Change: 0.01069
Iteration: 18, Log-Lik: -28479.445, Max-Change: 0.00930
Iteration: 19, Log-Lik: -28479.376, Max-Change: 0.00114
Iteration: 20, Log-Lik: -28479.373, Max-Change: 0.00034
Iteration: 21, Log-Lik: -28479.373, Max-Change: 0.00163
Iteration: 22, Log-Lik: -28479.372, Max-Change: 0.00036
Iteration: 23, Log-Lik: -28479.372, Max-Change: 0.00028
Iteration: 24, Log-Lik: -28479.372, Max-Change: 0.00137
Iteration: 25, Log-Lik: -28479.371, Max-Change: 0.00074
Iteration: 26, Log-Lik: -28479.371, Max-Change: 0.00037
Iteration: 27, Log-Lik: -28479.371, Max-Change: 0.00021
Iteration: 28, Log-Lik: -28479.371, Max-Change: 0.00104
Iteration: 29, Log-Lik: -28479.371, Max-Change: 0.00020
Iteration: 30, Log-Lik: -28479.371, Max-Change: 0.00088
Iteration: 31, Log-Lik: -28479.370, Max-Change: 0.00073
Iteration: 32, Log-Lik: -28479.370, Max-Change: 0.00037
Iteration: 33, Log-Lik: -28479.370, Max-Change: 0.00019
Iteration: 34, Log-Lik: -28479.370, Max-Change: 0.00075
Iteration: 35, Log-Lik: -28479.370, Max-Change: 0.00033
Iteration: 36, Log-Lik: -28479.370, Max-Change: 0.00017
Iteration: 37, Log-Lik: -28479.370, Max-Change: 0.00069
Iteration: 38, Log-Lik: -28479.370, Max-Change: 0.00030
Iteration: 39, Log-Lik: -28479.370, Max-Change: 0.00015
Iteration: 40, Log-Lik: -28479.370, Max-Change: 0.00063
Iteration: 41, Log-Lik: -28479.370, Max-Change: 0.00027
Iteration: 42, Log-Lik: -28479.369, Max-Change: 0.00013
Iteration: 43, Log-Lik: -28479.369, Max-Change: 0.00057
Iteration: 44, Log-Lik: -28479.369, Max-Change: 0.00023
Iteration: 45, Log-Lik: -28479.369, Max-Change: 0.00012
Iteration: 46, Log-Lik: -28479.369, Max-Change: 0.00052
Iteration: 47, Log-Lik: -28479.369, Max-Change: 0.00019
Iteration: 48, Log-Lik: -28479.369, Max-Change: 0.00010
M2(m_2pl_infantil_schools_02)
## M2 df p RMSEA RMSEA_5 RMSEA_95 SRMSR TLI
## stats 4511.782 170 0 0.06973442 0.06797802 0.07149294 0.05297804 0.8768078
## CFI
## stats 0.8897754
#summary(m_2pl_infantil_schools_02) # should be >50
#itemfit(m_2pl_infantil_schools_02)
#params2PL_inf_schools_02 <- coef(m_2pl_infantil_schools_02, IRTpars = TRUE, simplify = TRUE)
#round(params2PL_inf_schools_02$items, 2)
#personfitPlot(m_2pl_infantil_schools_02)
anova(m_2pl_infantil_schools, m_2pl_infantil_schools_02)
## AIC SABIC HQ BIC logLik
## m_2pl_infantil_schools 68085.46 68254.91 68200.25 68413.79 -33992.73
## m_2pl_infantil_schools_02 57038.74 57174.29 57130.57 57301.40 -28479.37
## X2 df p
## m_2pl_infantil_schools
## m_2pl_infantil_schools_02 11026.724 32505846 1
O modelo refeito é melhor, mas sem uma real diferença estatística.
F_M_schools %>%
select(-alimentacao) %>%
glimpse -> F_M_schools
## Rows: 20,775
## Columns: 24
## $ id_escola <fct> 22111018, 25043048, 25047809, 22138…
## $ levels_schools <fct> school_F, school_F, school_F, schoo…
## $ local_funcionamento_predio_escolar <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,…
## $ agua_filtrada <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,…
## $ agua_inexistente <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,…
## $ energia_inexistente <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,…
## $ esgoto_inexistente <int> 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1,…
## $ banheiro_pne <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ biblioteca <int> 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,…
## $ cozinha <int> 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,…
## $ laboratorio_ciencias <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ laboratorio_informatica <int> 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0,…
## $ quadra_esportes <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ sala_diretoria <int> 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0,…
## $ sala_professor <int> 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,…
## $ sala_atendimento_especial <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ dependencia_pne <int> 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,…
## $ equipamento_computador <int> 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0,…
## $ equipamento_copiadora <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ equipamento_impressora <int> 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0,…
## $ equipamento_dvd <int> 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0,…
## $ equipamento_tv <int> 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0,…
## $ internet <int> 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,…
## $ banheiro_full <dbl> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,…
m_2pl_FM_schools <- mirt(F_M_schools[,c(-1:-2)], 1, itemtype = "2PL", verbose = T)
##
Iteration: 1, Log-Lik: -134487.306, Max-Change: 2.64716
Iteration: 2, Log-Lik: -118088.585, Max-Change: 1.06315
Iteration: 3, Log-Lik: -114647.767, Max-Change: 0.70062
Iteration: 4, Log-Lik: -113477.298, Max-Change: 0.81727
Iteration: 5, Log-Lik: -112709.001, Max-Change: 0.45710
Iteration: 6, Log-Lik: -112203.691, Max-Change: 0.26833
Iteration: 7, Log-Lik: -112054.498, Max-Change: 0.15843
Iteration: 8, Log-Lik: -111963.513, Max-Change: 0.16453
Iteration: 9, Log-Lik: -111916.324, Max-Change: 0.08513
Iteration: 10, Log-Lik: -111890.830, Max-Change: 0.06931
Iteration: 11, Log-Lik: -111878.697, Max-Change: 0.08420
Iteration: 12, Log-Lik: -111869.551, Max-Change: 0.04423
Iteration: 13, Log-Lik: -111863.515, Max-Change: 0.04500
Iteration: 14, Log-Lik: -111860.478, Max-Change: 0.02985
Iteration: 15, Log-Lik: -111857.803, Max-Change: 0.02532
Iteration: 16, Log-Lik: -111853.700, Max-Change: 0.01155
Iteration: 17, Log-Lik: -111852.957, Max-Change: 0.00752
Iteration: 18, Log-Lik: -111852.366, Max-Change: 0.00692
Iteration: 19, Log-Lik: -111850.142, Max-Change: 0.00542
Iteration: 20, Log-Lik: -111850.022, Max-Change: 0.00395
Iteration: 21, Log-Lik: -111849.917, Max-Change: 0.00310
Iteration: 22, Log-Lik: -111849.699, Max-Change: 0.00549
Iteration: 23, Log-Lik: -111849.634, Max-Change: 0.00193
Iteration: 24, Log-Lik: -111849.599, Max-Change: 0.00156
Iteration: 25, Log-Lik: -111849.552, Max-Change: 0.00134
Iteration: 26, Log-Lik: -111849.530, Max-Change: 0.00124
Iteration: 27, Log-Lik: -111849.511, Max-Change: 0.00116
Iteration: 28, Log-Lik: -111849.434, Max-Change: 0.00141
Iteration: 29, Log-Lik: -111849.427, Max-Change: 0.00104
Iteration: 30, Log-Lik: -111849.417, Max-Change: 0.00130
Iteration: 31, Log-Lik: -111849.411, Max-Change: 0.00122
Iteration: 32, Log-Lik: -111849.403, Max-Change: 0.00032
Iteration: 33, Log-Lik: -111849.402, Max-Change: 0.00025
Iteration: 34, Log-Lik: -111849.401, Max-Change: 0.00021
Iteration: 35, Log-Lik: -111849.400, Max-Change: 0.00020
Iteration: 36, Log-Lik: -111849.399, Max-Change: 0.00019
Iteration: 37, Log-Lik: -111849.396, Max-Change: 0.00074
Iteration: 38, Log-Lik: -111849.394, Max-Change: 0.00065
Iteration: 39, Log-Lik: -111849.392, Max-Change: 0.00059
Iteration: 40, Log-Lik: -111849.389, Max-Change: 0.00071
Iteration: 41, Log-Lik: -111849.387, Max-Change: 0.00016
Iteration: 42, Log-Lik: -111849.387, Max-Change: 0.00046
Iteration: 43, Log-Lik: -111849.386, Max-Change: 0.00011
Iteration: 44, Log-Lik: -111849.386, Max-Change: 0.00039
Iteration: 45, Log-Lik: -111849.385, Max-Change: 0.00067
Iteration: 46, Log-Lik: -111849.385, Max-Change: 0.00020
Iteration: 47, Log-Lik: -111849.385, Max-Change: 0.00043
Iteration: 48, Log-Lik: -111849.385, Max-Change: 0.00022
Iteration: 49, Log-Lik: -111849.384, Max-Change: 0.00018
Iteration: 50, Log-Lik: -111849.384, Max-Change: 0.00042
Iteration: 51, Log-Lik: -111849.384, Max-Change: 0.00010
M2(m_2pl_FM_schools)
## M2 df p RMSEA RMSEA_5 RMSEA_95 SRMSR TLI
## stats 15739.37 209 0 0.05980778 0.05901623 0.06060026 0.0498329 0.9292922
## CFI
## stats 0.9360263
O TLI, CFI e SRMSR estão bons e o RMSEA está dentro do aceitável.
summary(m_2pl_FM_schools) # should be >50
## F1 h2
## local_funcionamento_predio_escolar 0.724 0.52398
## agua_filtrada -0.039 0.00152
## agua_inexistente -0.194 0.03772
## energia_inexistente -0.680 0.46299
## esgoto_inexistente -0.718 0.51536
## banheiro_pne 0.769 0.59072
## biblioteca 0.776 0.60293
## cozinha 0.594 0.35285
## laboratorio_ciencias 0.853 0.72713
## laboratorio_informatica 0.862 0.74276
## quadra_esportes 0.765 0.58570
## sala_diretoria 0.790 0.62469
## sala_professor 0.625 0.39034
## sala_atendimento_especial 0.755 0.56989
## dependencia_pne 0.738 0.54498
## equipamento_computador 0.922 0.85052
## equipamento_copiadora 0.745 0.55500
## equipamento_impressora 0.940 0.88346
## equipamento_dvd 0.938 0.88003
## equipamento_tv 0.941 0.88528
## internet 0.896 0.80279
## banheiro_full 0.792 0.62783
##
## SS loadings: 12.758
## Proportion Var: 0.58
##
## Factor correlations:
##
## F1
## F1 1
itemfit(m_2pl_FM_schools)
## item S_X2 df.S_X2 RMSEA.S_X2 p.S_X2
## 1 local_funcionamento_predio_escolar 244.022 8 0.038 0.000
## 2 agua_filtrada 71.452 14 0.014 0.000
## 3 agua_inexistente 161.415 15 0.022 0.000
## 4 energia_inexistente 50.695 12 0.012 0.000
## 5 esgoto_inexistente 1040.334 11 0.067 0.000
## 6 banheiro_pne 32.562 13 0.009 0.002
## 7 biblioteca 27.214 12 0.008 0.007
## 8 cozinha 246.288 12 0.031 0.000
## 9 laboratorio_ciencias 22.693 9 0.009 0.007
## 10 laboratorio_informatica 114.026 10 0.022 0.000
## 11 quadra_esportes 25.179 13 0.007 0.022
## 12 sala_diretoria 103.687 11 0.020 0.000
## 13 sala_professor 130.183 13 0.021 0.000
## 14 sala_atendimento_especial 48.893 13 0.012 0.000
## 15 dependencia_pne 45.371 13 0.011 0.000
## 16 equipamento_computador 90.298 9 0.021 0.000
## 17 equipamento_copiadora 51.427 12 0.013 0.000
## 18 equipamento_impressora 49.855 8 0.016 0.000
## 19 equipamento_dvd 402.290 8 0.049 0.000
## 20 equipamento_tv 224.435 8 0.036 0.000
## 21 internet 71.239 11 0.016 0.000
## 22 banheiro_full 360.320 8 0.046 0.000
params2PL_FM_schools <- coef(m_2pl_FM_schools, IRTpars = TRUE, simplify = TRUE)
round(params2PL_FM_schools$items, 2)
## a b g u
## local_funcionamento_predio_escolar 1.79 -2.50 0 1
## agua_filtrada -0.07 42.67 0 1
## agua_inexistente -0.34 -5.04 0 1
## energia_inexistente -1.58 -1.79 0 1
## esgoto_inexistente -1.76 -2.03 0 1
## banheiro_pne 2.04 2.62 0 1
## biblioteca 2.10 1.93 0 1
## cozinha 1.26 -2.09 0 1
## laboratorio_ciencias 2.78 3.23 0 1
## laboratorio_informatica 2.89 1.19 0 1
## quadra_esportes 2.02 2.45 0 1
## sala_diretoria 2.20 0.67 0 1
## sala_professor 1.36 1.63 0 1
## sala_atendimento_especial 1.96 3.07 0 1
## dependencia_pne 1.86 2.73 0 1
## equipamento_computador 4.06 0.60 0 1
## equipamento_copiadora 1.90 2.04 0 1
## equipamento_impressora 4.69 0.76 0 1
## equipamento_dvd 4.61 0.44 0 1
## equipamento_tv 4.73 0.34 0 1
## internet 3.43 1.68 0 1
## banheiro_full 2.21 -2.06 0 1
A análise de fator e a discriminação deram bons resultados para todos os itens. O X2 deu bastante alto. Bastante mesmo. E nenhum item foi não significativo, de modo que tivemos o mesmo problema.
Essa é a parte que mais importa. É definitivamente, a infraestrutura das escolas.
ind_ability_2pl_FM<-personfit(m_2pl_FM_schools)
ind_ability_2pl_FM %>%
glimpse()
## Rows: 20,775
## Columns: 5
## $ outfit <dbl> 0.0394305, 1.2637153, 0.7351119, 0.0394305, 0.7220451, 0.3744…
## $ z.outfit <dbl> -0.92791190, 0.64353165, 0.26458664, -0.92791190, 0.25317505,…
## $ infit <dbl> 0.1045913, 1.9187621, 1.5089868, 0.1045913, 1.3225306, 1.0646…
## $ z.infit <dbl> -1.3291368, 1.1559920, 1.2163528, -1.3291368, 0.8727072, 0.34…
## $ Zh <dbl> 0.85401298, -1.05497940, -0.74765176, 0.85401298, -0.59632189…
personfitPlot(m_2pl_FM_schools)
plot_histogram(ind_ability_2pl_FM$Zh)
A abilidade do indivíduo é traduzida em três medidas:
z.outfit, z.infit e zh. Outfit é quando a
abilidade é estimada sendo sensível a respostas sem padrões.
Infit é quando a abilidade é estimada e não é sensível a
alterações de padrões. E zh é a escala de infraestrutura
escolar, propriamente falando.
De maneira geral, a primeira imagem mostra que a maioria da “abilidade” das escolas foram capturadas pelo modelo. No entanto, é importante a gente o segundo gráfico para notar que existem escolas com uma infraestrutura muito negativa. Isso pode significar realmente, a inexistência de infraestrutura. Mas também, pode ser devido a ausência de algumas respostas a itens específicos que tenham uma discriminação muito forte. Assim, antes de poder usar a escalaa, precisamos identificar melhor esses pontos.
#```{r, warning=FALSE, message=FALSE, collapse=TRUE, fig.align=‘center’, fig.dim=c(10,10)} personfit(m_2pl_infantil_schools_02) %>% dplyr::select(Zh) %>% glimpse->zh_inf_2011
zh_inf_2011_rescaled = 50 + ((zh_inf_2011\(Zh - median(zh_inf_2011\)Zh)) / sd(zh_inf_2011$Zh)) * 10
plot_histogram(zh_inf_2011_rescaled)
infantil_schools %>% dplyr::select(-agua_filtrada, -agua_inexistente, -banheiro_educacao_infantil, -bercario, -parque_infantil) %>% cbind(zh_inf_2011_rescaled) %>% rename(“zh”=zh_inf_2011_rescaled) %>% glimpse->inf_infra_index
summary(inf_infra_index)
devtools::install_github(“pmcharrison/psychTestR”) library(psychTestR)
seq(from = -18.85, to = 57.03, by = 4.0)->t1
information <- psychTestR::info(m_2pl_infantil_schools_02, theta = t1)
plot(trait_values, information, type = “l”, xlab = “Latent Trait”, ylab = “Test Information”, main = “Test Information Curve”)
personfit(m_2pl_FM_schools) %>% dplyr::select(Zh) %>% glimpse->zh_FM_2011
zh_FM_2011_rescaled = 50 + ((zh_FM_2011\(Zh - median(zh_FM_2011\)Zh)) / sd(zh_FM_2011$Zh)) * 10
plot_histogram(zh_FM_2011_rescaled)
F_M_schools %>% cbind(zh_FM_2011_rescaled) %>% rename(“zh”=zh_FM_2011_rescaled) %>% glimpse
#```
Antes de comparar com 2019, acho que seria exramemente interessante rodar o modelo completo usando a complexidade. Tentei realizar essas análises não com a complexidade escolar em si, mas com quantidade de níveis que a escola tem. Segue abaixo
#```{r, warning=FALSE, message=FALSE, collapse=TRUE} library(lordif)
infantil_schools %>% group_by(levels_schools) %>% summarise(sum(length(id_escola))) glimpse levels(infantil_schools$levels_schools)
infantil_schools %>% mutate(levels_schools=as.character(levels_schools), levels_schools=as.factor(levels_schools))->teste1
levels(teste1$levels_schools)
dif_try01<- lordif(m_2pl_infantil_schools, teste1$levels_schools)
m_2pl_infantil_schools_03 <- mirt(teste1[,c(-1:-2)], 1, itemtype = “2PL”, verbose = T, group = “levels_schools”)
#```