Chapter 6 Theta
Calcular o theta ano a ano. Primeiro criar a função para isso.
<- function (prova, modelo, faculdade)
calcula_theta
{# selecionar as pessoas do ano
<- dplyr::filter (banco_theta, anoTP == prova & grupo == faculdade) %>%
banco_ano select ('ID', 'ID2', 'ID3', 'anoTP', starts_with(paste0('Q', prova)))
# calcular o theta
$theta <- data.frame (fscores(modelo[[paste0('mod_', prova)]], response.pattern = banco_ano[,5:ncol(banco_ano)]))$F1
banco_ano
return(banco_ano)
}
Criar um modelo mirt para cada edição do teste
<- list()
mod.ano_unesp
<- 1
i for(ano in 2019:2021)
{<- pars_unesp [substr(rownames(pars_unesp), 2, 5) == ano,]
pars.ano_unesp <- data.frame(
pars.mirt_unesp a1 = pars.ano_unesp$a,
d = -pars.ano_unesp$a * pars.ano_unesp$b,
g = 0
)
<- generate.mirt_object(pars.mirt_unesp, '2PL')
mod.ano_unesp[[i]]
<- i + 1
i
}names (mod.ano_unesp) <- paste0('mod_', 2019:2021)
<- list()
mod.ano_unesp
<- 1
i for(ano in 2019:2021)
{<- pars_unesp [substr(rownames(pars_unesp), 2, 5) == ano,]
pars.ano_unesp <- data.frame(
pars.mirt_unesp a1 = pars.ano_unesp$a,
d = -pars.ano_unesp$a * pars.ano_unesp$b,
g = 0
)
<- generate.mirt_object(pars.mirt_unesp, '2PL')
mod.ano_unesp[[i]]
<- i + 1
i
}names (mod.ano_unesp) <- paste0('mod_', 2019:2021)
= list()
mod.ano_unicamp = 1
i for(ano in 2019:2021)
{<- pars_unicamp [substr(rownames(pars_unicamp), 2, 5) == ano,]
pars.ano_unicamp <- data.frame(
pars.mirt_unicamp a1 = pars.ano_unicamp$a,
d = -pars.ano_unicamp$a * pars.ano_unicamp$b,
g = 0
)
<- generate.mirt_object(pars.mirt_unicamp, '2PL')
mod.ano_unicamp[[i]]
<- i + 1
i
}names (mod.ano_unicamp) <- paste0('mod_', 2019:2021)
Agora calcular e armazenar no objeto.
# fazer cruzamento do banco das respostas com o banco inicial
<- left_join(banco[, c('ID', 'ID2', 'ID3', 'anoTP')], banco_total, by = 'ID2')
banco_theta
nrow(banco_theta)
## [1] 3534
<- list()
banco_theta_ano_unesp <- list()
banco_theta_ano_unicamp
for (prova in 2019:2021)
paste0('theta_', prova)]] <- calcula_theta(prova, mod.ano_unesp, 'unesp')
banco_theta_ano_unesp[[
for (prova in 2019:2021)
paste0('theta_', prova)]] <- calcula_theta(prova, mod.ano_unicamp, 'unicamp')
banco_theta_ano_unicamp[[
table (banco_theta_ano_unesp[[paste0('theta_', prova)]]$anoTP)
##
## 2021
## 525
table(banco$anoTP, banco$grupo)
##
## unesp unicamp
## 2019 522 676
## 2020 532 625
## 2021 525 654
Inserir o theta no objeto banco_final
.
<- data.frame()
banco_final
for (prova in 2019:2021)
{<- filter (banco, anoTP == prova & grupo == 'unesp')
banco.ano <- left_join(banco.ano, banco_theta_ano_unesp[[paste0('theta_', prova)]][,c('ID3', 'theta')], by = 'ID3')
banco.ano
<- rbind (banco_final, banco.ano)
banco_final
}
for (prova in 2019:2021)
{<- filter (banco, anoTP == prova & grupo == 'unicamp')
banco.ano <- left_join(banco.ano, banco_theta_ano_unicamp[[paste0('theta_', prova)]][,c('ID3', 'theta')], by = 'ID3')
banco.ano
<- rbind (banco_final, banco.ano)
banco_final
}
reactable (
select (banco_final, ID, ID2, ID3, anoTP, ano_aluno, grupo, total, theta),
filterable = TRUE,
defaultColDef = colDef(align = "center"),
highlight = TRUE,
showPagination = TRUE,
defaultPageSize = 10,
compact = TRUE
)