El Teorema de Bayes es una herramienta fundamental en estadística que permite actualizar probabilidades a medida que se obtiene nueva información.
En este caso, se aplica al diagnóstico médico para calcular la probabilidad de que una persona tenga cáncer dado que su prueba resultó positiva.
Una mamografía detecta cáncer de mama. La prevalencia (prior) es del 1% en mujeres de 40–50 años. La prueba tiene sensibilidad del 80% (detecta correctamente el 80% de casos reales) y especificidad del 90.4% (tasa de falsos positivos del 9.6%). Una paciente da positivo. ¿Cuál es la probabilidad real de que tenga cáncer?
# ====================================================
# 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)
Interpretación:
Se definen los datos iniciales del problema:
La prevalencia representa la probabilidad inicial de tener cáncer. La sensibilidad mide qué tan buena es la prueba detectando enfermos. El falso positivo indica errores en personas sanas.
# Tabla Bayesiana
estados <- c("Cáncer", "No Cáncer")
prior <- c(prevalencia, 1 - prevalencia)
likel <- c(sensibilidad, falso_pos) # P(Positivo | estado)
Estados: posibles situaciones (tener o no cáncer). Prior: probabilidades iniciales antes de ver la prueba. Likelihood (verosimilitud): probabilidad de obtener un resultado positivo dado cada estado.
# Paso 1-3: conjuntas
conjunta <- prior * likel
# Paso 4: probabilidad marginal de la evidencia
P_positivo <- sum(conjunta)
cat("P(Positivo) =", round(P_positivo, 4), "\n")
## P(Positivo) = 0.103
Se suman las probabilidades conjuntas para obtener:
P(Positivo)
# Paso 5: posteriors
posterior <- conjunta / P_positivo
Aplicamos Bayes:
P(Estado | Positivo)
# 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.
# 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, "%"))
El gráfico evidencia que la probabilidad de tener cáncer dado un resultado positivo depende fuertemente de la prevalencia de la enfermedad. En poblaciones con baja prevalencia, incluso pruebas con buena sensibilidad pueden generar una alta proporción de falsos positivos, reduciendo el valor predictivo positivo. Por lo tanto, es fundamental considerar el contexto poblacional al interpretar resultados diagnósticos.