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

bayes_tabla <- function(prior, likel, estados) {
  conjunta  <- prior * likel
  P_E       <- sum(conjunta)
  posterior <- conjunta / P_E
  df <- data.frame(
    Estado    = estados,
    Prior     = round(prior,      4),
    Likel     = round(likel,      4),
    Conjunta  = round(conjunta,   4),
    P_E       = round(P_E,        4),
    Posterior = round(posterior,  4)
  )
  list(tabla = df, posterior = posterior, P_E = P_E)
}

Toma como entrada las probabilidades iniciales (prior), la verosimilitud (likel) y los estados posibles, luego calcula la probabilidad conjunta (multiplicando prior × verosimilitud), obtiene P(E) sumando esas conjuntas (normalización), y finalmente calcula la posterior dividiendo cada conjunta para P(E). Después arma una tabla con todos estos valores redondeados para interpretar mejor los resultados, y devuelve tanto la tabla como las probabilidades posteriores y P(E)

# Datos iniciales
estados  <- c("Proveedor A", "Proveedor B", "Proveedor C")
prior    <- c(0.60, 0.30, 0.10)
p_defecto <- c(0.01, 0.04, 0.12)   # P(Defecto | Proveedor)
p_conforme <- c(0.99, 0.96, 0.88) # P(Conforme | Proveedor)

Se define los proveedores, cuánto aporta cada uno (prior) y sus probabilidades de producir productos defectuosos o conformes, para luego aplicar Bayes y determinar de qué proveedor es más probable que provenga un producto según su estado.

# Inspección 1: pieza DEFECTUOSA
cat("=== INSPECCIÓN 1: DEFECTUOSA ===\n")
## === INSPECCIÓN 1: DEFECTUOSA ===
res1 <- bayes_tabla(prior, p_defecto, estados)
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

Aplica el teorema de Bayes cuando se observa una pieza defectuosa: usa las probabilidades iniciales y las tasas de defecto de cada proveedor para calcular la probabilidad actualizada de que cada proveedor haya sido el origen. Luego muestra una tabla con esos resultados para comparar cuál es más probable dado que la pieza salió defectuosa.

# ACTUALIZACIÓN SECUENCIAL:
# La posterior de hoy es el prior de mañana.
# Inspección 2: segunda pieza DEFECTUOSA
cat("\n=== INSPECCIÓN 2: DEFECTUOSA (prior actualizado) ===\n")
## 
## === INSPECCIÓN 2: DEFECTUOSA (prior actualizado) ===
res2 <- bayes_tabla(res1$posterior, p_defecto, estados)
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: pieza CONFORME
cat("\n=== INSPECCIÓN 3: CONFORME ===\n")
## 
## === INSPECCIÓN 3: CONFORME ===
res3 <- bayes_tabla(res2$posterior, p_conforme, estados)
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 posteriors
library(ggplot2); library(tidyr)
evolución <- data.frame(
  Inspección = c("Prior", "Tras Def1", "Tras Def2", "Tras Conf"),
  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])
)
df_long <- pivot_longer(evolución, -Inspección,
                         names_to = "Proveedor", values_to = "Probabilidad")
df_long$Inspección <- factor(df_long$Inspección,
                               levels = c("Prior","Tras Def1","Tras Def2","Tras Conf"))
ggplot(df_long, aes(x = Inspección, y = Probabilidad, 
                     color = Proveedor, group = Proveedor)) +
  geom_line(linewidth = 1.2) +
  geom_point(size = 3.5) +
  geom_label(aes(label = paste0(round(Probabilidad * 100, 1), "%")),
             size = 3, show.legend = FALSE) +
  scale_color_manual(values = c(A="#3a7fbd", B="#d97706", C="#b0305a")) +
  scale_y_continuous(labels = function(x) paste0(round(x*100,0),"%"), limits=c(0,1)) +
  labs(title = "Actualización Secuencial Bayesiana — Control de Calidad",
       subtitle = "La posterior de cada inspección es el prior de la siguiente",
       y = "P(Proveedor | Evidencia acumulada)") +
  theme_minimal()

Mientras más defectos aparecen, más claro se vuelve que el proveedor C es el responsable, porque tiene la mayor probabilidad de producir defectos.