terça-feira, 12 de novembro de 2013

Como a TRI funciona?



Explicamos em postagem anterior os principios gerais que regem a TRI, teoria usada no ENEM. Lá foi dito que seria fornecido um programa que calculasse a nota (em uma escala de 0 a 1000) que um aluno teria para um dado padrão de respostas. Esse programa demorou quase 1 ano para aparecer aqui no blog mas está fornecido nesta postagem. Tudo que ele faz é calcular de forma aproximada a estimativa (de máxima verossimilhança) da proficiência de um aluno. Para isso, além do programa necessitar do padrão de respostas, ele precisa ser informado das características das questões (discriminação, dificuldade e probabilidade de acerto casual). 

O programa foi escrito em R e está longe de estar otimizado mas serve como ilustração do funcionamento da TRI. Como exemplo, imagine uma prova com 10 questões sendo 5 fáceis (igualmente) e 5 difíceis (igualmente). Para entender melhor, imagine 4 alunos: o 1o erra tudo, o 2o acerta só as questões fáceis, o 3o acerta só as questões difíceis e o último acerta tudo.  As notas obtidas foram respectivamente 275, 487, 375 e 700. 

Alguns comentários merecem ser feitos:
  • a ordem das notas parece razoável com exceção do que acontece com o 3o aluno;
  • a nota do 3o aluno é mais baixa que a do 2o aluno pois a TRI entende que um aluno que acerta uma questão difícil deve acertar ainda com mais facilidade uma questão fácil. Como isso não aconteceu, a TRI passa a suspeitar desse padrão de resposta achando que esse aluno pode ter acertado as 5 questões difíceis de forma meramente casual.
  • poderia se imaginar que a nota do 4o aluno seria mais alta mas a escassez de questões impede que isso aconteça. Efetivamente, aumentando para 100 questões sendo metade fácil e metade difícil faria a nota do aluno que acerta tudo subir para 962.
O gráfico do início mostra a resposta obtida com o comportamento do 3o aluno. Gráficos similares podem ser obtidos para os outros 3 alunos do exemplo acima.

O programa permite ao seu usuário escolher:
  •  o número n de questões;
  •  as discriminações ai dessas questões;
  •  as dificuldades bi dessas questões; 
  •  as probabilidade de acerto casual ci dessas questões; 
  • o padrão de respostas do aluno (0, para erro; 1 para acerto);
  • a resolução resol do mecanismo de busca da nota;

O programa fornece todo o gráfico da função de verosimilhança (na escala logarítmica), bem como o valor que a maximiza. Isso define a nota do aluno, escrita ao pé do gráfico. Como foi dito antes, o cálculo que o progama faz é aproximado mas que serve aos propósitos ilustrativos dessa postagem.


#Como calcular aproximadamente a nota de um aluno

#Copyright: Dani Gamerman
#
# # Características dos ítens
n=10                           # número de questões  
m=5
ai=c(rep(1,n))                 # mesma discriminação
bi=c(rep(-1,n/2),rep(1,n/2))   # metade fácil, metade difícil
ci=c(rep(1/m,n))               # admite-se acerto casual

# possíveis padrões de resposta
d0=c(rep(0,n))                 # erra todas
d1=c(rep(1,n/2),rep(0,n/2))    # erra difíceis e acerta fáceis
d2=c(rep(0,n/2),rep(1,n/2))    # acerta difíceis e erra fáceis
d3=c(rep(1,n))                 # acerta todas

# grade de valores para proficiência
resol=0.1
theta=seq(-4,4,resol)
N=length(theta)

# escolha do padrão de resposta a ter proficiência calculada
dados = d3                

# cálculo da verossimilhança
llik=0*c(1:N)
for(j in 1:N) {
pi=ci + (1-ci)/(1 + exp (-ai*(theta[j]-bi)));
llik[j]= sum (dados*log(pi)) + sum ((1-dados)*log(1-pi)) - 0.5*theta[j]^2}

#nota do aluno
notas= 1000*(4+theta)/8
indice= which(llik==max(llik))
nota= notas[indice]

# determinação gráfica da nota
plot(notas,llik,type="l",xlab="nota",ylab="log-verossimilhança")
lines(rep(nota,2),c(min(llik),llik[indice]))
text(nota,min(llik),as.character(nota),pos=2)

Nenhum comentário:

Postar um comentário