## ====================================================
# BAYES — Caso 1: Diagnóstico Médico
# ====================================================

# Datos del problema
prevalencia  <- 0.01   # Probabilidad previa (Prior): 1% de la población tiene cáncer
sensibilidad <- 0.80   # Probabilidad de que la prueba sea positiva dado que SÍ hay cáncer: P(Positivo | Cáncer)
falso_pos    <- 0.096  # Probabilidad de falso positivo: P(Positivo | No Cáncer)

# Definición de los estados posibles
estados <- c("Cancer", "No Cancer")  # Vector con las dos condiciones posibles

# Probabilidades previas (priors)
prior   <- c(prevalencia, 1 - prevalencia)  # P(Cáncer) y P(No Cáncer)

# Verosimilitudes (likelihoods)
likel   <- c(sensibilidad, falso_pos)   # P(Positivo | estado)

# Paso 1-3: cálculo de probabilidades conjuntas
conjunta <- prior * likel  # P(estado ∩ positivo) = P(estado) * P(Positivo | estado)

# Paso 4: probabilidad marginal de obtener un resultado positivo
P_positivo <- sum(conjunta)  # P(Positivo) = suma de las probabilidades conjuntas

# Imprimir la probabilidad total de positivo
cat("P(Positivo) =", round(P_positivo, 4), "\n")
## P(Positivo) = 0.103
# Paso 5: cálculo de probabilidades posteriores (Teorema de Bayes)
posterior <- conjunta / P_positivo  # P(estado | positivo)

# Construcción de una tabla con todos los resultados
tabla <- data.frame(
  Estado      = estados,        # Nombre del estado
  Prior       = prior,          # Probabilidad previa
  Verosimil   = likel,          # Verosimilitud
  Conjunta    = conjunta,       # Probabilidad conjunta
  Posterior   = round(posterior, 4)  # Probabilidad posterior redondeada
)

# Mostrar la tabla
print(tabla)
##      Estado Prior Verosimil Conjunta Posterior
## 1    Cancer  0.01     0.800  0.00800    0.0776
## 2 No Cancer  0.99     0.096  0.09504    0.9224
# Interpretación del resultado clave
cat("\n→ P(Cancer | Positivo) =", round(posterior[1] * 100, 1), "%\n")
## 
## → P(Cancer | Positivo) = 7.8 %
# Mensaje interpretativo
cat("→ Aunque la prueba es positiva, solo el",
    round(posterior[1] * 100, 1), "% tiene cancer.\n")
## → Aunque la prueba es positiva, solo el 7.8 % tiene cancer.
# ====================================================
# VISUALIZACIÓN DEL EFECTO DE LA PREVALENCIA
# ====================================================

# Cargar librería para gráficos
library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.5.3
# Crear una secuencia de posibles prevalencias (desde 0.1% hasta 20%)
prevalencias <- seq(0.001, 0.20, 0.001)

# Calcular la probabilidad posterior para cada prevalencia
post_cancer <- sapply(prevalencias, function(p) {
  # Probabilidades conjuntas para cada valor de p
  conj <- c(sensibilidad * p, falso_pos * (1 - p))
  
  # Retornar P(Cáncer | Positivo)
  conj[1] / sum(conj)
})

# Crear un data frame para graficar
df_prev <- data.frame(prevalencia = prevalencias, posterior = post_cancer)

# Construcción del gráfico
ggplot(df_prev, aes(x = prevalencia * 100, y = posterior * 100)) +
  
  # Línea principal de la relación
  geom_line(color = "#3a7fbd", linewidth = 1.2) +
  
  # Punto que representa el caso específico (prevalencia = 1%)
  geom_point(data = data.frame(x = 1, y = posterior[1] * 100),
             aes(x = x, y = y), color = "#b0305a", size = 4) +
  
  # Anotación del punto clave
  annotate("text", x = 2, y = posterior[1] * 100,
           label = paste0("Prevalencia 1%\nP(Cancer|+) = ",
                           round(posterior[1] * 100, 1), "%"),
           hjust = 0, color = "#b0305a", size = 3.5) +
  
  # Títulos del gráfico
  labs(title = "Efecto de la Prevalencia sobre el Valor Predictivo Positivo",
       subtitle = "Mamografia: Sensibilidad=80%, Tasa FP=9.6%",
       x = "Prevalencia (%)", 
       y = "P(Cancer | Positivo) (%)") +
  
  # Tema visual limpio
  theme_minimal() +
  
  # Formato del eje X en porcentaje
  scale_x_continuous(labels = function(x) paste0(x, "%")) +
  
  # Formato del eje Y en porcentaje
  scale_y_continuous(labels = function(x) paste0(x, "%"))