invisible(Sys.setlocale("LC_CTYPE", "pt_BR.UTF-8"))
invisible(Sys.setlocale("LC_ALL", "pt_BR.UTF-8"))
options(warn=-1)
suppressMessages(library(epiR, warn.conflicts=FALSE))
suppressMessages(library(htmltools, warn.conflicts=FALSE))
source("eiras.friendlycolor.R")
options(warn=0)
Bastão de Asclépio & Distribuição Normal.

Bastão de Asclépio & Distribuição Normal.

Material

  • HTML de R Markdown em RPubs

Objetivos

  • calcular a probabilidade conjunta de eventos independentes e a probabilidade condicionada de eventos não independentes;
  • definir e aplicar a regra de Bayes;
  • definir “reference standard” e “gold-standard” para um procedimento diagnóstico;
  • definir teste diagnóstico sob a perspectiva da bioestatística;
  • definir e calcular sensibilidade, especificidade, valores preditivos e razão de verossimilhança de testes diagnósticos.
  • aplicar e justificar as implicações dos valores calculados para uma decisão diagnóstica.

Situação típica

  • Pacientes chegam ao médico com queixas e sintomas, e então são submetidos a exames físicos em busca de sinais, e exames laboratoriais ou de imagens em busca de mensurações.
  • Dificilmente algum destes elementos, de queixas a exames sofisticados, traz 100% de certeza diagnóstica. Sinais ou medidas de um exame, por exemplo, acontecem na doença que se investiga mas também em outras; ao contrário.
  • Como a associação entre determinada doença e sinais ou exames que a sugerem não é completa, precisamos de critérios para determinar a probabilidade de acerto diagnóstico.

Probabilidade condicional

Quando a probabilidade de um evento depende de outro, temos probabilidade condicional ou condicionada.

Por exemplo, qual a probabilidade, em casais, de que a mulher seja hipertensa se o marido é hipertenso?

Considere que a probabilidade de hipertensão de um dos conjuges dificilmente pode ser considerada independente do outro. Compartilham o mesmo ambiente e, possivelmente, adotam a mesma dieta, estão sujeitos aos mesmos problemas familiares, cultivam os mesmos hábitos ou têm estilos de vida similares.

Suponha um estudo fictício, que obteve a seguinte contagem em 500 casais:

Casal Mulher Hipertensa Normotensa Total
Homem Hipertenso 50 150 200
Normotenso 125 175 300
Total 175 325 500

A probabilidade condicionada em questão é denotada por

\[P(M_{+}|H_{+})\]

Em que:

  • \(M_{+}\) : probabilidade de que a mulher seja hipertensa (positivo para hipertensão)

  • \(H_{+}\) : probabilidade de que o homem seja hipertenso (positivo para hipertensão)

A barra vertical (“\(|\)”) é lida como “dado que” ou “condicionado por”. Portanto, \(P(M_{+}|H_{+})\) é a probabilidade de que a mulher seja positiva (para o diagnóstico de hipertensão), dado que o marido é positivo.

Tabela em R

Podemos montar uma tabela em R. Adotaremos a seguinte convenção para este texto:

                               
        Coluna+ Coluna-        
 Linha+       a       b     a+b
 Linha-       c       d     c+d
            a+c     b+d a+b+c+d
Implementado por demo_montatabela.R

Então, neste exemplo:

                
     M + M -    
 H +  50 150 200
 H - 125 175 300
     175 325 500
Implementado por demo_montatabela2.R

A probabilidade simples das mulheres serem hipertensas, \(P(M_{+})\), nesta amostra é \(P(M_{+})={{a+c} \over {a+b+c+d}}\) = 175 / 500 = 0.35.

Ao condicionarmos \(P(M_{+}|H_{+})\) basta imaginar que estamos restritos ao “mundo” da linha de \(H_{+}\). Então, \(P(M_{+}|H_{+})={{a} \over {a+b}}\) = 50 / 200 = 0.25.

A tabela foi construída como um data frame. Também é possível montá-la como uma matriz:

nomelin<-"H"
nomecol<-"M"
a<-50
b<-150
c<-125
d<-175
tabela <- matrix(data=c(a,b,c,d), ncol=2, byrow = TRUE)
colnames(tabela) <- c(paste0(nomecol,"+"),paste0(nomecol,"-"))
rownames(tabela) <- c(paste0(nomelin,"+"),paste0(nomelin,"-"))
print(tabela)
    M+  M-
H+  50 150
H- 125 175
Implementado por demo_matriz.R

Neste formato é mais fácil endereçar os valores pela posição tabela[l,c], onde l é a linha e c é a coluna. Por exemplo, para obter \(P(M_{+}|H_{+})\) poderíamos calcular:

probcond <- tabela[1,1]/(tabela[1,1]+tabela[1,2])
cat("P(M+|H+) = ",probcond, "\n", sep="")
P(M+|H+) = 0.25
Implementado por demo_matriz2.R


É fácil converter uma matriz em porcentagens:

source("demo_montatabela3.R")
    M+  M-
H+  50 150
H- 125 175
     M+   M-
H+ 0.10 0.30
H- 0.25 0.35
Implementado por demo_montatabela3.R

Diagramas de Venn

Graficamente, podemos ilustrar com diagramas de Venn. Do total de mulheres, 35% são hipertensas e do total de homens 40% são hipertensos. A intersecção entre o grupo de homens e mulheres é 10%. Neste diagrama vemos os conjuntos:

Quando queremos \(P(M_{+}|H_{+})\), este “dado que homens são positivos” restringe nosso ambiente ao círculo azul, à direita:

Por isso, \(P(M_{+}|H_{+})={10 \over 40} = 0.25\)

Generalizando o diagrama, podemos perceber que a probabilidade condicionada é uma medida da intersecção das áreas dividida pelo tamanho da área “dada por”:

\[P(A|B)={ {P(A \cap B)} \over {P(B)} }={ {P(A) \cdot P(B|A)} \over {P(B)} }\]

Pode parecer que esta alteração não resolve nada porque, para sabermos o valor de \(P(A|B)\) agora precisamos de \(P(B|A)\), mas veremos adiante que a segunda probabilidade é facilmente conhecida.

Para voltar ao exemplo dos casais, mostramos a equivalência:

\[P(M_{+}|H_{+})={{P(M_{+}) \cdot P(H_{+}|M_{+})} \over {P(H_{+})}}={{P(M_{+}) \cdot {P(H_{+}~ \cap ~M_{+}) \over P(M_{+})}} \over {P(H_{+})}}\]

\[P(M_{+}|H_{+})={{0.35 \cdot {0.10 \over 0.35}} \over {0.4}}={0.10 \over 0.4}=0.25\]

Podemos usar esta equação no contexto de diagnóstico médico, onde temos um teste \(T\) e buscamos um diagnóstico \(D\):

então:

\[P(D_{+}|T_{+})=P(T_{+}|D_{+})\cdot \dfrac{P(D_{+})}{P(T_{+})}\]

em que se lê: “a probabilidade de ter doença, dado que o teste resultou positivo é igual à probabilidade de existir a doença (incondicional) multiplicada pela probabilidade do teste ser positivo dado que a doença exista, dividido pelo total de testes positivos”.

\(P(D_{+}|T_{+})\) é o que geralmente o médico busca para firmar o diagnóstico. Veremos adiante que as informações de \(P(D_{+})\) é a prevalência da doença e \(P(T_{+}|D_{+})\) é vinda do laboratório, chamada de sensibilidade; ambas as informações são relativamente fáceis de serem conhecidas.

Esta equação é conhecida como Regra de Bayes, elaborada originalmente por Thomas Bayes (1701-1761), que procurava equacionar como a crença sobre a chance das coisas é influenciada pelas informações prévias que temos. É o caso do diagnóstico médico, quando temos hipóteses diagnósticas e buscamos exames subsidiários que a confirmem ou refutem.

Vamos retomar a tabela:

   D+               D-                                     
T+ Exame acertou    Falso positivo       Total de positivos
T- Falso negativo   Exame acertou        Total de negativos
   Total de doentes Total de não doentes                   
Implementado por demo_tabteorica.R

As colunas contém dois grupos, \(D_{+}\) e \(D_{-}\), respectivamente pacientes sabidamente portadores de uma doença e saudáveis. Este é o padrão ouro (gold-standard), que assumimos como referência e cujo diagnóstico foi firmado por outros métodos (avaliação médica, outros exames, etc.). Nas linhas temos um exame \(T\) cujo desempenho queremos verificar.

Como nenhum exame acerta 100% das vezes, uma vez aplicado comparamos com a referência, e definimos a proporção de acertos e erros, tanto quando o exame resultou positivo, \(T_{+}\), quanto quando resultou negativo, \(T_{-}\).

Se o exame diagnóstico não acerta sempre, como saber o quanto ele é válido?

Para isto analisaremos a qualidade do exame e a qualidade do diagnóstico.

