[Conteúdo] Como funciona a TRI no ENEM e como implementar com a linguagem R
Olá, comunidade de desenvolvedores!
Neste artigo, embarcamos em uma jornada "emocionante" 😂 para desvendar os segredos da TRI (Teoria de Resposta ao Item), o sistema por trás da pontuação do ENEM. Abordaremos a matemática por trás da TRI, explorando a fórmula que alimenta esse sistema de avaliação inovador.
O que você encontrará:
- Uma introdução à TRI e sua importância no ENEM.
- Um mergulho profundo na fórmula matemática da TRI, desvendando cada componente.
- Uma análise das implicações da TRI para os participantes do ENEM.
- Uma discussão sobre os desafios e oportunidades da TRI na avaliação educacional.
- Como implementar usando a linguagem R.
Introdução
A Teoria de Resposta ao Item (TRI) surge como uma solução inovadora aos desafios da teoria clássica dos testes (TCT). Vamos explorar essa ferramenta poderosa, desvendando seus princípios de forma intuitiva e acessível.
Comparando a TRI e TCT
Imagine uma prova com 10 questões. Na TCT, a nota final (soma de acertos) representa o "nível" do aluno. No entanto, essa abordagem apresenta algumas falhas:
-
Qualidade dos itens: Questões mal elaboradas podem distorcer a avaliação, pois mesmo os melhores alunos podem errá-las.
-
Comparabilidade limitada: As notas só são comparáveis entre alunos que realizaram a mesma prova.
A TRI supera essas limitações focando na análise individual de cada item, independente da prova como um todo.
Parametrizando os Itens
A TRI atribui parâmetros específicos a cada item, permitindo uma avaliação mais precisa e individualizada.
- Dificuldade: Indica a probabilidade de um aluno com nível médio de habilidade acertar a questão.
- Discriminação: Mede a capacidade da questão de diferenciar alunos com diferentes níveis de habilidade.
- Chute: Probabilidade de um aluno acertar a questão por mera sorte.
Compreendendo a Relação Habilidade-Parâmetros
A habilidade do aluno se relaciona com os parâmetros dos itens da seguinte forma:
- Alunos com maior habilidade: maior probabilidade de acertar questões com alto nível de dificuldade.
- Alunos com menor habilidade: maior probabilidade de errar questões com alto nível de dificuldade.
Pense o seguinte, imagine que exista uma "coisa" na sua cabeça, que aqui vou chamar de habilidade, que quanto mais você tem, mais fácil você consegue resolver problemas de matemática. Acho que essa é uma hipótese bastante razoável. Imagine que quanto maior for a sua habilidade, mais provável é você acertar um item. Então, se eu quiser modelar um item pensando em modelar a probabilidade de alguém com uma habilidade qualquer acertar um item, eu poderia fazer algo mais ou menos assim:
P(acertar item | habilidade alta) = 0,9
Nesse, uma pessoa tende a quase sempre acertar o item quando tem uma habilidade alta. Ou:
P(acertar item | habilidade baixa) = 0,1
quando a pessoa tem uma habilidade baixa. Pensando nisso, eu preciso então de um modelo matemático para a probabilidade de acertar um item com base em uma habilidade de um respondente. Aqui, para facilitar a nossa vida, vamos dizer que a dificuldade de um item é indicada por um parâmetro b e que a habilidade é indicada por um parâmetro θ. Lembre-se também que qualquer probabilidade está limitada entre 0 e 1, isto é, 0≤P(1|b,θ)≤1. Nesse caso, como a curva é limitada, a curva que modela essa probabilidade tem que ter uma cara sigmoide.
Se você parar para pensar, essa curva faz todo o sentido. Matematicamente preciso de uma função matemática com essa cara e as mais usadas na estatística são a distribuição normal acumulada (ϕ(θ)) ou a função logística. A última, como é a mais simples, será a nossa escolha. A "cara" dessa função é essa aqui:
f(x)=\frac{1}{1+e^{−x}}
Veja que quando x=0 segue que f(0)=0,5, como é fácil ver no gráfico acima. Agora, se eu parametrizar essa curva assim:
f(x)=\frac{1}{1+e^{−a(x−b)}}
então b é o valor de x no ponto médio, o 0,5 na outra; a é a "inclinação" da curva, quanto maior o a, mais inclinada.
Veja que essa função matemática é perfeita para modelar a probabilidade de alguém com habilidade θ de acertar um item de uma certa dificuldade. A dificuldade de um item a gente pode usar como o b, pois quanto mais difícil o item maior deve ser a habilidade para ter a probabilidade de pelo menos 50% de acertar. O a dirá para a gente o quanto discriminante um item é, porque se a curva for bem inclinada, um pequeno aumento de habilidade aumenta muito a probabilidade de acertar e uma pequena diminuição na habilidade diminui muito a probabilidade de acertar. Então chegamos no modelo logístico de dois parâmetros (2PL):
P(U_i = 1) = \frac{1}{1+e^{-a(\theta - b)}}
onde U_i é uma variável indicadora que é igual a 1 quando o indivíduo i acerta o item. Aqui você pode ser perguntar: "putz, tem três parâmetros aí, como estimar isso???". Foge completamente ao escopo dessa resposta, mas existe um método chamado método da máxima verossimilhança que permite maximizar uma função, a verossimilhança, e achar os parâmetros do item. Supondo que você aplicasse um item várias vezes para pessoas com uma habilidade conhecida, a verossimilhança desse modelo seria algo mais ou menos assim:
Veja que o parâmetro de dificuldade tem um pico mais pronunciado que o do parâmetro de discriminação. Agora a coisa não para por aí, pois, quando começaram a aplicar provas e usar esse modelo, eles viram que a curva de probabilidade não ia exatamente a zero como havia sido previsto. Parecia que por alguma razão, pessoas com habilidade baixa ainda assim conseguiam acertar itens difíceis. A razão todo mundo sabe qual é: o famigerado chute! Então o modelo teve que ser melhorado para representar essa curva aqui:
E o modelo exato que dá essa curva de probabilidade aí é o modelo usado no ENEM, o modelo logístico de 3 parâmetros:
P(U_i = 1|\theta) = c + (1-c)\frac{1}{1+e^{-a(\theta -b)}}
Então esse modelo tem um parâmetro para ver a dificuldade do item, um parâmetro para a discriminação do item e até um parâmetro para o chute! Se quiser brincar com esses parâmetros para ver as possíveis curvas de itens brinque com esse applet aqui.
Nem tudo são flores
A estimação dos parâmetros da TRI, inclusive dos traços latentes, as habilidades, não é tão trivial quanto aquelas superfícies nos fazem pensar ser. Na prática, imagine que você tem uma prova com 20 questões e 200 pessoas respondendo. Cada item tem 3 parâmetros, logo há 3 x 20 = 60 parâmetros para estimar, só de questões! Como cada pessoa tem o seu traço latente (a habilidade), que também precisa ser estimado, então termos mais de 200 parâmetros. Então com dados de uma prova dessas você teria que estimar 260 parâmetros! E ainda por cima você tem que estimar esses parâmetros conjuntamente! Isso é computacionalmente difícil. Não entrarei nesse assunto por haver toneladas de artigos sobre métodos de estimação para modelos de TRI, mas digo que é difícil e, na prática, exige que a prova seja aplicada para um grande volume de alunos, de 500 a 1000. Então, o que se faz na prática é calibrar os itens, isto é, aplicar esses itens para grandes conjuntos de alunos e descobrir os parâmetros dos itens para só então usar depois.
E o ENEM?
Bom, o ENEM tem um grande conjunto de itens calibrados, e ele escolhe questões para cobrir toda a escala de habilidade. No final ele só precisa estimar os parâmetros das habilidades. Mas aí você me pergunta: "se eu tiver um programa com essas rotinas de estimação pré-programadas, eu consigo descobrir antes a minha nota do ENEM?!". A resposta é não, pois sem os dados dos parâmetros dos itens, só com as suas respostas, não é possível re-estimar todos os parâmetros. A única coisa que dá para fazer é se alguém tiver um site que coleta o gabarito de milhares de pessoas, dá para rodar a estimação de novo, para aproximar o traço latente.
Exemplo na Prática com o R
Vou colocar aqui um script que estima parâmetros da TRI e depois faz o score (acha a nota) de um respondente:
## Carregando os pacotes
library(mirt)
library(mirtCAT)
## Carregando os dados
data(LSAT7)
head(LSAT7)
o que resulta nestes dados
Item.1 Item.2 Item.3 Item.4 Item.5 freq
1 0 0 0 0 0 12
2 0 0 0 0 1 19
3 0 0 0 1 0 1
4 0 0 0 1 1 7
5 0 0 1 0 0 3
6 0 0 1 0 1 19
Então nesses dados, uma prova com cinco questões, 12 pessoas erram os cinco intens, 19a acertam somentet o item 5, 1 acerta somente o item 4 e etc. Com esses dados vamos estimar um modelo de TRI:
## Preparação dos dados
dat <- expand.table(LSAT7) ## repetindo linhas de acordo com a frequência
## Criando um modelo a partir dos dados
mod <- mirt(dat, 1, itemtype='3PL', verbose=TRUE)
## Plot do item
itemplot(mod, item = 1)
Existe uma curva dessas para cada item. E veja que a única coisa que você precisa para estimar os parâmetros desse modelo são os padrões de resposta. Assim como no ENEM, caso vocês tenham um modelo com itens com parâmetros conhecidos, vocês conseguem estimar o "traço latente" ou habilidade de alguém, com base no padrão de respostas:
## Generating a response pattern
resposta <- c(1,0,1,1,1)
## Computing scores
fscores(mod, method = "EAP",response.pattern = c(1,0,1,1,1))
[1] -0.05627411
Quer dizer, alguém que errou somente a questão 2, tem um traço latente de aproximadamente -0,06. Mas isso é muito ou pouco? Veja o score médio da galera:
E como você pode ver o -0,06 não é tão ruim assim.
Considerações finais
Uma prova criada com conjuntos de itens calibrados conforme a TRI é muito melhor que uma prova tradicional. Você tem parâmetros claros sobre as características dos itens de forma que você consegue criar uma prova equilibrada. Além disso, estudantes que fizeram provas diferentes podem ser comparados e as estimativas, dado um número suficiente de estudantes fazendo a prova, permite estimar as habilidades com bastante precisão.