Un resultado positivo en una prueba médica puede generar preocupación, pero no siempre significa que una persona esté enferma. Para interpretar correctamente estos resultados es importante considerar qué tan común es la enfermedad y qué tan confiable es la prueba. El Teorema de Bayes permite combinar esta información con el resultado de la prueba para obtener una probabilidad más realista.
¿Qué tan probable es tener una enfermedad si una prueba salió
positiva?
Esto se escribe como:
P(Enfermedad | Prueba positiva)
En este ejemplo se aplica Bayes a un diagnóstico médico sencillo.
Supongamos que:
- Prevalencia: El 1% de la población tiene cáncer.
- Sensibilidad de la prueba: Si una persona sí tiene cáncer, la prueba
da positiva el 80% de las veces.
- Falsos positivos: Si una persona no tiene cáncer, la prueba da
positiva el 9.6% de las veces.
Estos valores se definen así en R:
# ====================================================
# BAYES — Caso 1: Diagnóstico Médico
# ====================================================
# Datos del problema
prevalencia <- 0.01 # Prior: 1% de la población tiene cáncer
sensibilidad <- 0.80 # P(Positivo | Cáncer)
falso_pos <- 0.096 # P(Positivo | No Cáncer)
Posibles estados de una persona Solo existen dos
posibilidades:
- Tiene cáncer
- No tiene cáncer
estados <- c("Cáncer", "No Cáncer")
A cada estado le asignamos:
Probabilidad inicial (prior): qué tan probable es antes de la prueba.
Probabilidad de dar positivo (likel) : según el estado de la persona.
prior <- c(prevalencia, 1 - prevalencia)
likel <- c(sensibilidad, falso_pos) # P(Positivo | estado)
Ahora combinamos ambas probabilidades.Esto nos dice qué tan probable
es que:
- Una persona tenga cáncer y salga positiva
- Una persona no tenga cáncer y salga positiva
# Paso 1-3: conjuntas
conjunta <- prior * likel;conjunta
## [1] 0.00800 0.09504
Sumamos ambas situaciones para saber:
¿Qué tan común es obtener un positivo en general?
# Paso 4: probabilidad marginal de la evidencia
P_positivo <- sum(conjunta)
cat("P(Positivo) =", round(P_positivo, 4), "\n")
## P(Positivo) = 0.103
Aplicando Bayes, calculamos:
¿Cuál es la probabilidad real de tener cáncer si la prueba salió
positiva?
# Paso 5: posteriors
posterior <- conjunta / P_positivo
La siguiente tabla reúne toda la información del Teorema de Bayes en un solo lugar.Cada fila representa un posible estado de la persona, y cada columna responde a una pregunta distinta.
# Tabla completa
tabla <- data.frame(
Estado = estados,
Prior = prior,
Verosimil = likel,
Conjunta = conjunta,
Posterior = round(posterior, 4)
)
print(tabla)
## Estado Prior Verosimil Conjunta Posterior
## 1 Cáncer 0.01 0.800 0.00800 0.0776
## 2 No Cáncer 0.99 0.096 0.09504 0.9224
cat("\n→ P(Cáncer | Positivo) =", round(posterior[1] * 100, 1), "%\n")
##
## → P(Cáncer | Positivo) = 7.8 %
cat("→ Aunque la prueba es positiva, solo el",
round(posterior[1] * 100, 1), "% tiene cáncer.\n")
## → Aunque la prueba es positiva, solo el 7.8 % tiene cáncer.
El siguiente gráfico muestra cómo cambia la probabilidad real de cáncer cuando cambia la prevalencia en la población. A mayor prevalencia, mayor confianza en un resultado positivo.
# Visualización: cómo cambia la posterior con distintas prevalencias
library(ggplot2)
prevalencias <- seq(0.001, 0.20, 0.001)
post_cancer <- sapply(prevalencias, function(p) {
conj <- c(sensibilidad * p, falso_pos * (1 - p))
conj[1] / sum(conj)
})
df_prev <- data.frame(prevalencia = prevalencias, posterior = post_cancer)
ggplot(df_prev, aes(x = prevalencia * 100, y = posterior * 100)) +
geom_line(color = "#3a7fbd", linewidth = 1.2) +
geom_point(data = data.frame(x = 1, y = posterior[1] * 100),
aes(x = x, y = y), color = "#b0305a", size = 4) +
annotate("text", x = 2, y = posterior[1] * 100,
label = paste0("Prevalencia 1%\nP(Cáncer|+) = ",
round(posterior[1] * 100, 1), "%"),
hjust = 0, color = "#b0305a", size = 3.5) +
labs(title = "Efecto de la Prevalencia sobre el Valor Predictivo Positivo",
subtitle = "Mamografía: Sensibilidad=80%, Tasa FP=9.6%",
x = "Prevalencia (%)", y = "P(Cáncer | Positivo) (%)") +
theme_minimal() +
scale_x_continuous(labels = function(x) paste0(x, "%")) +
scale_y_continuous(labels = function(x) paste0(x, "%"))
En resumen, el gráfico muestra claramente que un resultado positivo en una prueba médica no tiene siempre el mismo significado. Cuando la enfermedad es poco común, como en el caso de una prevalencia del 1%, la probabilidad real de tener cáncer después de un resultado positivo es baja, alrededor del 7.8%, tal como se observa en el punto resaltado. A medida que la prevalencia aumenta, la probabilidad de que un positivo indique realmente enfermedad también aumenta, lo que explica la forma creciente de la curva. Esto demuestra que la interpretación de una prueba médica depende no solo de la calidad de la prueba, sino también de qué tan frecuente es la enfermedad en la población. Por esta razón, un resultado positivo debe entenderse como una señal de alerta y no como un diagnóstico definitivo.