Qualidade do exame

Retomando a convenção de letras adotada acima:

   D+  D-       
T+ a   b   a+b  
T- c   d   c+d  
   a+c b+d total
Implementado por demo_tabletras.R

precisamos definir as probabilidades do exame acertar em seus resultados, definindo suas sensibilidade e especificidade.

sensibilidade

É o acerto do verdadeiro positivo, i.e., a probabilidade do exame ser positivo nos doentes:

\[P(T_{+}|D_{+}) = { {a}\over{a+c} }\]

Enfatizamos que esta não é a pergunta que o médico faz. Não há o menor interesse para o diagnóstico em saber se o teste é positivo em pacientes que já sabemos serem doentes. É uma medida, no entanto, obtida por estudos que medem a probabilidade de detecção acertada do exame.

especificidade

É o acerto do verdadeiro negativo, i.e., a probabilidade do exame ser negativo nos não doentes:

\[P(T_{-}|D_{-}) = { {d}\over{b+d} }\]

Da mesma forma, não é a pergunta do médico, mas a probabilidade de não detecção acertada do exame entre pessoas que sabemos não estarem doentes.

É fácil notar que um

exame de maior sensibilidade reduz os falso-negativos

e um

exame de maior especificidade reduz os falso-positivos.

Doentes
sim não Total
Exame
positivo
verdadeiros
positivos
falsos
positivos
total de
positivos

Exame
negativo
falsos
negativos
verdadeiros
negativos
total de
negativos
Total
total de
doentes
total de
não doentes

Por outro lado pode ser impossível entender a interação entre sensibilidade, especificidade e resultados falsos sem o conceito de valor limite (cutoff) que separa um exame positivo de um negativo.

Exemplo: ferritina sérica

Considere um estudo de anemia ferropriva em crianças de uma comunidade. O exame/teste analisa a concentração de ferritina sérica no sangue.

A concentração de ferritina no sangue é uma variável quantitativa contínua. Estudos prévios estabeleceram um cutoff, e distingue as crianças como positivas (i.e., anêmicas) se o valor observado for menor que \(15~\mu g/dl\).

Suponha que tenhamos encontrado o seguinte:

           Anemia+ Anemia-
Ferritina+     731     270
Ferritina-      78    1500
Implementado por demotab_ferritina.R

e que a distribuição dos dados seja:

Implementado por demogrf_ferritina.R

A linha vertical pontilhada é o cutoff (\(15~\mu g/dl\)). Portanto, há 78 resultados falso-negativos (de crianças sabidamente anêmicas com \(\text{ferritina sérica} \ge 15~\mu g/dl\)) e 270 falso-positivos (de crianças sabidamente não anêmicas com \(\text{ferritina sérica} < 15~\mu g/dl\)).

ROC (Receiver Operating Characteristic)

Esta curva é um dos métodos usados para avaliar o desempenho de classificadores binários. A curva mostra a relação entre:

  • 1 - especificidade (falsos positivos) no eixo \(x\)
  • sensibilidade (verdadeiros positivos) no eixo \(y\)

Cada ponto da curva corresponde a um limiar (threshold) diferente para a decisão do classificador. A curva é construída calculando-se a sensibilidade e a especificidade para cada valor cutoff. Há mais de um método para escolher o ponto que otimiza sensibilidade e especificidade:

  • índice de Youden (\(J = \text{sensibilidade} + \text{especificidade}~– 1\)).
  • o ponto da curva ROC com menor distância da coordenada (0,1), que corresponde a 100% de sensibilidade e especificidade.

A área sob a curva (AUC), quanto mais próxima de 1, melhor o exame. Uma AUC de 0.5 corresponde a uma curva ROC que coincide com a bissetriz. Neste exemplo, a curva ROC é:

Implementado por demoROC_ferritina.R

Aumentar a sensibilidade é procurar detectar maior número de anemias, aumentando o valor da fração \(a \over {a+c}\), i.e., aumentar o número de crianças anêmicas que receberão o diagnóstico com o uso de maior valor do cutoff. Digamos que o critério fosse considerar anemia até \(16~\mu g/dl\):

Implementado por demogrf_ferritina16.R

Reduzindo, neste exemplo, os falso-negativos para 21, aumentou-se para 428 o número de falso-positivos.

Reversamente, aumentar a especificidade é descartar mais o diagnóstico naqueles que não tem a doença aumentando o valor de \(d \over {b+d}\), i.e., aumentar o número de crianças não anêmicas com resultado negativo aplicando-se menor valor do cutoff. Digamos que o critério fosse considerar anemia até \(14~\mu g/dl\):

Implementado por demogrf_ferritina14.R

Consequentemente, reduzir para 149 o número de falso-positivos, fez com que o número de falso-negativos aumentasse para 216.

O cutoff de \(15~\mu g/dl\) busca determinado custo-benefício e a forma como os estudos os definem está fora do escopo deste texto.

Aqui basta dizer que busca-se o valor que maximiza sensibilidade e especificidade simultaneamente, levando-se em conta o objetivo do exame: maior sensibilidade para os exames para os quais não se deseja deixar de fazer o diagnóstico (como, por exemplo, para rastreamento da doença em uma população) ou maior especificidade para situações em que se quer firmar o diagnóstico sem confundir com outros (como, por exemplo, no diagnóstico diferencial para a prática médica).


Voltando ao exemplo da ferritina sérica, com o cutoff=\(15~\mu g/dl\) computamos:

\(\text{sensibilidade} = P(T_{+}|D_{+}) = {a \over {a+c}}\) = 0.9035847

\(\text{especificidade} = P(T_{-}|D_{-}) = {d \over {b+d}}\) = 0.8474576

Razão de verossimilhança: LR

Da relação entre sensibilidade e especificidade, obtém-se as razões de verossimilhança positiva (\(LR_{+}\), do inglês: likelihood ratio) e negativa (\(LR_{-}\)), definidas por:

\[LR_{+} = { {P(\text{verdadeiro positivo})}\over{P(\text{falso positivo})} } = { {\text{sensibilidade}}\over{1-\text{especificidade}} } \]

\[LR_{-} = { {P(\text{falso negativo})}\over{P(\text{verdadeiro negativo})} } = { {1-\text{sensibilidade}}\over{\text{especificidade}} } \]

Portanto, ambos os \(LR\) são medidas de chance (odds) e, então, precisam ter valor diferente de 1 para que o exame tenha qualidade: \(LR_{+} > 1\) e \(LR_{-} < 1\).

Odds e probabilidade

Odds (traduzido habitualmente por chance) e probabilidade são formas equivalentes para expressar possibilidades e relacionadas por:

\[\textit{Odds} = {{\text{Probabilidade}} \over{1-\text{Probabilidade}}}\]

e

\[\text{Probabilidade} = {{\textit{Odds}} \over{1+\textit{Odds}}}\]

Por exemplo, uma probabilidade de \(80\%\) corresponde a

\[\textit{Odds} = {{0.8} \over {1-0.8}} = {0.8 \over 0.2} = 4\]

indicando que dizer “\(80\%\) de probabilidade” é equivalente a dizer “4 vezes mais chance de ocorrer do que não ocorrer” um determinado evento.

Reversamente, Odds de 2 é:

\[\text{Probabilidade} = {2 \over {1+2}} = {2 \over 3} \approx 66.67\%\]

e \(\textit{Odds}=1\) resulta em:

\[\text{Probabilidade} = {1 \over {1+1}} = {1 \over 2} = 50\%\]

Associa-se o máximo de incerteza com probabilidade de \(50\%\); por este motivo, \(Odds=1\) será um valor necessário para decisões estatísticas, adiante.


\(LR_{+}\) expressa quantas vezes (i.e. \(odds\)) é mais provável que um exame positivo esteja correto do que não correto entre os doentes. Quanto maior for seu valor, melhor é o exame.

\(LR_{-}\) expressa o inverso (i.e., \(1/odds\)) de quantas vezes é mais provável que um exame negativo esteja correto do que não correto entre os não doentes. Quanto menor for seu valor, melhor é o exame.

Estas quatro medidas — sensibilidade, especificidade, \(LR_{+}\) e \(LR_{-}\) definem a qualidade de um sintoma, sinal ou exame, e seus valores podem ser obtidos da literatura especializada ou fornecidos pelos bons laboratórios. Conhecê-las, porém, não basta, e mesmo com valores adequados podem não ser suficientes para firmar o diagnóstico. Por que?

Voltaremos a elas adiante. Vamos esclarecer sobre a qualidade do diagnóstico.

Qualidade prévia da população: prevalência

A prevalência, \(P(D_{+})\), é uma característica

Caso a tabela de contingência 2$$2 reflita as proporções de doentes e não doentes na população, então a prevalência pode ser calculada por \(P(D_{+})=\dfrac{a+c}{a+b+c+d}\).

