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