Teoria da Detecção de Sinal

Separar sensibilidade de critério

Psicologia
Teoria da Detecção de Sinal
Memória
R
Uma introdução curta a d’, c e beta, com um exemplo de memória e funções simples em R.
Autores
Afiliações

João O. Santos

ISPA

Cristina Mendonça

ISPA; WJCR

Vitória Melita

FP-UL

Mariona Pascual Peñas

UIB

João Raposo

ISPA

Marta Barros

FP-UL

0 Acertar Não É Tudo

Imaginem uma tarefa de reconhecimento de memória. Em cada ensaio aparece uma palavra e a pessoa responde:

«Esta palavra apareceu antes?»

Há duas coisas que podem mudar o número de respostas correctas.

Uma pessoa pode distinguir melhor palavras antigas de palavras novas. Mas pode também mudar apenas a regra que usa para responder: dizer «sim» com mais facilidade, ou exigir mais evidência antes de dizer «sim».

Em muitas experiências de psicologia guardamos simplesmente correcto = 1 / incorrecto = 0 e contamos respostas correctas. Isso responde a uma pergunta legítima sobre exactidão, mas junta coisas diferentes. Um acerto (hit) e uma rejeição correcta (correct rejection) tornam-se ambos apenas «correcto». Uma omissão e um falso alarme tornam-se ambos «incorrecto».

A Teoria da Detecção de Sinal (Signal Detection Theory, SDT) serve precisamente para recuperar essa informação e separar duas componentes:

  • sensibilidade: quão bem o sinal se distingue do ruído;
  • critério: quanta evidência é necessária para responder que o sinal está presente.

É por isso que a percentagem de acertos, sozinha, pode esconder uma parte importante da história. Stanislaw e Todorov (1999) mostram como estas medidas podem ser calculadas em tarefas de discriminação e porque são úteis em várias áreas da psicologia (doi:10.3758/BF03207704).

1 As Quatro Respostas Possíveis

Numa tarefa sim/não, há duas realidades e duas respostas.

Realidade Resposta «sim» Resposta «não»
sinal presente acerto (hit) omissão (miss)
sinal ausente falso alarme (false alarm) rejeição correcta (correct rejection)

A taxa de acertos é

\[ H=\frac{\text{acertos}}{\text{acertos}+\text{omissões}}, \]

e a taxa de falsos alarmes é

\[ F=\frac{\text{falsos alarmes}} {\text{falsos alarmes}+\text{rejeições correctas}}. \]

Estas duas proporções já dizem mais do que a exactidão global. Um participante pode aumentar (H) simplesmente respondendo «sim» mais vezes, mas isso também tende a aumentar (F).

2 Quando «Mais Correcto» Não Quer Dizer «Melhor Discriminação»

Este é o motivo principal para usar SDT em muitas experiências psicológicas.

Imaginem 100 estímulos antigos e 100 novos. Antes de uma intervenção, uma pessoa tem 95 acertos e 49 falsos alarmes. Depois, tem 80 acertos e apenas 20 falsos alarmes.

Antes Depois
Acertos 95 80
Falsos alarmes 49 20
Rejeições correctas 51 80
Respostas correctas 146/200 = 73% 160/200 = 80%
(d’) ≈ 1.67 ≈ 1.68
(c) ≈ -0.81 ≈ 0

Se olhássemos apenas para «correcto/incorrecto», diríamos que o desempenho subiu de 73% para 80%. Mas a discriminabilidade praticamente não mudou. O que mudou foi sobretudo o critério: antes havia uma forte tendência para responder «sim»; depois, o critério ficou perto do ponto neutro.

O exemplo também pode acontecer ao contrário. Uma manipulação pode alterar (d’), alterar (c), ou alterar os dois. Uma simples percentagem de respostas correctas não nos diz qual destas histórias aconteceu.

Isto é especialmente importante quando a teoria fala em aprendizagem, memória, percepção ou capacidade de discriminar. Uma melhoria na exactidão não demonstra, por si só, que a representação, a memória ou a percepção ficou melhor. Pode ser uma mudança na regra de decisão. Herzog, Francis e Clarke (2019) usam precisamente esta distinção para mostrar por que a percentagem de respostas correctas mistura discriminabilidade e critério (doi:10.1007/978-3-030-03499-3_2).

ImportanteA Pergunta da SDT

Quando uma experiência permite distinguir sinal presente de sinal ausente, não perguntem apenas «quantas respostas foram correctas?».

Perguntem também:

As pessoas ficaram melhores a distinguir sinal de ruído, ou mudaram a quantidade de evidência de que precisam para responder «sim»?

3 Duas Distribuições e um Critério

A versão clássica da SDT imagina duas distribuições de evidência interna: uma quando há apenas ruído e outra quando o sinal está presente. O participante responde «sim» quando a evidência ultrapassa um critério.

~{r} #| echo: false #| fig-alt: “Dois painéis mostram as mesmas distribuições de ruído e sinal mais ruído. No primeiro o critério está deslocado para a esquerda, produzindo uma resposta liberal; no segundo está no ponto médio. A distância entre as distribuições não muda.”