Qualidade do exame diagnóstico: sensibilidade e especificidade

Sensibilidade, \(P(T_{+}|D_{+})\), e especificidade, \(P(T_{-}|D_{-})\), são probabilidades condicionais que refletem a validade do exame diagnóstico.

Sensibilidade e especificidade não dependem da prevalência.

A prevalência é essencial para o diagnóstico.

Qualidade posterior da população: PPV e NPV

valor preditivo positivo: PPV

Recorde que frente a um paciente do qual não sabemos se é portador da doença, e feito um exame que resultou positivo, a regra de Bayes fornece a probabilidade de que seja doente por:

\[P(D_{+}|T_{+})=P(T_{+}|D_{+})\cdot\dfrac{P(D_{+})}{P(T_{+})}\]

Este é o valor preditivo positivo, \(VPP\), ou \(PPV\) nos pacotes estatísticos (inglês, negative predictive value). Na equação reconhecemos \(P(T_{+}|D_{+})\), a sensibilidade do exame. \(P(D_{+})\) é a fração de doentes na população, definida como prevalência verdadeira da doença (que chamaremos adiante simplesmente de “prevalência”, e equivale à probabilidade de, sorteando-se um indivíduo desta população, encontrarmos um doente).

Falta definir o denominador, \(P(T_{+})\), a probabilidade de testes positivos. Observe a tabela:

                   
     D+  D-        
 T+   a   b     a+b
 T-   c   d     c+d
    a+c b+d a+b+c+d
Implementado por demo_prevalencia_aparente.R

\(P(T_{+})\), a probabilidade de exames positivos, também conhecido como prevalência aparente (no sentido de que é a prevalência que seria encontrada na ausência de um padrão de referência), pode ser decomposto em:

\[P(T_{+}) = { {{{a+c}\over {a+b+c+d} }\cdot{a \over {a+c}}}+ {{b+d}\over{a+b+c+d}}\cdot{b \over {b+d}} }\]

temos, portanto, todos os elementos necessários:

  • \({a+c} \over {a+b+c+d}\) é \(\text{prevalência}\).

  • \(a \over {a+c}\) é \(\text{sensibilidade}\).

  • \({{b+d} \over {a+b+c+d}} = 1 - {{a+c} \over {a+b+c+d}}\) é \(1 - \text{prevalência da doença}\).

  • \({b \over {b+d}} = {1 - {d \over {b+d}}}\) é \(1-\text{especificidade}\). Para colocar nos termos da notação utilizada acima,

\[P(T_{+}) = P(D_{+}) \cdot \text{sensibilidade} + P(D_{-}) \cdot (1 - \text{especificidade})\]

Em outras palavras, o total de exames positivos é dado pela sensibilidade e especificidade ponderadas pela probabilidades de termos doentes (i.e., prevalência) e não doentes (i.e., complemento da prevalência). Assim, podemos reescrever a regra de Bayes:

\[P(D_{+}|T_{+})=PPV=\dfrac{P(D_{+})\cdot P(T_{+}|D_{+})}{P(D_{+})\cdot P(T_{+}|D_{+}) + P(D_{-})\cdot (1 - P(T_{-}|D_{-}))}\]

valor preditivo negativo: NPV

Quando o resultado de um exame for negativo, o valor preditivo negativo \(VPN\) (\(NPV\), negative predictive value) é a probabilidade do paciente não estar doente.

Por raciocínio similar ao anterior, a regra de Bayes é:

\[P(D_{-}|T_{-})=P(T_{-}|D_{-})\cdot \dfrac{P(D_{-})}{P(T_{-})}\]

reescrita na forma:

\[P(D_{-}|T_{-}) = NPV = \dfrac{P(D_{-}) \cdot P(T_{-}|D_{-})} { P(D_{-}) \cdot P(T_{-}|D_{-}) + P(D_{+}) \cdot (1 - P(T_{+}|D_{+}))}\]

Portanto, para o acerto do diagnóstico, precisamos a qualidade da população (a prevalência populacional da doença de onde o paciente é oriundo) e a qualidade do exame (sensibilidade e especificidade).

PPV e NPV são as probabilidade condicionais de diagnóstico correto, sendo que elas dependem da prevalência.

Caso pretenda fazer os cálculos manualmente. Um atalho mais simples que os cálculos acima é usar a tabela

   D+  D-       
T+ a   b   a+b  
T- c   d   c+d  
   a+c b+d total
Implementado por demo_tabletras.R

e pensar em sensibilidade, especificidade, \(PPV\) e \(NPV\) como probabilidades de acerto, respectivamente:

  • do exame positivo em doentes, \(\text{sensibilidade} = {{a}\over{a+c}}\)
  • do exame negativo em não doentes, \(\text{especificidade} = {{d}\over{b+d}}\)
  • do diagnóstico quando o exame é positivo, \(PPV = {{a}\over{a+b}}\)
  • do afastamento do diagnóstico quando o exame é negativo, \(NPV = {{d}\over{c+d}}\)

No entanto, cuidado com o uso de tabelas. Os valores de sensibilidade e especificidade, como ocorrem nas colunas, não são afetados pela prevalência da doença e serão igualmente obtidos ainda que a amostra de pacientes seja, por exemplo, escolhida para termos 50% de doentes e 50% de não doentes, procedimento totalmente possível para o estabelecimento do desempenho do exame em um estudo experimental.

No entanto, \(PPV\) e \(NPV\) dependem da prevalência e este atalho só funciona se a tabela refletir a distribuição de doentes e não doentes de acordo com a prevalência da doença, i.e., se \({a+c}\over{a+b+c+d}\) estiver na proporção igual a \(P(D_{+})\) e, consequentemente, somente se \({b+d}\over{a+b+c+d}\) for igual a \(1-P(D_{+})\).


Operacionalização em R

Todos os cálculos estão implementados em pacotes do R e em RScripts que fornecemos para estas aulas. Vamos reconstruir o exemplo da ferritina sérica, cujos dados são

nomelin<-"Ferritina"
nomecol<-"Anemia"
a<-731
b<-270
c<-78
d<-1500
tabela <- matrix(data=c(a,b,c,d), ncol=2, byrow = TRUE)
colnames(tabela) <- c(paste(nomecol,"+",sep=""),paste(nomecol,"-",sep=""))
rownames(tabela) <- c(paste(nomelin,"+",sep=""),paste(nomelin,"-",sep=""))
prmatrix(tabela)
           Anemia+ Anemia-
Ferritina+     731     270
Ferritina-      78    1500
Implementado por demotab_ferritina.R

Supondo que a prevalência da população esteja refletida nesta tabela, temos:

n <- sum(tabela)
prevalencia <- (tabela[1,1]+tabela[2,1])/n
sensibilidade <- tabela[1,1]/(tabela[1,1]+tabela[2,1])
especificidade <- tabela[2,2]/(tabela[1,2]+tabela[2,2])
cat("prevalencia = ",prevalencia,"\n",sep="")
cat("sensibilidade = ",sensibilidade,"\n",sep="")
cat("especificidade = ",especificidade,"\n",sep="")
cat("n = ",n,"\n",sep="")
prevalencia = 0.3136875
sensibilidade = 0.9035847
especificidade = 0.8474576
n = 2579
Implementado por demotab_ferritina_calc.R

Alternativamente, o script TesteDiagnostico.R faz diversos procedimentos e agrega a testagem estatística através de algumas funções que selecionamos e por método robusto (bootstrapping). Para reproduzir este exemplo, rode-o e forneça:

[…]
P(D+)=(a+c)/n … prevalencia da Desfecho
prevalencia: 0.3137
[…]
P(T+|D+) = a/(a+c) … sensibilidade do teste
sensibilidade: 0.9036
[…]
P(T-|D-) = d/(b+d) … especificidade do teste
especificidade: 0.8475
[…]
Qual o tamanho da população (Total)?
n: 2579
[…]
Defina alfa = probabilidade do erro do tipo I alfa: 0.05
[…]
Exibir tabelas? (exibir lentifica a simulacao)
0=nao, 1=sim; default eh 0: 0
[…]
Quantas iteracoes para simular?
iteracoes: 1000

Obtendo:



-------------------------------------------------
          Outcome +    Outcome -      Total
Test +          731          270       1001
Test -           78         1500       1578
Total           809         1770       2579

Point estimates and 95% CIs:
--------------------------------------------------------------
Apparent prevalence *                  0.3881 (0.3693, 0.4072)
True prevalence *                      0.3137 (0.2958, 0.3320)
Sensitivity *                          0.9036 (0.8811, 0.9231)
Specificity *                          0.8475 (0.8299, 0.8639)
Positive predictive value *            0.7303 (0.7017, 0.7576)
Negative predictive value *            0.9506 (0.9387, 0.9607)
Positive likelihood ratio              5.9252 (5.2969, 6.6282)
Negative likelihood ratio              0.1137 (0.0920, 0.1406)
False T+ proportion for true D- *      0.1525 (0.1361, 0.1701)
False T- proportion for true D+ *      0.0964 (0.0769, 0.1189)
False T+ proportion for T+ *           0.2697 (0.2424, 0.2983)
False T- proportion for T- *           0.0494 (0.0393, 0.0613)
Correctly classified proportion *      0.8651 (0.8513, 0.8781)
--------------------------------------------------------------
* Exact CIs
                              estimative IC95 [lower      upper]       upper
