# ====================================================
# 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)
Se identifica tres casos en el cancer de mama cada una dando su respectivo valor de probabilidad planteado en el problema de la detección del cancer de mama
# Tabla Bayesiana
estados <- c("Cáncer", "No Cáncer")
prior <- c(prevalencia, 1 - prevalencia)
likel <- c(sensibilidad, falso_pos) # P(Positivo | estado)
Una vez hecho y asignado los los problemas de probabilidad se crea una tabla bayesiana en las cuales se identifica el estado (Cáncer, No cáncer), el prior es el cual se asigna a cada uno el porcentaje de que ocurra, y likel crea estados positivos o negativos.
# Paso 1-3: conjuntas
conjunta <- prior * likel
Aqui se hace una probabilidad conjunta de los dos ya dichos como el prior y likel e indica la probabilida real de que tenga cancer en los dos naturalezas
# Paso 4: probabilidad marginal de la evidencia
P_positivo <- sum(conjunta)
cat("P(Positivo) =", round(P_positivo, 4), "\n")
## P(Positivo) = 0.103
Este es una probabilidad marginal de la evidencia la cual nos indica la normalización de los casos de cancer
# Paso 5: posteriors
posterior <- conjunta / P_positivo
Estos dos datos nos indica la probabilidad de ocurrencia con la conjunta y positiva para la deteccion de cancer
# 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.
imprime la tabla y calcula expresándolo en porcentaje, mostrando que incluso con una prueba positiva, la probabilidad real depende fuertemente de la prevalencia inicial y no es alta.
# 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 básicamente dice que si casi nadie tiene la enfermedad,
aunque te salga positivo, no es tan seguro que de verdad tengas cáncer.
Por ejemplo, con 1% de prevalencia, solo como 7.8% de los positivos son
reales, o sea hay bastantes falsos positivos. Pero cuando la enfermedad
es más común, ahí sí el resultado positivo ya es más confiable.Por lo
tanto una prueba positiva no siempre significa que estás enfermo,
depende mucho de cuánta gente realmente tenga la enfermedad.