## ====================================================
# 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()