1: apparent prevalence, P(T+)         ap  0.38812007  0.36925436  0.40724017
2: (true) prevalence, P(D+)           tp  0.31370000  0.29581839  0.33200550
3: sensitivity                        se  0.90360000  0.88114863  0.92305469
4: specificity                        sp  0.84750000  0.82989504  0.86394422
5: diag. accuracy                diag.ac  0.86509857  0.85130539  0.87805689
6: diag. odds ratio              diag.or 52.09176247 39.88422608 68.03571195
7: number needed to diag.           nndx  1.33138064  1.27064978  1.40638337
8: Youden's index                 youden  0.75110000  0.71104367  0.78699892
9: pos. pred. value               pv.pos  0.73033925  0.70169639  0.75762022
10: neg. pred. value              pv.neg  0.95057743  0.93869874  0.96074106
11: positive LR                   lr.pos  5.92524590  5.29686377  6.62817480
12: negative LR                   lr.neg  0.11374631  0.09202681  0.14059189
13                                p.rout  0.61187993  0.59275983  0.63074564
14                                 p.rin  0.38812007  0.36925436  0.40724017
15                                p.tpdn  0.15250000  0.13605578  0.17010496
16                                p.tndp  0.09640000  0.07694531  0.11885137
17                                p.dntp  0.26966075  0.24237978  0.29830361
18                                p.dptn  0.04942257  0.03925894  0.06130126

Sob H0 espera-se (em proporcoes):
                      
       D +   D -      
 T + 0.122 0.266 0.388
 T - 0.192  0.42 0.612
     0.314 0.686      

Sob H1 espera-se (em proporcoes):
                      
       D +   D -      
 T + 0.283 0.105 0.388
 T -  0.03 0.582 0.612
     0.314 0.686      

---------------------
Iniciando a simulacao
---------------------

Aguarde...


amostra = 2579
alfa = 0.05
iteracoes = 1000



Terminado:
alfa: 5%

OR:
mediana(OR): 52.18782 
IC95% (OR): [40.422, 67.96]

V de Cramer:
mediana(V): 0.7153504 
IC95% (V): [0.687, 0.742]

Pacote epiR

A saída é longa, então vamos entendê-la por partes.

No início da saída aparece a mensagem

Package epiR XXXXX is loaded

O pacote epiR (no lugar de XXXXX aparecerá o número da versão instalada em seu computador) foi o que escolhemos para computar a regra de Bayes. Em certo ponto de TesteDiagnostico.R aparece:

prevalencia <- 0.3137
sensibilidade <- 0.9036 
especificidade <- 0.8475 
n <- 2579
alfa <- 0.05
tabela2x2 <- as.table(matrix(n*c(prevalencia*sensibilidade,       
                                 (1 - prevalencia)*(1 - especificidade),
                                 prevalencia*(1 - sensibilidade), 
                                 (1 - prevalencia)*especificidade), 
                             nrow = 2, byrow = TRUE))
print(tabela2x2 <- round(tabela2x2))
out <- epiR::epi.tests(tabela2x2, conf.level=1-alfa, digits=4)
sumario <- summary(out)
     A    B
A  731  270
B   78 1500
Implementado por TesteDiagnostico_ferritina_tabela.R

Observe que nesta tabela os valores não são exatamente os planejados por causa de arredondamento em casas decimais.

A essência deste código está no trecho em que exibimos o resultado armazendo na variáveis out e sumario, que produzem:

print(out)
print(sumario, digits=4)
          Outcome +    Outcome -      Total
Test +          731          270       1001
Test -           78         1500       1578
Total           809         1770       2579

Point estimates and 95% CIs:
--------------------------------------------------------------
Apparent prevalence *                  0.3881 (0.3693, 0.4073)
True prevalence *                      0.3137 (0.2958, 0.3320)
Sensitivity *                          0.9036 (0.8811, 0.9230)
Specificity *                          0.8475 (0.8299, 0.8639)
Positive predictive value *            0.7303 (0.7016, 0.7576)
Negative predictive value *            0.9506 (0.9387, 0.9607)
Positive likelihood ratio              5.9235 (5.2954, 6.6261)
Negative likelihood ratio              0.1138 (0.0920, 0.1406)
False T+ proportion for true D- *      0.1525 (0.1361, 0.1701)
False T- proportion for true D+ *      0.0964 (0.0770, 0.1189)
False T+ proportion for T+ *           0.2697 (0.2424, 0.2984)
False T- proportion for T- *           0.0494 (0.0393, 0.0613)
Correctly classified proportion *      0.8651 (0.8513, 0.8780)
--------------------------------------------------------------
* Exact CIs
   statistic      est    lower    upper
1         ap  0.38813  0.36927  0.40726
2         tp  0.31369  0.29581  0.33199
3         se  0.90358  0.88113  0.92304
4         sp  0.84746  0.82985  0.86390
5    diag.ac  0.86506  0.85127  0.87802
6    diag.or 52.06553 39.86486 68.00021
7       nndx  1.33148  1.27074  1.40650
8     youden  0.75104  0.71098  0.78694
9     pv.pos  0.73027  0.70163  0.75755
10    pv.neg  0.95057  0.93869  0.96073
11    lr.pos  5.92350  5.29540  6.62610
12    lr.neg  0.11377  0.09205  0.14062
13    p.rout  0.61187  0.59274  0.63073
14     p.rin  0.38813  0.36927  0.40726
15    p.tpdn  0.15254  0.13610  0.17015
16    p.tndp  0.09642  0.07696  0.11887
17    p.dntp  0.26973  0.24245  0.29837
18    p.dptn  0.04943  0.03927  0.06131
Implementado por TesteDiagnostico_ferritina_out.R

Bastariam estas linhas para suas conclusões. Repare que out tem o problema de arredondar para duas casas decimais, o que não costuma ser o suficiente. É preferível produzir o summary(out), mais completo. Todos os valores são fornecidos em sua estimativa pontual e intervalo de confiança 95%. São todas as variáveis que vimos e mais algumas:

  • ap: prevalência aparente
  • tp: prevalência
  • se: sensibilidade
  • sp: especificidade
  • diag.ac: acurácia
  • diag.or: odds ratio
  • nnd: number needed to diagnose
  • youden: índice de Youden
  • pv.pos: valor preditivo positivo
  • pv.neg: valor preditivo negativo
  • lr.pos: likelihood positivo
  • lr.neg: likelihood negativo

Dos valores adicionais:

índice de Youden

O índice de Youden é um ótimo preditor da qualidade global de um exame:

\[\text{Youden} = \text{probabilidade de verdadeiro positivo} - \text{probabilidade de falso positivo}\]

ou

\[\text{Youden} = {se - (1 - sp)} = {se + sp - 1}\]

(em que \(se\) é sensibilidade e \(sp\) é especificidade do exame)

Quando este índice é menor do que 0 (i.e., \(\text{sensibilidade}+\text{especificidade} \le 1\)), o exame tem desempenho ruim e, possivelmente, é inútil para qualquer diagnóstico. Portanto, como regra prática, quando quiser avaliar um novo exame, use o índice de Youden para ter uma noção preliminar do desempenho esperado.

Por exemplo, se a sensibilidade for igual a 0.9 e especificidade igual a 0.8,

\[Y = 0.9 + 0.8 - 1 = 0.7\]

e, portanto, o exame é um teste diagnóstico.

\(nnd\)

O nnd é muito usado em epidemiologia.

“the number of patients who need to be examined in order to correctly detect one person with the disease of interest in a study population of persons with and without the known disease”

Larner A.J. (2018) Number Needed to Diagnose, Predict, or Misdiagnose: Useful Metrics for Non-Canonical Signs of Cognitive Status? Dement Geriatr Cogn Disord Extra 8:321–327. https://doi.org/10.1159/000492783

Por exemplo, se \(nnd=1.5\), é necessário testar 15 pacientes para ter 10 resultados verdadeiramente positivos.

Numericamente, porém, do ponto de vista da estatística,

\[nnd = {{1}\over{\text{Youden}}}\]

Por exemplo, calculamos, para sensibilidade=0.9 e especificidade=0.8, \(\text{ìndice de Youden} = 0.9 + 0.8 - 1 = 0.7\). Então:

\[nnd = { {1 \over 0.7} = 1.43 }\]

significando que precisamos testar cerca de 14 pacientes para encontrar 10 resultados positivos.

