CASO REAL 3 — ÁRBOL BAYESIANO INTEGRADO TechParts — Árbol Completo con Consultora (Bayes + Árbol) El caso más completo: la empresa primero decide si contratar la consultora, luego observa el dictamen y aplica Bayes, luego elige la planta. Es un árbol de 2 etapas de decisión con información imperfecta.
library(ggplot2); library(tidyr); library(dplyr)
## Warning: package 'ggplot2' was built under R version 4.5.2
## Warning: package 'dplyr' was built under R version 4.5.2
##
## Adjuntando el paquete: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
# ---- Datos ----
pagos <- matrix(c(
-200000, 100000, 500000,
-50000, 200000, 300000,
100000, 150000, 180000
), nrow=3, byrow=TRUE)
rownames(pagos) <- c("Grande","Mediana","Pequeña")
prior <- c(0.20, 0.45, 0.35)
likel_F <- c(0.10, 0.40, 0.90)
likel_D <- 1 - likel_F
# ---- Bayes ----
actualizar <- function(prior, likel) {
conj <- prior*likel
list(post=conj/sum(conj), P_E=sum(conj))
}
bF <- actualizar(prior, likel_F)
bD <- actualizar(prior, likel_D)
# ---- VME por escenario ----
vme_all <- function(p) {
v <- pagos %*% p
list(vme=as.vector(v), mejor=rownames(pagos)[which.max(v)],
max_vme=max(v))
}
r_prior <- vme_all(prior)
r_F <- vme_all(bF$post)
r_D <- vme_all(bD$post)
vme_con_info <- bF$P_E*r_F$max_vme + bD$P_E*r_D$max_vme
veii <- vme_con_info - r_prior$max_vme
cat("===== ÁRBOL BAYESIANO — TECHPARTS =====\n")
## ===== ÁRBOL BAYESIANO — TECHPARTS =====
cat(sprintf("Sin consultora → %s: $%s\n",
r_prior$mejor, format(round(r_prior$max_vme), big.mark=",")))
## Sin consultora → Mediana: $185,000
cat(sprintf("Si Favorable → %s: $%s\n",
r_F$mejor, format(round(r_F$max_vme), big.mark=",")))
## Si Favorable → Grande: $333,010
cat(sprintf("Si Desfavor. → %s: $%s\n",
r_D$mejor, format(round(r_D$max_vme), big.mark=",")))
## Si Desfavor. → Pequeña: $133,608
cat(sprintf("VME con info imperfecta: $%s\n",
format(round(vme_con_info), big.mark=",")))
## VME con info imperfecta: $236,300
cat(sprintf("VEII = $%s (máx a pagar por la consultora)\n",
format(round(veii), big.mark=",")))
## VEII = $51,300 (máx a pagar por la consultora)
# ---- Gráfico: VME por alternativa en cada escenario ----
df_vme <- data.frame(
Alternativa = rownames(pagos),
Sin_info = r_prior$vme,
Favorable = r_F$vme,
Desfavorable = r_D$vme
)
df_long <- pivot_longer(df_vme, -Alternativa,
names_to="Escenario", values_to="VME")
df_long$Escenario <- factor(df_long$Escenario,
levels=c("Sin_info","Favorable","Desfavorable"),
labels=c("Sin info","Favorable","Desfavorable"))
ggplot(df_long, aes(x=Alternativa, y=VME/1000, fill=Escenario)) +
geom_col(position="dodge", width=0.65) +
geom_hline(yintercept=0, color="gray50") +
geom_text(aes(label=paste0("$",round(VME/1000),"k"),
y=VME/1000+ifelse(VME>0,7,-15)),
position=position_dodge(0.65), size=2.8, fontface="bold") +
scale_fill_manual(values=c("Sin info"="#3a7fbd",
Favorable="#0f7a52",
Desfavorable="#b0305a")) +
labs(title="VME por Alternativa según Escenario de Información — TechParts",
subtitle="La información bayesiana cambia cuál alternativa es óptima",
x="Alternativa", y="VME (miles $)", fill="Escenario") +
theme_minimal() + theme(legend.position="top")
# Tabla resumen
resumen <- data.frame(
Escenario = c("Sin información", "Favorable", "Desfavorable", "Con información"),
Alternativa_Optima = c(r_prior$mejor, r_F$mejor, r_D$mejor, "Condicional"),
VME = c(
round(r_prior$max_vme), round(r_F$max_vme),
round(r_D$max_vme), round(vme_con_info)
)
)
resumen$VEII <- c(0, "-", "-", round(veii))
knitr::kable(resumen, col.names = c("Escenario", "Óptima", "VME ($)", "VEII ($)"),
digits = 0, format.args = list(big.mark = ","))
| Escenario | Óptima | VME (\()|VEII (\)) | |
|---|---|---|---|
| Sin información | Mediana | 185,000 | 0 |
| Favorable | Grande | 333,010 | - |
| Desfavorable | Pequeña | 133,608 | - |
| Con información | Condicional | 236,300 | 51300 |
resumen
## Escenario Alternativa_Optima VME VEII
## 1 Sin información Mediana 185000 0
## 2 Favorable Grande 333010 -
## 3 Desfavorable Pequeña 133608 -
## 4 Con información Condicional 236300 51300
La decisión estratégica es la de CONTRATAR LA CONSULTORA ya que VEII > costo típico de consultoría de mercado.
# 1. Definir coordenadas de los nodos (X, Y) y etiquetas
tree_data <- data.frame(
x = c(0, 1, 1, 2, 2, 3, 3, 3, 3, 3, 3),
y = c(0, 1, -1, 2, 0, 2.5, 2, 1.5, 0.5, 0, -0.5),
label = c("Inicio", "Sin Consultora", "Con Consultora",
"Favorable", "Desfavorable",
"Grande", "Mediana", "Pequeña",
"Grande", "Mediana", "Pequeña"),
vme = c("",
paste0("$", round(r_prior$max_vme/1000), "k"),
paste0("$", round(vme_con_info/1000), "k"),
paste0("P=", round(bF$P_E, 2)),
paste0("P=", round(bD$P_E, 2)),
"", "", "", "", "", ""),
tipo = c("Raíz", "Decisión", "Azar", "Azar", "Azar",
"Final", "Final", "Final", "Final", "Final", "Final")
)
# 2. Definir las conexiones (ramas)
edges <- data.frame(
x = c(0, 0, 1, 1, 2, 2, 2, 2, 2, 2),
y = c(0, 0, 1, -1, 2, 2, 2, 0, 0, 0),
xend = c(1, 1, 2, 2, 3, 3, 3, 3, 3, 3),
yend = c(1, -1, 2, 0, 2.5, 2, 1.5, 0.5, 0, -0.5)
)
# 3. Dibujar el árbol
ggplot() +
# Ramas
geom_segment(data=edges, aes(x=x, y=y, xend=xend, yend=yend),
color="gray70", linewidth=1) +
# Nodos
geom_point(data=tree_data, aes(x=x, y=y, color=tipo), size=8) +
# Etiquetas de Nodos
geom_text(data=tree_data, aes(x=x, y=y, label=label),
vjust=-1.5, size=3.5, fontface="bold") +
# Valores VME o Probabilidades
geom_text(data=tree_data, aes(x=x, y=y, label=vme),
vjust=2.5, size=3, color="darkblue") +
# Personalización estética
scale_color_manual(values=c("Raíz"="#333333", "Decisión"="#3a7fbd",
"Azar"="#d97706", "Final"="#0f7a52")) +
xlim(-0.2, 3.5) + ylim(-1.5, 3) +
labs(title="Estructura del Árbol de Decisión Bayesiano",
subtitle="TechParts S.A. — De la consulta a la elección de capacidad",
caption=paste("VEII calculado:", format(round(veii), big.mark=","))) +
theme_void() +
theme(legend.position="none", plot.margin=margin(20,20,20,20))
INTERPRETACION Este árbol de decisión representa una estrategia de
inversión donde, antes de comprometer capital en la construcción de una
planta, evaluamos si contratar una consultoría externa para reducir la
incertidumbre del mercado. Al comparar los resultados, el modelo
demuestra que la información proporcionada por el estudio (enfoque
Bayesiano) permite ajustar el tamaño de la planta —grande, mediana o
pequeña— según el reporte obtenido, lo cual maximiza el valor esperado y
minimiza riesgos financieros al evitar decisiones costosas en escenarios
desfavorables. En última instancia, la diferencia entre ambos caminos
indica el beneficio económico de la información, permitiéndote
determinar cuánto es lo máximo que deberías pagar por dicho estudio
antes de decidir si es preferible actuar basándote únicamente en tus
probabilidades iniciales.