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 :
Vamos a aplicarlo con la siguientes nomenclatura:
: posibilidad de que el análisis de positivo
: posibilidad de que el análisis de negativo
: la persona está enferma
: la persona está sana
Aplicando los datos que nos han pasado en el enunciado :
El dato que nos piden es : probabilidad de que esté enfermo (
) habiendo dado positivo en el análisis (
)
desarrollando el $\sum$ :
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
Debe estar conectado para enviar un comentario.