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.
<- function(theta1, theta2, erro1, erro2)
lim.func
{<- (theta1 + theta2)/2 - sqrt(erro1^2 + erro2^2)
lim.inf <- (theta1 + theta2)/2 + sqrt(erro1^2 + erro2^2)
lim.sup
return (data.frame(lim.inf, lim.sup))
}
A segunda função é para fazer todo o resto do procedimento
<- function(banco_total, ano1, ano2)
gera_grafico
{
# selecionar os itens dos dois anos
<- data.frame(
resp ID = banco_total$ID,
substr(names (banco_total), 2, 5) %in% c(ano1, ano2)]
banco_total[,
)
# selecionar as pessoas que responderam todos os itens dos dois anos
<- resp [which (rowSums(is.na(resp)) == 0),]
resp
# selecionar os itens do ano1
<- data.frame(
resp1 ID = resp$ID,
substr(names (resp), 2, 5) == ano1]
resp[,
)
# calibrar
<- mirt (
calib1 -c(1)],
resp1[,1,
itemtype = 'Rasch',
TOL = .01
)
# calcular o theta
<- data.frame (
theta1 ID = resp1$ID,
fscores(calib1, full.scores.SE = TRUE)
)
# fazer o mesmo para o ano2
<- data.frame(
resp2 ID = resp$ID,
substr(names (resp), 2, 5) == ano2]
resp[,
)
<- mirt (
calib2 -c(1)],
resp2[,1,
itemtype = 'Rasch',
TOL = .01
)
<- data.frame (
theta2 ID = resp2$ID,
fscores(calib2, full.scores.SE = TRUE)
)
# verificar diferença entre as médias
<- mean(theta1$F1) - mean (theta2$F1)
dif_media
# criar tabela do theta2 com o theta deslocado
<- data.frame (
pad2 ID = theta2$ID,
F2 = theta2$F1 + dif_media,
erro2 = theta2$SE_F1
)
# juntar as duas tabelas
<- inner_join(
comp
theta1,
pad2,by = 'ID'
)names (comp)[3] <- 'erro1'
# calcular os limites
<- lim.func (comp$F1, comp$F2, comp$erro1, comp$erro2)
limites
# juntar com a tabela anterior
<- cbind(comp, limites)
comp
# gerar o gráfico
<- ggplot(comp) +
plot 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