## ====================================================
# BAYES — Caso 2: Control de Calidad + Actualización
# Secuencial (múltiples inspecciones)
# ====================================================

# Definición de una función que construye la tabla bayesiana
bayes_tabla <- function(prior, likel, estados) {
  
  conjunta  <- prior * likel     # Calcula P(Estado ∩ Evidencia) = prior * verosimilitud
  
  P_E       <- sum(conjunta)     # Probabilidad total de la evidencia P(E), sumando todas las conjuntas
  
  posterior <- conjunta / P_E    # Calcula P(Estado | Evidencia) usando el Teorema de Bayes
  
  # Construcción de una tabla resumen con redondeo
  df <- data.frame(
    Estado    = estados,                 # Nombre de cada estado (proveedor)
    Prior     = round(prior,      4),    # Probabilidades previas
    Likel     = round(likel,      4),    # Verosimilitudes P(E|Estado)
    Conjunta  = round(conjunta,   4),    # Probabilidades conjuntas
    P_E       = round(P_E,        4),    # Probabilidad marginal (misma para todos)
    Posterior = round(posterior,  4)     # Probabilidades posteriores
  )
  
  # Retorna una lista con tabla, posterior y evidencia
  list(tabla = df, posterior = posterior, P_E = P_E)
}

# ================================
# Datos iniciales del problema
# ================================

estados  <- c("Proveedor A", "Proveedor B", "Proveedor C")  # Estados posibles (proveedores)

prior    <- c(0.60, 0.30, 0.10)  # Probabilidad inicial de cada proveedor

p_defecto <- c(0.01, 0.04, 0.12)   # P(Defecto | Proveedor): tasa de defectos por proveedor

p_conforme <- c(0.99, 0.96, 0.88) # P(Conforme | Proveedor): complemento (1 - defecto)

# ================================
# INSPECCIÓN 1
# ================================

cat("=== INSPECCION 1: DEFECTUOSA ===\n")  # Mensaje en consola
## === INSPECCION 1: DEFECTUOSA ===
# Aplicar Bayes con evidencia: pieza defectuosa
res1 <- bayes_tabla(prior, p_defecto, estados)

# Mostrar tabla (columnas seleccionadas)
print(res1$tabla[, c("Estado","Prior","Likel","Conjunta","Posterior")])
##        Estado Prior Likel Conjunta Posterior
## 1 Proveedor A   0.6  0.01    0.006       0.2
## 2 Proveedor B   0.3  0.04    0.012       0.4
## 3 Proveedor C   0.1  0.12    0.012       0.4
# ================================
# ACTUALIZACIÓN SECUENCIAL
# ================================

# La lógica bayesiana secuencial:
# posterior actual → se convierte en prior para la siguiente observación

# ================================
# INSPECCIÓN 2
# ================================

cat("\n=== INSPECCION 2: DEFECTUOSA (prior actualizado) ===\n")
## 
## === INSPECCION 2: DEFECTUOSA (prior actualizado) ===
# Se usa la posterior de la inspección 1 como nuevo prior
res2 <- bayes_tabla(res1$posterior, p_defecto, estados)

# Mostrar resultados
print(res2$tabla[, c("Estado","Prior","Likel","Posterior")])
##        Estado Prior Likel Posterior
## 1 Proveedor A   0.2  0.01    0.0303
## 2 Proveedor B   0.4  0.04    0.2424
## 3 Proveedor C   0.4  0.12    0.7273
# ================================
# INSPECCIÓN 3
# ================================

cat("\n=== INSPECCION 3: CONFORME ===\n")
## 
## === INSPECCION 3: CONFORME ===
# Nueva actualización usando evidencia favorable (pieza conforme)
res3 <- bayes_tabla(res2$posterior, p_conforme, estados)

# Mostrar resultados
print(res3$tabla[, c("Estado","Prior","Likel","Posterior")])
##        Estado  Prior Likel Posterior
## 1 Proveedor A 0.0303  0.99    0.0332
## 2 Proveedor B 0.2424  0.96    0.2578
## 3 Proveedor C 0.7273  0.88    0.7090
# ====================================================
# VISUALIZACIÓN DE LA EVOLUCIÓN DE LAS PROBABILIDADES
# ====================================================

# Cargar librerías necesarias
library(ggplot2); library(tidyr)
## Warning: package 'ggplot2' was built under R version 4.5.3
# Construir data frame con la evolución de probabilidades
evolucion <- data.frame(
  Inspeccion = c("Prior", "Tras Def1", "Tras Def2", "Tras Conf"),  # Etapas del proceso
  
  # Probabilidad de cada proveedor en cada etapa
  A = c(prior[1], res1$posterior[1], res2$posterior[1], res3$posterior[1]),
  B = c(prior[2], res1$posterior[2], res2$posterior[2], res3$posterior[2]),
  C = c(prior[3], res1$posterior[3], res2$posterior[3], res3$posterior[3])
)

# Convertir de formato ancho a formato largo (necesario para ggplot)
df_long <- pivot_longer(evolucion, -Inspeccion,
                       names_to = "Proveedor", values_to = "Probabilidad")

# Definir el orden de las inspecciones (factor ordenado)
df_long$Inspeccion <- factor(df_long$Inspeccion,
                            levels = c("Prior","Tras Def1","Tras Def2","Tras Conf"))

# Construcción del gráfico
ggplot(df_long, aes(x = Inspeccion, y = Probabilidad, 
                    color = Proveedor, group = Proveedor)) +
  
  geom_line(linewidth = 1.2) +   # Líneas que muestran la evolución
  
  geom_point(size = 3.5) +       # Puntos en cada etapa
  
  # Etiquetas con porcentajes
  geom_label(aes(label = paste0(round(Probabilidad * 100, 1), "%")),
             size = 3, show.legend = FALSE) +
  
  # Colores personalizados por proveedor
  scale_color_manual(values = c(A="#3a7fbd", B="#d97706", C="#b0305a")) +
  
  # Formato del eje Y en porcentaje (0% a 100%)
  scale_y_continuous(labels = function(x) paste0(round(x*100,0),"%"), limits=c(0,1)) +
  
  # Títulos del gráfico
  labs(title = "ActualizaciOn Secuencial Bayesiana — Control de Calidad",
       subtitle = "La posterior de cada inspeccion es el prior de la siguiente",
       y = "P(Proveedor | Evidencia acumulada)") +
  
  # Tema visual limpio
  theme_minimal()