evidence <- seq(-4, 6, length.out = 600) conditions <- c(“Antes: critério liberal”, “Depois: critério neutro”)

sdt_density <- do.call( rbind, lapply( conditions, function(condition) { rbind( data.frame( evidencia = evidence, densidade = stats::dnorm(evidence, mean = 0, sd = 1), distribuicao = “Ruído”, condicao = condition ), data.frame( evidencia = evidence, densidade = stats::dnorm(evidence, mean = 1.68, sd = 1), distribuicao = “Sinal + ruído”, condicao = condition ) ) } ) )

criteria <- data.frame( condicao = conditions, criterio = c(0.04, 0.84) )

ggplot2::ggplot( sdt_density, ggplot2::aes( x = evidencia, y = densidade, linetype = distribuicao ) ) + ggplot2::geom_line(linewidth = 0.9) + ggplot2::geom_vline( data = criteria, ggplot2::aes(xintercept = criterio), linewidth = 0.8 ) + ggplot2::facet_wrap(~ condicao) + ggplot2::theme_classic() + ggplot2::labs( x = “Evidência interna”, y = “Densidade”, linetype = NULL ) ~

Nos dois painéis, a distância entre as distribuições é a mesma: (d’) não mudou. Só mudámos a linha vertical. Isso basta para alterar acertos, falsos alarmes e a percentagem de respostas correctas.

Mover as distribuições para mais longe uma da outra muda a discriminabilidade. Mover apenas o critério para a esquerda ou para a direita muda a tendência de resposta. Esta separação é a ideia central do capítulo.

4 Sensibilidade: (d’)

Na versão Gaussiana de variâncias iguais, a sensibilidade é