Não confunda com outros índices, como o conhecido \(nnt\) (number needed to treat), dado por

\[nnt = { {1}\over{p(1-RR)} }\]

em que \(p\) é a prevalência da doença na população não tratada e \(RR\) é o risk ratio.

van Belle, G (2008) Statistical rules of thumb. 2nd ed. NJ: Wiley.


prevalência aparente

Já vista antes, também pode ser computada como função do índice de Youden.

\[P(T_{+}) = p \cdot se + (1-p)(1-sp) = 1 - sp + p \cdot Y\]

Então, se \(p=0.05\), \(se=0.9\), \(sp=0.8\) (portanto \(Y=0.7\)),

\[P(T_{+}) = 0.235\]

significando que 23.5% dos pacientes submetidos a este teste diagnóstico de uma população com 5% de prevalência para uma doença testarão positivamente.

acurácia

É a proporção de testes diagnósticos corretos para certa população, dada (pelo atalho de acordo com a convenção da tabela) por:

\[\text{Acurácia}={{a+d}\over{total}}\]

funcionando como uma forma sintética de reportar a combinação da sensibilidade e especificidade no contexto da prevalência observada.

Outra maneira de expressar a acurácia é:

\[\text{Acurácia} = P(D_{+}) \cdot \text{sensibilidade} + P(D_{-}) \cdot {\text{especificidade}}\].

Por exemplo, se sensibilidade é 0.9 e especificidade é 0.8 com prevalência de 0.05, temos

\[A = p \cdot se + (1 – p) \cdot sp = 0.05 \cdot 0.9 + 0.95 \cdot 0.8 = 0.805\]

significando que 80.5% dos pacientes de uma população com prevalência de 0.05 têm o resultado do teste correto (negativo ou positivo).

