Paradoja del análisis médico generalizado


Problema del Análisis médico

Una determinada prueba clínica para detectar una enfermedad tiene una sensibilidad del 98%, es decir : en el caso de personas afectadas acierta en el 98% de los casos. El el 2% restante da resultado negativo, cuando debería de ser positivo (Falso Negativo).
Y tiene una especificidad del 99.0%, es decir : en el caso de personas sanas acierta en el 99.0% de los casos, y yerra en el 1.0% restante, dando un resultado positivo cuando en realidad el paciente está sano (Falso Positivo). La tasa de enfermos en la población del 0.5%.
La pregunta es : si hacemos un análisis a una persona elegida al azar de entre toda la población, y el resultado da positivo : ¿qué posibilidades hay de que realmente esté enferma?

Solución

La teoria de Bayes dice :
p(B_{i}| A)=\frac{p(A | B_{i}) * p(B_{i})}{\sum_{k=1}^{n}p(A | B_{k})*p(B_{k})}

Vamos a aplicarlo con la siguientes nomenclatura:
A_{+} : posibilidad de que el análisis de positivo
A_{-} : posibilidad de que el análisis de negativo
E_{+} : la persona está enferma
E_{-} : la persona está sana

Aplicando los datos que nos han pasado en el enunciado :

p(A_{+}| E_{+})=0.98\\ p(A_{-}| E_{+})=0.02\\ p(A_{+}| E_{-})=0.01\\ p(A_{-}| E_{-})=0.99

p(E_{+})=0.005

El dato que nos piden es : p(E_{+} | A_{+}) probabilidad de que esté enfermo (E_{+}) habiendo dado positivo en el análisis (A_{+})

p(E_{+}| A_{+})=\frac{p(A_{+} | E_{+}) * p(E_{+})}{\sum_{k=1}^{2}p(A_{+} |t E_{k})*p(E_{k})}

desarrollando el $\sum$ :
p(E_{+}| A_{+})=\frac{p(A_{+} | E_{+}) * p(E_{+})} {p(A_{+} | E_{+})*p(E_{+})+p(A_{+} | E_{-})*p(E_{-})}

Usemos Python para el cálculo:

Empecemos importando una serie de librerías estandares en estas entradas :

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
import re
import math

Criterio : mayúscula es positiva, minúscula es negativa

pAE=0.98
paE=1-pAE
pAe=0.01
pae=1-pAe
pE=0.005
pe=1-pE
pEA=pAE*pE/(pAE*pE+pAe*pe)
'La probabilidad de que esté enfermo dando positivo en el test es del {:1.2f}%'.format(100*pEA)
'La probabilidad de que esté enfermo dando positivo en el test es del 33.00%'

Esa es la razón por la que no tienen sentido análisis a la población en general cuando la tasa de afectados es muy baja.

Para entender el resultado hagamos una extrapolación para España (nº aprox)
Población : 46,5 millones, que podemos dividir en :

poblacion=46500000
poblacion_e=poblacion*pe
poblacion_E=poblacion-poblacion_e
'Poblacion afectada {:,.0f}'.format(poblacion_E)
'Poblacion afectada 232,500'
'Poblacion NO afectada {:,.0f}'.format(poblacion_e)
'Poblacion NO afectada 46,267,500'

aplicando p(A|e) a la poblacion no enferma nos encontrariamos con :

poblacionAe=poblacion_e*pAe
poblacionAe
462675.0
'es decir : tendriamos {:,.0f} False Positivos'.format(poblacionAe)
'es decir : tendriamos 462,675 False Positivos'

Y si hacemos el test solo a la poblacion afectada : cuantos positivos (verdaderos en este caso) tendriamos?

poblacionAE=poblacion_E*pAE
'{:,.0f} True Positivos'.format(poblacionAE)
'227,850 True Positivos'

Es decir : tenemos un total de positivos (los True y los False) de :

'{:,.0f} Positivos'.format(poblacionAE+poblacionAe)
'690,525 Positivos'

entre los que son True :

'True positivos {:,.0f} de un total de {:,.0f}, representando un {:2.1f}%'.format(
    poblacionAE,poblacionAE+poblacionAe,
100*poblacionAE/(poblacionAE+poblacionAe))
'True positivos 227,850 de un total de 690,525, representando un 33.0%'

que coincide con el resultado calculado anteriormente

Deja una respuesta

Por favor, inicia sesión con uno de estos métodos para publicar tu comentario:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Salir /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Salir /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Salir /  Cambiar )

Conectando a %s

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.