\[ d'=\Phi^{-1}(H)-\Phi^{-1}(F). \]

() é a função de distribuição acumulada da normal padrão. (^{-1}) faz o caminho inverso: transforma uma proporção num valor-z.

No R, (^{-1}) é a função qnorm(). Portanto, a fórmula cabe quase inteira numa linha:

~{r} hit_rate <- 0.84 false_alarm_rate <- 0.20

d_prime <- stats::qnorm(hit_rate) - stats::qnorm(false_alarm_rate)

d_prime ~

Se (d’=0), a taxa de acertos e a taxa de falsos alarmes não mostram discriminabilidade. Quanto maior (d’), maior a separação entre sinal e ruído dentro deste modelo.

5 Critério: (c)

A medida (c) descreve onde está o critério relativamente ao ponto médio entre as duas distribuições:

\[ c=-\frac{1}{2} \left[ \Phi^{-1}(H)+\Phi^{-1}(F) \right]. \]

A convenção habitual é:

  • (c=0): critério neutro;
  • (c<0): critério liberal, com maior tendência para responder «sim»;
  • (c>0): critério conservador, com maior tendência para responder «não».

Em R:

~{r} criterion_c <- -0.5 * ( stats::qnorm(hit_rate) + stats::qnorm(false_alarm_rate) )

criterion_c ~

Duas pessoas podem ter (d’) semelhantes e valores de (c) diferentes. Uma pode distinguir os estímulos tão bem como a outra, mas usar uma regra de decisão mais liberal.

6 Um Exemplo de Memória

Suponham 50 palavras antigas e 50 palavras novas.

A participante responde:

  • «antiga» a 42 das 50 palavras antigas: 42 acertos e 8 omissões;
  • «antiga» a 10 das 50 palavras novas: 10 falsos alarmes e 40 rejeições correctas.

A exactidão global é 82%. Mas a SDT permite separar discriminação e critério.

Há um pequeno problema técnico: se alguém tiver (H=1) ou (F=0), qnorm() devolve infinito. Uma correcção log-linear muito usada acrescenta 0.5 às contagens e 1 ao denominador. Hautus (1995) estudou esta correcção e os seus efeitos (doi:10.3758/BF03203619).

Podemos escrever uma função pequena e transparente:

~{r} sdt_indices <- function( hits, misses, false_alarms, correct_rejections, adjust = TRUE ) { n_signal <- hits + misses n_noise <- false_alarms + correct_rejections

if (adjust) { hit_rate <- (hits + 0.5) / (n_signal + 1) false_alarm_rate <- (false_alarms + 0.5) / (n_noise + 1) } else { hit_rate <- hits / n_signal false_alarm_rate <- false_alarms / n_noise }

z_hit <- stats::qnorm(hit_rate) z_fa <- stats::qnorm(false_alarm_rate)

data.frame( hit_rate = hit_rate, false_alarm_rate = false_alarm_rate, d_prime = z_hit - z_fa, c = -0.5 * (z_hit + z_fa), beta = exp((z_fa^2 - z_hit^2) / 2) ) }

sdt_indices( hits = 42, misses = 8, false_alarms = 10, correct_rejections = 40 ) ~

Com a correcção, obtemos aproximadamente (d’=1.79) e (c=-0.07). A estimativa de discriminabilidade é positiva e o critério está muito perto do ponto neutro.

CuidadoA Correcção Não É Magia

A correcção evita infinitos, mas também altera a estimativa. Isto pesa mais quando há poucos ensaios ou desempenho extremo. Não escondam esse facto atrás de uma função. Usem a mesma regra de forma consistente e, em problemas importantes, façam uma análise de sensibilidade. Trabalho recente mostra que as correcções podem interagir com o número de ensaios, a dificuldade e outras características do delineamento (PubMed 38961038).

7 E (), (A’) e Outras Medidas?

Outra medida paramétrica de viés é ():

\[ \beta= \exp\left( \frac{ z(F)^2-z(H)^2 }{2} \right). \]

Um valor perto de 1 corresponde ao critério neutro sob as suposições clássicas. Valores menores e maiores do que 1 representam tendências de resposta em direcções opostas.

Também aparecem medidas não paramétricas como (A’) para discriminabilidade e (B’’_D) para viés. Convém reconhecê-las, mas não precisamos de decorar todas as fórmulas para começar. Para uma primeira análise, (d’) e (c) costumam ser a dupla mais legível: uma medida de sensibilidade e uma medida de critério.

8 Usar uma Função Pronta no R

O pacote psycho inclui psycho::dprime(), que calcula (d’), (), (A’), (B’’_D) e (c), e aplica por defeito a correcção de Hautus às proporções (documentação CRAN).

A função pequena acima continua a ser útil para ver de onde vêm os números. Mas psycho passa a ser a implementação prática deste capítulo: está incluído nas dependências do NRB e podemos usar directamente a função mantida pelo pacote.

~{r} psycho::dprime( n_hit = 42, n_fa = 10, n_miss = 8, n_cr = 40 ) ~

Isto também evita copiar para o NRB uma implementação externa que depois teríamos de manter separadamente. O pacote é distribuído sob licença MIT e a implementação continua no projecto upstream (manual CRAN).

O pacote SDT do CRAN não é este pacote: é sobre Self-Determination Theory. E o antigo pacote sdtalt, que aparece em materiais mais velhos, foi removido do CRAN em 2012. Para este capítulo, não precisamos de nenhum deles.

9 Da SDT aos GLMs

A SDT e os GLMs não são alternativas que se excluem.

A SDT clássica resume uma tarefa sim/não através de (H) e (F), separando sensibilidade e critério. Um GLM pode modelar respostas ensaio a ensaio e acrescentar preditores, interacções e efeitos aleatórios.

Há até uma ligação matemática natural: a SDT Gaussiana clássica usa a função normal acumulada, por isso modelos probit aparecem frequentemente em formulações de SDT. A intuição sobre famílias e ligações está no capítulo de Modelos Lineares Generalizados.

Para começar, a regra prática é simples:

  • se a pergunta é «a probabilidade de uma resposta correcta muda?», um GLM binomial pode responder directamente;
  • se a pergunta é «a capacidade de discriminar mudou, separadamente da tendência para responder sim?», (d’) e (c) são exactamente a separação que procuramos.

10 Participantes e Condições

Em experiências com várias pessoas, não juntem automaticamente todas as respostas numa única tabela 2 × 2. Isso pode misturar participantes com sensibilidades e critérios diferentes.

Uma primeira abordagem pedagógica é calcular (d’) e (c) por participante e por condição e depois estudar essas medidas. Em projectos mais exigentes, modelos hierárquicos ou formulações trial-level podem representar directamente a variação entre participantes.

O ponto importante é o mesmo de outros capítulos: a unidade de análise tem de corresponder à pergunta e ao delineamento.

11 Síntese

A Teoria da Detecção de Sinal parte de quatro contagens simples:

acertos · omissões · falsos alarmes · rejeições correctas

e transforma-as em duas perguntas diferentes:

\[ \text{sensibilidade}\quad d' \]

\[ \text{critério}\quad c. \]

(d’) pergunta quão separáveis são sinal e ruído. (c) pergunta onde a pessoa coloca o limiar para dizer «sim».

No R, a matemática central cabe em qnorm(). Para aprender, vale a pena escrever a função uma vez. Para trabalhar, psycho::dprime() fornece uma implementação pronta e outras medidas.

12 Exercícios

  1. Uma pessoa tem muitos acertos e muitos falsos alarmes. O que pode estar a acontecer ao critério?
  2. Duas pessoas têm a mesma exactidão. Explique por que podem ter valores diferentes de (d’) e (c).
  3. Calcule (d’) e (c) para 36 acertos, 14 omissões, 5 falsos alarmes e 45 rejeições correctas.
  4. Explique por que (H=1) ou (F=0) cria um problema para qnorm().
  5. Numa experiência de memória, o atraso entre estudo e teste aumenta. Diga uma hipótese sobre (d’) e outra, diferente, sobre (c).
  6. Explique quando uma regressão logística sobre correcto/incorrecto responde à pergunta e quando a decomposição da SDT acrescenta algo essencial.

13 Recursos