Em epidemiologia há vários outros índices que seguem a mesma lógica do nnd, por exemplo:

  • inaccuracy: the total number of false positives and false negatives divided by the total number of patients assessed (= 1 – accuracy);

  • predictive summary index (PSI, or Ψ): a combination of positive and negative predictive values given by (PPV + NPV – 1) .

  • inverse of PSI (1/PSI or 1/Ψ), the “number needed to predict” (NNP), interpreted as the number of patients who need to be examined in the patient population in order to correctly predict the diagnosis of one person. (Larner, 2018)

  • number needed to misdiagnose” (NNM), 1/(1 – accuracy) = 1/inaccuracy. NNM is the number of patients who need to be tested in order for one to be misdiagnosed by the test. (Habibzadeh, F., & Yadollahie, M. (2013). Number needed to misdiagnose: a measure of diagnostic test effectiveness. Epidemiology (Cambridge, Mass.), 24(1), 170. https://doi.org/10.1097/EDE.0b013e31827825f2)


odds ratio do diagnóstico

Como podemos verificar no teste Qui-quadrado, é equivalente a decidir pelo odds ratio com seu intervalo de confiança. Sabemos que: \[OR = {{a \cdot d}\over{b \cdot c}}\] e que existe significância estatística para \(\alpha=0.05\) quando o valor unitário não está dentro do intervalo de confiança 95%, rejeitando-se a hipótese nula de ausência de associação entre as variáveis.

Aqui temos uma aplicação deste princípio: um teste diagnóstico útil tem que mostrar associação de seus resultados positivo e negativo com a presença ou ausência da doença.

O pacote epiR, portanto, verifica a associação entre o exame e a doença; a associação precisa existir para que o exame seja um teste diagnóstico.

O restante da saída com gráficos é uma versão nossa, usando bootstrapping e mostrando várias distribuições para conferirmos os valores da saída acima (não são exatamente iguais, mas muito próximos), além de estatística de tamanho de efeito por \(OR\) e \(V\) de Cramér com as mesmas interpretações que discutimos no teste Qui-quadrado. São informação útil para decidir sobre os valores que mensuram a qualidade do exame e do diagnóstico.

Aplicações para um paciente

Até aqui tivemos uma abordagem populacional. O que fazemos quando lidamos com um único paciente?

Fundamentalmente, os conceitos discutidos acima são aplicáveis na prática médica.

A adaptação ocorre a partir dos dados da consulta de um paciente, o médico “intui” a probabilidade de um ou mais diagnósticos.

Pode ser atribuído um valor que passaremos a chamar de Probabilidade Pré-teste, fundamentada na experiência do clínico e em suas informações da literatura.

Para confirmar ou descartar as hipóteses diagnósticas, são feitos exames de laboratório ou de imagem.

Com a Probabilidade Pré-teste, pode-se estimar a Probabilidade Pós-teste, utilizando a Razão de Verossimilhança do exame diagnóstico.

Quando não existia apoio computacional, o procedimento (nunca muito difundido, possivelmente pela falta de praticidade) era utilizar os valores de \(LR_{+}\) ou \(LR_{-}\) para transformar a crença prévia (a intuição médica sobre a probabilidade do paciente ter determinada doença) e atualizá-la de acordo com o resultado do exame. Iniciando pela opinião médica, transforma-se a probabilidade pré-exame em odds:

\[odds_{\text{pré}}={ {p_{\text{pré}}} \over {1 - p_{\text{pré}} }}\]

Então, dependendo do resultado do exame ser positivo ou negativo, atualiza-se a crença no diagnóstico, multiplicando-se respectivamente odds por \(LR_{+}\) ou \(LR_{-}\)

\[odds_{\text{pós}}={ {odds_{\text{pré}}} \cdot {LR}}\] E, então, para nosso raciocínio, reconverte-se odds para probabilidade.

\[p_{\text{pós}}={ {odds_{\text{pós}}} \over {1 + odds_{\text{pós}} }}\]

Por exemplo, para o teste de ferritina sérica, encontramos \(LR_{+}=5.92\) e \(LR_{-}=0.11\). Suponha, por exemplo, que uma nova criança seja examinada e, clinicamente, o médico tem 80% de convicção de que a criança esteja anêmica. Então

odds.pre =  4 
Implementado por demo_ferritina_oddspre.R

Feito a dosagem de ferritina sérica, se o resultado for positivo:

odds.pos =  23.70098 
prob.pos =  0.9595158 
Implementado por demo_ferritina_oddsposLRmais.R

aumentando a probabilidade de anemia para cerca de 96%, assim reforçando a crença do médico no diagnóstico.

Caso o resultado seja negativo:

odds.pos =  0.4549852 
prob.pos =  0.3127078 
Implementado por demo_ferritina_oddsposLRmenos.R

reduzindo a probabilidade de anemia para cerca de 31%, enfraquecendo o diagnóstico.

Um atalho gráfico era o uso de um nomograma. Embora obsoleto, é interessante para ilustrar o porquê de computarmos os valores de \(LR_{+}\) como um odds direto e \(LR_{-}\) como o inverso de um odds. Basta ligar a probabilidade pré-exame na escala da esquerda com o valor adequado de \(LR\) para obter a probabilidade pós-exame na escala da direita.

https://ebm-tools.knowledgetranslation.net/card

Repare que a ligação com \(LR=1\) faz com que a probabilidade pré-exame seja igual à probabilidade pós-exame, ou seja, seria um exame inútil.

Onde está a prevalência?

Lembrando que \(LR_{+}\) e \(LR–\) são relações entre sensibilidade e especificidade

\[LR_{+} = { {\text{sensibilidade}}\over{1-\text{especificidade}} } \]

\[LR_{-} = { {1 - \text{sensibilidade}}\over{\text{especificidade}} } \]

e portanto não dependem da prevalência, e considerando que a probabilidade pós-exame é \(PPV\) ou \(NPV\), os quais não podem ser computados sem a prevalência, uma dúvida que pode surgir é, então, como este cálculo é possível e se relaciona com os conceitos discutidos anteriormente?

Claramente, a probabilidade pré-exame faz o papel da prevalência. No tratamento individualizado não importa a prevalência da população geral, mas a prevalência à qual o paciente em análise está sujeito. É como se o indivíduo fosse parte de um grupo que tem sua prevalência particular e, na falta de dados, cabe ao médico intuir a probabilidade de doença para o quadro clínico que encontra.

Observe o que acontece se usarmos os valores de sensibilidade e especificidade para compor uma tabela com um único indivíduo e prevalência de 80%:

          Outcome +    Outcome -      Total
Test +       0.7229       0.0305      0.753
Test -       0.0771       0.1695      0.247
Total        0.8000       0.2000      1.000

Point estimates and 95% CIs:
--------------------------------------------------------------
Apparent prevalence *                  0.7534 (0.0059, 1.0000)
True prevalence *                      0.8000 (0.0082, 1.0000)
Sensitivity *                          0.9036 (0.0056, 1.0000)
Specificity *                          0.8475 (0.0000, 1.0000)
Positive predictive value *            0.9595 (0.0059, 1.0000)
Negative predictive value *            0.6873 (0.0000, 1.0000)
Positive likelihood ratio              5.9252 (0.0002, 186389.6889)
Negative likelihood ratio              0.1137 (0.0001, 120.0555)
False T+ proportion for true D- *      0.1525 (0.0000, 1.0000)
False T- proportion for true D+ *      0.0964 (0.0000, 0.9944)
False T+ proportion for T+ *           0.0405 (0.0000, 0.9941)
False T- proportion for T- *           0.3127 (0.0000, 1.0000)
Correctly classified proportion *      0.8924 (0.0144, 1.0000)
--------------------------------------------------------------
* Exact CIs
   statistic     est     lower    upper
1         ap  0.7534  5.88e-03 1.00e+00
2         tp  0.8000  8.18e-03 1.00e+00
3         se  0.9036  5.60e-03 1.00e+00
4         sp  0.8475  3.38e-10 1.00e+00
5    diag.ac  0.8924  1.44e-02 1.00e+00
6    diag.or 52.0918  3.29e-05 8.24e+07
7       nndx  1.3314 -1.01e+00 1.00e+00
8     youden  0.7511 -9.94e-01 1.00e+00
9     pv.pos  0.9595  5.88e-03 1.00e+00
10    pv.neg  0.6873  3.17e-10 1.00e+00
11    lr.pos  5.9252  1.88e-04 1.86e+05
12    lr.neg  0.1137  1.08e-04 1.20e+02
13    p.rout  0.2466  1.53e-07 9.94e-01
14     p.rin  0.7534  5.88e-03 1.00e+00
15    p.tpdn  0.1525  0.00e+00 1.00e+00
16    p.tndp  0.0964  0.00e+00 9.94e-01
17    p.dntp  0.0405  0.00e+00 9.94e-01
18    p.dptn  0.3127  0.00e+00 1.00e+00
Implementado por demo_tabela80.R

Observe a saída. Para um único indivíduo os intervalos de confiança perdem o significado, mas as estimativas pontuais são perfeitamente utilizáveis. Os valores relatados estão em sumario$est[9]=0.9595158 e sumario$est[10]=0.6872922.

Cuidado!

Esta função do epiR relata a probabilidade do indivíduo estar doente caso o exame seja positivo (ppv) e a probabilidade do indivíduo não estar doente caso o exame seja negativo (npv). Portanto:

  • \(PPV = pv.pos\) = sumario$est[9] = 0.9595158
  • \(NPV = pv.neg\) = sumario$est[10] = 0.6872922
  • \(P(D_{+}|T_{-}) = 1-pv.neg\) = 1-sumario$est[10] = 0.3127078

Fornecendo em \(P(D_{+}|T_{-})\) a probabilidade do paciente estar doente de acordo com a forma vista no cálculo manual ou no nomograma.


Exemplo 1: HIV

Exemplo 1: HIV

Sabe-se que a prevalência do HIV em usuários de cocaína é de 5% (0.05)[1] e na população geral a prevalência é de 0.24% (0.0024)[2]. Assuma a sensibilidade do ELISA igual a 99.7% e especificidade de 98.5%[3].

Calcule o VPP e o VPN do ELISA para um paciente vindo de cada um dos grupos e explique as diferenças observadas.

[1] França DDS et al (2018) HIV-1 infection among crack cocaine users in a region far from the epicenter of the HIV epidemic in Brazil: Prevalence and molecular characteristics [https://journals.plos.org/plosone/article?id=10.1371/journal.pone.0199606]

[2] Alves BM et al. (2019) Estimating HIV-1 Genetic Diversity in Brazil Through Next-Generation Sequencing. Front Microbiol. 10: 749. [https://www.ncbi.nlm.nih.gov/pmc/articles/PMC6465556/]

[3] Chou R et al (2005) Screening for HIV: A Review of the Evidence for the U.S. Preventive Services Task Force. Ann Intern Med. 143(1):55-73. [https://annals.org/aim/fullarticle/718529/screening-hiv-review-evidence-u-s-preventive-services-task-force]

- para o paciente da população geral:

          Outcome +    Outcome -      Total
Test +     2.39e-03        0.015     0.0174
Test -     7.20e-06        0.983     0.9826
Total      2.40e-03        0.998     1.0000

Point estimates and 95% CIs:
--------------------------------------------------------------
Apparent prevalence *                  0.0174 (0.0000, 0.9770)
True prevalence *                      0.0024 (0.0000, 0.9753)
Sensitivity *                          0.9970 (0.0000, 1.0000)
Specificity *                          0.9850 (0.0231, 1.0000)
Positive predictive value *            0.1379 (0.0000, 1.0000)
Negative predictive value *            1.0000 (0.0234, 1.0000)
Positive likelihood ratio              66.4667 (0.0000, 622392610.4585)
Negative likelihood ratio              0.0030 (0.0000, Inf)
False T+ proportion for true D- *      0.0150 (0.0000, 0.9769)
False T- proportion for true D+ *      0.0030 (0.0000, 1.0000)
False T+ proportion for T+ *           0.8621 (0.0000, 1.0000)
False T- proportion for T- *           0.0000 (0.0000, 0.9766)
Correctly classified proportion *      0.9850 (0.0233, 1.0000)
--------------------------------------------------------------
* Exact CIs
   statistic        est        lower      upper
1         ap 1.7357e-02   0.0000e+00 9.7697e-01
2         tp 2.4000e-03   0.0000e+00 9.7528e-01
3         se 9.9700e-01   0.0000e+00 1.0000e+00
4         sp 9.8500e-01   2.3079e-02 1.0000e+00
5    diag.ac 9.8503e-01   2.3291e-02 1.0000e+00
6    diag.or 2.1823e+04  3.6356e-314        Inf
7       nndx 1.0183e+00  -1.0236e+00 1.0000e+00
8     youden 9.8200e-01  -9.7692e-01 1.0000e+00
9     pv.pos 1.3786e-01   0.0000e+00 1.0000e+00
10    pv.neg 9.9999e-01   2.3422e-02 1.0000e+00
11    lr.pos 6.6467e+01   7.0981e-06 6.2239e+08
12    lr.neg 3.0457e-03  5.4421e-320        Inf
13    p.rout 9.8264e-01   2.3026e-02 1.0000e+00
14     p.rin 1.7357e-02   0.0000e+00 9.7697e-01
15    p.tpdn 1.5000e-02   0.0000e+00 9.7692e-01
16    p.tndp 3.0000e-03   0.0000e+00 1.0000e+00
17    p.dntp 8.6214e-01   0.0000e+00 1.0000e+00
18    p.dptn 7.3272e-06   0.0000e+00 9.7658e-01
Implementado por demo_HIV_popgeral.R

Obtemos, portanto,

  • \(PPV = \text{sumario\$est[9]} \approx\) 13.79%
  • \(NPV = \text{sumario\$est[10]} \approx\) 100%

Portanto, no caso de exame negativo, obtivemos praticamente 100% de segurança em descartar a presença de HIV (quase igual a 1: 0.9999927).

Surpreendentemente, mesmo para um exame com sensibilidade de 99.7% e especificidade de 98.5%, no caso de exame positivo a probabilidade do paciente ter HIV é de apenas 13.79%. É preciso muito cuidado com aqueles exames pedidos sem hipótese diagnóstica, “só para descartar” como gostam de dizer.

- para o paciente usuário de drogas:

          Outcome +    Outcome -      Total
Test +      0.04985       0.0143     0.0641
Test -      0.00015       0.9357     0.9359
Total       0.05000       0.9500     1.0000

Point estimates and 95% CIs:
--------------------------------------------------------------
Apparent prevalence *                  0.0641 (0.0000, 0.9818)
True prevalence *                      0.0500 (0.0000, 0.9804)
Sensitivity *                          0.9970 (0.0000, 1.0000)
Specificity *                          0.9850 (0.0191, 1.0000)
Positive predictive value *            0.7777 (0.0000, 1.0000)
Negative predictive value *            0.9998 (0.0194, 1.0000)
Positive likelihood ratio              66.4667 (0.0000, 799069124.5361)
Negative likelihood ratio              0.0030 (0.0000, 7581495819910748183240604088088868208804628282060066026826824684004.0000)
False T+ proportion for true D- *      0.0150 (0.0000, 0.9809)
False T- proportion for true D+ *      0.0030 (0.0000, 1.0000)
False T+ proportion for T+ *           0.2223 (0.0000, 1.0000)
False T- proportion for T- *           0.0002 (0.0000, 0.9806)
Correctly classified proportion *      0.9856 (0.0234, 1.0000)
--------------------------------------------------------------
* Exact CIs
   statistic       est      lower     upper
1         ap 6.410e-02  0.000e+00 9.818e-01
2         tp 5.000e-02  0.000e+00 9.804e-01
3         se 9.970e-01  0.000e+00 1.000e+00
4         sp 9.850e-01  1.913e-02 1.000e+00
5    diag.ac 9.856e-01  2.335e-02 1.000e+00
6    diag.or 2.182e+04  2.314e-66 2.058e+74
7       nndx 1.018e+00 -1.020e+00 1.000e+00
8     youden 9.820e-01 -9.809e-01 1.000e+00
9     pv.pos 7.777e-01  0.000e+00 1.000e+00
10    pv.neg 9.998e-01  1.940e-02 1.000e+00
11    lr.pos 6.647e+01  5.529e-06 7.991e+08
12    lr.neg 3.046e-03  1.224e-72 7.581e+66
13    p.rout 9.359e-01  1.823e-02 1.000e+00
14     p.rin 6.410e-02  0.000e+00 9.818e-01
15    p.tpdn 1.500e-02  0.000e+00 9.809e-01
16    p.tndp 3.000e-03  0.000e+00 1.000e+00
17    p.dntp 2.223e-01  0.000e+00 1.000e+00
18    p.dptn 1.603e-04  0.000e+00 9.806e-01
Implementado por demo_HIV_popdroga.R

Obtemos, portanto,

  • \(PPV = \text{sumario\$est[9]} \approx\) 77.77%
  • \(NPV = \text{sumario\$est[10]} \approx\) 99.98%

Novamente, no caso de exame negativo, muito provavelmente descartamos a infecção pelo HIV. Para exame positivo, embora a probabilidade tenha subido de 5% para 77.77%, não é ainda um diagnóstico confirmado. Este exame é mais sensível que específico e, portanto, um segundo exame, mais específico, pode ser necessário para a confirmação diagnóstica para quem resultou positivo no primeiro exame.

Exemplo 2: câncer de próstata

- primeira situação

Ao atender em seu consultório um homem de 68 anos com queixa de ter seu sono interrompido toda noite para ir ao banheiro urinar, o Dr. Sasaki chegou à conclusão, depois do exame de toque retal, que a próstata estava aumentada, e considerou que o paciente tinha 30% de probabilidade de estar com câncer de próstata. Solicitou alguns exames de laboratório, entre eles a dosagem de antígeno prostático específico (PSA), que tem 34.9% de sensibilidade e 63.1% de especificidade[4]. Qual a probabilidade de o paciente ter câncer de próstata sabendo-se que o resultado do PSA foi negativo? E se o resultado fosse positivo?

[4] Sonya Parpart, Alysia Rudis, Amber Schreck, Nikhil Dewan, Paul Warren (2007) Sensitivity and Specificity in Prostate Cancer Screening Methods and Strategies. Journal of Young Investigators 16(4). “While Prostate Specific Antigen (PSA) testing is the most widespread form of prostate cancer screening, its specificity of 63.1% and low sensitivity of 34.9% calls for a statistically improved and more effective method to more accurately and consistently detect the ninth most common form of cancer.”

          Outcome +    Outcome -      Total
Test +        0.105        0.258      0.363
Test -        0.195        0.442      0.637
Total         0.300        0.700      1.000

Point estimates and 95% CIs:
--------------------------------------------------------------
Apparent prevalence *                  0.3630 (0.0000, 0.9978)
True prevalence *                      0.3000 (0.0000, 0.9962)
Sensitivity *                          0.3490 (0.0000, 1.0000)
Specificity *                          0.6310 (0.0002, 1.0000)
Positive predictive value *            0.2884 (0.0000, 1.0000)
Negative predictive value *            0.6934 (0.0002, 1.0000)
Positive likelihood ratio              0.9458 (0.0030, 302.5521)
Negative likelihood ratio              1.0317 (0.0432, 24.6589)
False T+ proportion for true D- *      0.3690 (0.0000, 0.9998)
False T- proportion for true D+ *      0.6510 (0.0000, 1.0000)
False T+ proportion for T+ *           0.7116 (0.0000, 1.0000)
False T- proportion for T- *           0.3066 (0.0000, 0.9998)
Correctly classified proportion *      0.5464 (0.0008, 0.9998)
--------------------------------------------------------------
* Exact CIs
   statistic      est      lower     upper
1         ap   0.3630  2.083e-05    0.9978
2         tp   0.3000  2.315e-06    0.9962
3         se   0.3490  3.331e-16    1.0000
4         sp   0.6310  1.776e-04    1.0000
5    diag.ac   0.5464  7.545e-04    0.9998
6    diag.or   0.9167  1.201e-04 6997.8580
7       nndx -50.0000 -1.000e+00    1.0000
8     youden  -0.0200 -9.998e-01    1.0000
9     pv.pos   0.2884  3.331e-16    1.0000
10    pv.neg   0.6934  1.891e-04    1.0000
11    lr.pos   0.9458  2.957e-03  302.5521
12    lr.neg   1.0317  4.316e-02   24.6589
13    p.rout   0.6370  2.150e-03    1.0000
14     p.rin   0.3630  2.083e-05    0.9978
15    p.tpdn   0.3690  3.859e-07    0.9998
16    p.tndp   0.6510  5.437e-09    1.0000
17    p.dntp   0.7116  5.474e-07    1.0000
18    p.dptn   0.3066  3.794e-09    0.9998
Implementado por demo_prostata_consulta.R

Obtemos, portanto,

  • \(PPV = \text{sumario\$est[9]} \approx\) 28.84%
  • \(NPV = \text{sumario\$est[10]} \approx\) 69.34%

Algo estranho parece ter acontecido. O médico achava que o paciente tinha probabilidade de estar doente de 30%: com o exame positivo, esta convicção diminui para 28.84%; reversamente, a probabilidade de não estar doente, era 70%; com o exame negativo, diminuiu para 69.34%. Na prática, parece que encontramos um exemplo no qual o exame não mudou a percepção do médico.

- segunda situação

”[…] A escolha da faixa etária estudada (50 anos ou mais de idade) considerou os dados científicos que apontam o aumento da incidência do câncer de próstata a partir desta idade [5][6][7]. Estudo realizado na cidade de São Paulo com o objetivo de verificar a presença do adenocarcimona de próstata em população assintomática encontrou prevalência ascendente de 1,3% na faixa de 50-59 anos, a 5,2% na mais idosa (70 anos ou mais), mostrando o crescimento de risco deste câncer com a idade mais avançada.”

Vivian Mae Schmidt Lima Amorim et al. (2011) Fatores associados à realização dos exames de rastreamento para o câncer de próstata: um estudo de base populacional. Cad. Saúde Pública 27(2). Disponível em http://www.scielosp.org/scielo.php?script=sci_arttext&pid=S0102-311X2011000200016&lng=en&nrm=iso&tlng=en

[5] Brawley OW, Ankerst DP, Thompson IM. Screening for prostate cancer. CA Cancer J Clin 2009; 59: 264-73

[6] Damber JE, Aus G. Prostate cancer. Lancet 2008; 371:1710-21

[7] Grönberg H. Prostate cancer epidemiology. Lancet 2003; 361:859-64

O que podemos dizer sobre os mais idosos, para o uso do PSA na faixa etária com maior prevalência de câncer de próstata?

          Outcome +    Outcome -      Total
Test +       0.0181        0.350      0.368
Test -       0.0339        0.598      0.632
Total        0.0520        0.948      1.000

Point estimates and 95% CIs:
--------------------------------------------------------------
Apparent prevalence *                  0.3680 (0.0000, 0.9980)
True prevalence *                      0.0520 (0.0000, 0.9806)
Sensitivity *                          0.3490 (0.0000, 1.0000)
Specificity *                          0.6310 (0.0015, 1.0000)
Positive predictive value *            0.0493 (0.0000, 1.0000)
Negative predictive value *            0.9464 (0.0020, 1.0000)
Positive likelihood ratio              0.9458 (0.0000, 158675.1955)
Negative likelihood ratio              1.0317 (0.0016, 671.7586)
False T+ proportion for true D- *      0.3690 (0.0000, 0.9985)
False T- proportion for true D+ *      0.6510 (0.0000, 1.0000)
False T+ proportion for T+ *           0.9507 (0.0000, 1.0000)
False T- proportion for T- *           0.0536 (0.0000, 0.9980)
Correctly classified proportion *      0.6163 (0.0017, 1.0000)
--------------------------------------------------------------
* Exact CIs
   statistic      est     lower    upper
1         ap   0.3680  2.40e-05 9.98e-01
2         tp   0.0520  0.00e+00 9.81e-01
3         se   0.3490  0.00e+00 1.00e+00
4         sp   0.6310  1.48e-03 1.00e+00
5    diag.ac   0.6163  1.74e-03 1.00e+00
6    diag.or   0.9167  8.40e-09 1.00e+08
7       nndx -50.0000 -1.00e+00 1.00e+00
8     youden  -0.0200 -9.99e-01 1.00e+00
9     pv.pos   0.0493  0.00e+00 1.00e+00
10    pv.neg   0.9464  2.02e-03 1.00e+00
11    lr.pos   0.9458  5.64e-06 1.59e+05
12    lr.neg   1.0317  1.58e-03 6.72e+02
13    p.rout   0.6320  2.04e-03 1.00e+00
14     p.rin   0.3680  2.40e-05 9.98e-01
15    p.tpdn   0.3690  1.46e-05 9.99e-01
16    p.tndp   0.6510  0.00e+00 1.00e+00
17    p.dntp   0.9507  2.57e-05 1.00e+00
18    p.dptn   0.0536  0.00e+00 9.98e-01
Implementado por demo_prostata_populacao.R

Obtemos, portanto,

  • \(PPV = \text{sumario\$est[9]} \approx\) 4.93%
  • \(NPV = \text{sumario\$est[10]} \approx\) 94.64%

Os exames com resultado positivo e negativo dão probabilidades para doença e não doença similares à prevalências gerais!

Este tipo de exame parece não promover mudança dos valores em âmbito individual e em âmbito populacional Como é possível usar este exame para rastreamento populacional?

Comentamos sobre índice de Youden, que precisa ser maior que zero para que um exame diagnóstico seja de fato um teste diagnóstivo informativo. Aqui encontramos \(\text{Youden} \approx\) -0.02, negativo.

Mais um indício de que o exame de PSA não tem qualidade é dado por uma simulação com o script TesteDiagnostico.R. Neste tipo de procedimento, nosso script é ativado sem fornecermos \(n\). O algoritmo, então, aumenta o valor de \(n\) até que \(LR_{+}\) e \(LR_{-}\) não varie mais que o critério de parada (delta=1e-4, por default). Com isto, temos o tamanho mínimo de população que, hipoteticamente, estabilizaria o desempenho da qualidade do exame e, então, simula o que este experimento encontraria. Fornecendo:

[…]
P(D+)=(a+c)/n … prevalencia da Desfecho
prevalencia: 0.052
[…]
P(T+|D+) = a/(a+c) … sensibilidade do teste
sensibilidade: 0.349
[…]
P(T-|D-) = d/(b+d) … especificidade do teste
especificidade: 0.631
[…]
Qual o tamanho da população (Total)?
n: [DEIXE EM BRANCO]
[…]
Definindo n.
(criterio de parada, default = 1e-4)
delta < 1e-4
[…]
Defina alfa = probabilidade do erro do tipo I
alfa: 0.05
[…]
Um momento, encontrando ‘n’

O sistema, então, faz uma pequena pausa e emite um gráfico com \(LR_{+}\) e \(LR_{-}\) e relata o valor encontrado para \(n\):

Total (n) = 1789
[…]
Exibir tabelas? (exibir lentifica a simulacao)
0=nao, 1=sim; default eh 0: 0
[…]
Quantas iteracoes para simular?
iteracoes: 1e3

obtém-se:

exemplo <- 'y'
source("TesteDiagnostico_PSA.R")

Definindo n.

Um momento, encontrando 'n'
.


Total (n) = 1789 


-------------------------------------------------
          Outcome +    Outcome -      Total
Test +         32.5          626        658
Test -         60.6         1070       1131
Total          93.0         1696       1789

Point estimates and 95% CIs:
--------------------------------------------------------------
Apparent prevalence *                  0.3680 (0.3456, 0.3908)
True prevalence *                      0.0520 (0.0422, 0.0633)
Sensitivity *                          0.3490 (0.2531, 0.4548)
Specificity *                          0.6310 (0.6075, 0.6540)
Positive predictive value *            0.0493 (0.0341, 0.0688)
Negative predictive value *            0.9464 (0.9317, 0.9588)
Positive likelihood ratio              0.9458 (0.7117, 1.2570)
Negative likelihood ratio              1.0317 (0.8852, 1.2025)
False T+ proportion for true D- *      0.3690 (0.3460, 0.3925)
False T- proportion for true D+ *      0.6510 (0.5452, 0.7469)
False T+ proportion for T+ *           0.9507 (0.9312, 0.9659)
False T- proportion for T- *           0.0536 (0.0412, 0.0683)
Correctly classified proportion *      0.6163 (0.5933, 0.6389)
--------------------------------------------------------------
* Exact CIs
                              estimative  IC95 [lower      upper]      upper
1: apparent prevalence, P(T+)         ap   0.36796000  0.34556563 0.39078830
2: (true) prevalence, P(D+)           tp   0.05200000  0.04217423 0.06332554
3: sensitivity                        se   0.34900000  0.25306606 0.45483960
4: specificity                        sp   0.63100000  0.60752926 0.65401644
5: diag. accuracy                diag.ac   0.61633600  0.59334718 0.63894255
6: diag. odds ratio              diag.or   0.91674264  0.59184456 1.41999626
7: number needed to diag.           nndx -50.00000000 -7.17336051 9.18644527
8: Youden's index                 youden  -0.02000000 -0.13940468 0.10885603
9: pos. pred. value               pv.pos   0.04932058  0.03407713 0.06875208
10: neg. pred. value              pv.neg   0.94644010  0.93166919 0.95882849
11: positive LR                   lr.pos   0.94579946  0.71166146 1.25696931
12: negative LR                   lr.neg   1.03169572  0.88517556 1.20246887
13                                p.rout   0.63204000  0.60921170 0.65443437
14                                 p.rin   0.36796000  0.34556563 0.39078830
15                                p.tpdn   0.36900000  0.34598356 0.39247074
16                                p.tndp   0.65100000  0.54516040 0.74693394
17                                p.dntp   0.95067942  0.93124792 0.96592287
18                                p.dptn   0.05355990  0.04117151 0.06833081

Sob H0 espera-se (em proporcoes):
                      
       D +   D -      
 T + 0.019 0.349 0.368
 T - 0.033 0.599 0.632
     0.052 0.948      

Sob H1 espera-se (em proporcoes):
                      
       D +   D -      
 T + 0.018  0.35 0.368
 T - 0.034 0.598 0.632
     0.052 0.948      

---------------------
Iniciando a simulacao
---------------------

Aguarde...


amostra = 1789
alfa = 0.05
iteracoes = 1000



Terminado:
alfa: 5%

OR:
mediana(OR): 0.9182957 
IC95% (OR): [0.582, 1.414]

V de Cramer:
mediana(V): 0.01829067 
IC95% (V): [0.001, 0.055]
Implementado por TesteDiagnostico_PSA.R

Observa-se que odds ratio inclui o valor unitário (ou o ln(odds ratio) não inclui o valor zero, o que é o mesmo) e o intervalo de confiança do Índice de Youden inclui o valor zero. Com isto, os intervalos de confiança de \(PPV\) e \(NPV\) sempre incluem os valores de entrada, portanto não auxiliam em mudar a crença médica pré-exame. Adicionalmente, os intervalos de confiança de \(LR_{+}\) e \(LR_{-}\) incluem o valor 1 (caso volte ao nomograma, percebe que é um exame incapaz de mudar a probabilidade pré-teste). Ao final, o teste Qui-quadrado por bootstrapping não rejeita a hipótese nula, portanto os resultados de PSA parecem não associar-se ao câncer de próstata que pretende detectar.

Medidas

Várias destas medidas são redundantes. Por exemplo,

mostrando que o Índice de Youden ser maior do que 1, \(PPV\) resultar maior que a prevalência e \(LR_{+}\) ser maior que 1 estão interligados e são critério equivalentes. Por estes critérios, portanto, o exame PSA talvez não possa ser chamado de teste diagnóstico.

Youden Index Calculator

htmltools::tags$iframe(
  src = "https://dataverse.harvard.edu/api/v1/access/datafile/11539045",
  width = "100%",
  height = "1500px",
  style = "border:none;")

Metanálise

O grupo Cochrane que trabalha com metanálise e busca firmar evidências, não tem encontrado apoio destes exames para a prevenção do câncer de próstata e alerta para possíveis danos que podem causar:

https://www.cochrane.org/CD004720/PROSTATE_screening-for-prostate-cancer

O grupo americano USPSTF é cauteloso, não apoia screening populacional e deixa a critério pessoal para quem tem 69 anos ou menos, ressaltando potenciais iatrogenias. Para quem tem 70 anos ou mais posicionam-se contrários:

https://www.uspreventiveservicestaskforce.org/Page/ Document/RecommendationStatementFinal/ prostate-cancer-screening1

Parece estar na contra-mão das recomendações acima um texto que começa com certezas ao afirmar que “A única forma de garantir…” ao promover o Novembro Azul no Brasil. Tendo como base o PSA que analisamos e o exame de toque retal, há risco de iatrogenia.

http://bvsms.saude.gov.br/ultimas-noticias/2535-novembro-azul-mes-mundial-de-combate-ao-cancer-de-prostata

No entanto, o mesmo Ministério da Saúde, em seu excelente guia para o diagnóstico de HIV/AIDS, exige sensibilidade e especificidade acima de 99%: