En este caso se analiza un problema de control de calidad con
múltiples proveedores, aplicando actualización secuencial
Bayesiana.
Se modela cómo cambia la probabilidad de que una pieza defectuosa
provenga de cada proveedor tras observar sucesivas inspecciones.
Contexto:
- Hay tres proveedores con probabilidades iniciales diferentes.
- Cada proveedor tiene distinta tasa de defectos.
- Se inspeccionan varias piezas de manera secuencial y se actualiza la
información después de cada observación.
# Función para calcular posterior Bayesiana
library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.5.2
bayes_tabla <- function(prior, likel, estados) {
# Probabilidad conjunta P(E ∩ S)
conjunta <- prior * likel
# Probabilidad marginal de la evidencia P(E)
P_E <- sum(conjunta)
# Posterior: P(S | E)
posterior <- conjunta / P_E
# Tabla completa con todos los pasos
df <- data.frame(
Estado = estados,
Prior = round(prior, 4),
Likel = round(likel, 4),
Conjunta = round(conjunta, 4),
Posterior = round(posterior, 4)
)
list(tabla = df, posterior = posterior, P_E = P_E)
}
Interpretación:
prior representa la probabilidad inicial de que una pieza provenga de cada proveedor antes de inspección. likel es la probabilidad de observar la evidencia dada cada fuente (defecto o conforme). posterior es la actualización de las probabilidades considerando la evidencia observada. La función permite aplicar el Teorema de Bayes secuencialmente.
# Estados: Proveedores
estados <- c("Proveedor A", "Proveedor B", "Proveedor C")
# Probabilidad inicial de cada proveedor
prior <- c(0.60, 0.30, 0.10)
# Probabilidades condicionales
p_defecto <- c(0.01, 0.04, 0.12) # P(Defecto | Proveedor)
p_conforme <- c(0.99, 0.96, 0.88) # P(Conforme | Proveedor)
data.frame(Estado=estados, Prior=prior, P_Defecto=p_defecto, P_Conforme=p_conforme)
## Estado Prior P_Defecto P_Conforme
## 1 Proveedor A 0.6 0.01 0.99
## 2 Proveedor B 0.3 0.04 0.96
## 3 Proveedor C 0.1 0.12 0.88
Interpretación:
Se establece un prior realista basado en historial de proveedores. p_defecto refleja la calidad individual de cada proveedor. Este escenario permite evaluar cómo la información acumulada modifica la probabilidad de origen de las piezas.
#Primera inspección: pieza defectuosa
res1 <- bayes_tabla(prior, p_defecto, estados)
res1$tabla
## 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
Interpretación:
Después de observar una pieza defectuosa, la probabilidad de que provenga del proveedor C (con mayor tasa de defectos) aumenta. La posterior de cada proveedor ahora refleja la información de la primera evidencia.
#Segunda inspección: otra pieza defectuosa
res2 <- bayes_tabla(res1$posterior, p_defecto, estados)
res2$tabla
## Estado Prior Likel Conjunta Posterior
## 1 Proveedor A 0.2 0.01 0.002 0.0303
## 2 Proveedor B 0.4 0.04 0.016 0.2424
## 3 Proveedor C 0.4 0.12 0.048 0.7273
Interpretación:
La actualización secuencial hace que la probabilidad de proveedor C siga aumentando, mientras la probabilidad de A disminuye. Cada posterior sirve como prior para la siguiente inspección, aplicando Bayes de manera acumulativa.
#Tercera inspección: pieza conforme
res3 <- bayes_tabla(res2$posterior, p_conforme, estados)
res3$tabla
## Estado Prior Likel Conjunta Posterior
## 1 Proveedor A 0.0303 0.99 0.0300 0.0332
## 2 Proveedor B 0.2424 0.96 0.2327 0.2578
## 3 Proveedor C 0.7273 0.88 0.6400 0.7090
Interpretación:
Observar una pieza conforme reduce la probabilidad de que el origen sea C, y aumenta ligeramente la de A y B. La información combinada permite una evaluación más precisa del origen de defectos.
#Visualización de la evolución secuencial
library(tidyr)
# Construcción del dataframe de evolución
evolucion <- data.frame(
Inspeccion = c("Prior", "Def1", "Def2", "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])
)
# Transformar a formato largo para ggplot
df_long <- pivot_longer(evolucion, -Inspeccion,
names_to = "Proveedor", values_to = "Probabilidad")
df_long$Inspeccion <- factor(df_long$Inspeccion,
levels = c("Prior","Def1","Def2","Conf"))
# Gráfico de evolución de probabilidades
ggplot(df_long, aes(x=Inspeccion, 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_y_continuous(labels=function(x) paste0(round(x*100,0),"%")) +
labs(title="Actualización Secuencial Bayesiana — Control de Calidad",
y="P(Proveedor | Evidencia acumulada)",
x="Inspección") +
theme_minimal() +
scale_color_manual(values=c("A"="#3a7fbd", "B"="#d97706", "C"="#b0305a"))
Interpretación:
El gráfico permite visualizar cómo cada inspección modifica la probabilidad de origen de las piezas. Se puede identificar rápidamente qué proveedor es más probable que esté generando defectos, información valiosa para decisiones de control de calidad. Este enfoque es replicable para cualquier cantidad de inspecciones o proveedores.