Chapter 4 Avaliar a equalização
Para comparar o teste de um ano com o teste do ano seguinte, adotamos o procedimento adaptado do artigo de Yu & Popp (2005). Para cada ano, adotamos o seguinde procedimento:
- Excluir os itens com DIF
- Selecionar as pessoas que responderam todos os itens dos dois anos
- Calibrar cada ano em separado somente com essas pessoas
- Calcular o theta das pessoas em cada ano
- Plotar as notas em um gráfico
- No mesmo gráfico plotar os limites inferior e superior
Para isso, criamos duas funções para facilitar o procedimento. A primeira função é para calcular os limites inferior e superior.
lim.func <- function(theta1, theta2, erro1, erro2)
{
lim.inf <- (theta1 + theta2)/2 - sqrt(erro1^2 + erro2^2)
lim.sup <- (theta1 + theta2)/2 + sqrt(erro1^2 + erro2^2)
return (data.frame(lim.inf, lim.sup))
}A segunda função é para fazer todo o resto do procedimento
gera_grafico <- function(banco_total, ano1, ano2)
{
# selecionar os itens dos dois anos
resp <- data.frame(
ID = banco_total$ID,
banco_total[,substr(names (banco_total), 2, 5) %in% c(ano1, ano2)]
)
# selecionar as pessoas que responderam todos os itens dos dois anos
resp <- resp [which (rowSums(is.na(resp)) == 0),]
# selecionar os itens do ano1
resp1 <- data.frame(
ID = resp$ID,
resp[,substr(names (resp), 2, 5) == ano1]
)
# calibrar
calib1 <- mirt (
resp1[,-c(1)],
1,
itemtype = 'Rasch',
TOL = .01
)
# calcular o theta
theta1 <- data.frame (
ID = resp1$ID,
fscores(calib1, full.scores.SE = TRUE)
)
# fazer o mesmo para o ano2
resp2 <- data.frame(
ID = resp$ID,
resp[,substr(names (resp), 2, 5) == ano2]
)
calib2 <- mirt (
resp2[,-c(1)],
1,
itemtype = 'Rasch',
TOL = .01
)
theta2 <- data.frame (
ID = resp2$ID,
fscores(calib2, full.scores.SE = TRUE)
)
# verificar diferença entre as médias
dif_media <- mean(theta1$F1) - mean (theta2$F1)
# criar tabela do theta2 com o theta deslocado
pad2 <- data.frame (
ID = theta2$ID,
F2 = theta2$F1 + dif_media,
erro2 = theta2$SE_F1
)
# juntar as duas tabelas
comp <- inner_join(
theta1,
pad2,
by = 'ID'
)
names (comp)[3] <- 'erro1'
# calcular os limites
limites <- lim.func (comp$F1, comp$F2, comp$erro1, comp$erro2)
# juntar com a tabela anterior
comp <- cbind(comp, limites)
# gerar o gráfico
plot <- ggplot(comp) +
geom_point(aes(x = F1, y = F2)) +
geom_point(aes(x = lim.inf, y = lim.sup, colour = 'red')) +
geom_point(aes(x = lim.sup, y = lim.inf, colour = 'red'))
ggplotly(plot)
}Agora gerar os gráficos
gera_grafico(dplyr::select (banco19_20, !(c(dif19, dif20))), 2019, 2020)##
Iteration: 1, Log-Lik: -12427.364, Max-Change: 0.65275
Iteration: 2, Log-Lik: -12368.260, Max-Change: 0.06345
Iteration: 3, Log-Lik: -12365.649, Max-Change: 0.01533
Iteration: 4, Log-Lik: -12365.247, Max-Change: 0.00855
##
Iteration: 1, Log-Lik: -10829.536, Max-Change: 0.25387
Iteration: 2, Log-Lik: -10825.410, Max-Change: 0.01987
Iteration: 3, Log-Lik: -10825.326, Max-Change: 0.00588
gera_grafico(dplyr::select (banco20_21, !(c(dif20, dif21))), 2020, 2021)##
Iteration: 1, Log-Lik: -11061.416, Max-Change: 0.48784
Iteration: 2, Log-Lik: -11031.849, Max-Change: 0.06605
Iteration: 3, Log-Lik: -11030.666, Max-Change: 0.01471
Iteration: 4, Log-Lik: -11030.580, Max-Change: 0.00920
##
Iteration: 1, Log-Lik: -10175.993, Max-Change: 0.40155
Iteration: 2, Log-Lik: -10161.746, Max-Change: 0.05062
Iteration: 3, Log-Lik: -10161.159, Max-Change: 0.01086
Iteration: 4, Log-Lik: -10161.029, Max-Change: 0.00638