Ejercicio 1.

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

# -------------------------------
# Definición de parámetros
# -------------------------------

prevalencia  <- 0.01   
# P(Cáncer): Probabilidad a priori (PRIOR)
# Representa la proporción de la población que tiene la enfermedad

sensibilidad <- 0.80   
# P(Positivo | Cáncer): Sensibilidad
# Probabilidad de que la prueba sea positiva dado que el paciente tiene cáncer

falso_pos    <- 0.096  
# P(Positivo | No Cáncer): Tasa de falsos positivos
# Probabilidad de que la prueba sea positiva en personas sanas


# -------------------------------
# Construcción del modelo bayesiano
# -------------------------------

estados <- c("Cáncer", "No Cáncer")  
# Estados de la naturaleza (variable aleatoria discreta)

prior   <- c(prevalencia, 1 - prevalencia)  
# Vector de probabilidades a priori:
# P(Cáncer) y P(No Cáncer)

likel   <- c(sensibilidad, falso_pos)   
# Vector de verosimilitudes:
# P(Positivo | estado)


# -------------------------------
# Paso 1-3: Probabilidades conjuntas
# -------------------------------

conjunta <- prior * likel  

# Se aplica la regla:
# P(A ∩ B) = P(A) * P(B | A)
#
# En este caso:
# P(Cáncer ∩ Positivo)
# P(No Cáncer ∩ Positivo)
#
# Representa la probabilidad conjunta de cada estado con la evidencia


# -------------------------------
# Paso 4: Probabilidad marginal (evidencia)
# -------------------------------

P_positivo <- sum(conjunta)  

# Se calcula:
# P(Positivo) = Σ P(estado) * P(Positivo | estado)
#
# Esto corresponde a la Ley de la Probabilidad Total
#
# Es la probabilidad de obtener un resultado positivo
# sin importar si el paciente tiene o no cáncer

cat("P(Positivo) =", round(P_positivo, 4), "\n")
## P(Positivo) = 0.103
# -------------------------------
# Paso 5: Probabilidades posteriores (Bayes)
# -------------------------------

posterior <- conjunta / P_positivo  

# Aplicación del Teorema de Bayes:
#
# P(A | B) = P(A ∩ B) / P(B)
#
# Aquí se actualiza la probabilidad inicial (prior)
# usando la evidencia observada (test positivo)


# -------------------------------
# Construcción de tabla resumen
# -------------------------------

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
# La tabla resume todo el proceso bayesiano:
# - Prior: creencia inicial
# - Verosimilitud: información del test
# - Conjunta: combinación de ambas
# - Posterior: probabilidad actualizada


# -------------------------------
# Interpretación del resultado clave
# -------------------------------

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.
# Este resultado muestra un fenómeno importante:
# Incluso con una prueba relativamente buena,
# la probabilidad posterior puede ser baja si la prevalencia es baja.
#
# Esto se conoce como:
# "Falacia de la tasa base"
# (ignorar la probabilidad a priori en la interpretación)


# -------------------------------
# Visualización: análisis de sensibilidad
# -------------------------------

library(ggplot2)

prevalencias <- seq(0.001, 0.20, 0.001)

# Se evalúa cómo cambia P(Cáncer | Positivo)
# para diferentes valores de prevalencia

post_cancer <- sapply(prevalencias, function(p) {
  
  # Recalculamos probabilidades conjuntas
  conj <- c(sensibilidad * p, falso_pos * (1 - p))
  
  # Aplicamos Bayes:
  # P(Cáncer | Positivo) = conjunta[1] / suma total
  conj[1] / sum(conj)
})

df_prev <- data.frame(prevalencia = prevalencias, posterior = post_cancer)


# -------------------------------
# Gráfico
# -------------------------------

ggplot(df_prev, aes(x = prevalencia * 100, y = posterior * 100)) +
  
  geom_line(color = "#3a7fbd", linewidth = 1.2) +
  # Curva que muestra la relación entre prevalencia y probabilidad posterior
  
  geom_point(data = data.frame(x = 1, y = posterior[1] * 100),
             aes(x = x, y = y), color = "#b0305a", size = 4) +
  # Punto específico del caso original (prevalencia = 1%)
  
  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, "%"))

# -------------------------------
# Interpretación del gráfico
# -------------------------------

# A mayor prevalencia:
# → Mayor probabilidad posterior de tener cáncer dado positivo
#
# A baja prevalencia:
# → Los falsos positivos dominan el resultado
#
# Implicación en toma de decisiones:
# La utilidad de una prueba depende fuertemente del contexto poblacional