Ejercicio 3.
# ====================================================
# BAYES + VEII — TechParts S.A. (Análisis Completo)
# ====================================================
# Librerías para visualización y manipulación de datos
library(ggplot2); library(dplyr); library(tidyr)
## Warning: package 'dplyr' was built under R version 4.3.3
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
## Warning: package 'tidyr' was built under R version 4.3.3
# ----------------------------------------------------
# MATRIZ DE PAGOS (función de utilidad)
# ----------------------------------------------------
pagos <- matrix(c(
-200000, 100000, 500000,
-50000, 200000, 300000,
100000, 150000, 180000,
50000, 50000, 50000
), nrow=4, byrow=TRUE)
# Filas: alternativas de decisión
rownames(pagos) <- c("Grande","Mediana","Pequeña","NoConstr")
# Columnas: estados de la naturaleza (demanda)
colnames(pagos) <- c("Baja","Media","Alta")
# Interpretación:
# pagos[i,j] = beneficio (o pérdida) de elegir alternativa i
# cuando ocurre el estado j
# ----------------------------------------------------
# PROBABILIDADES Y MODELO BAYESIANO
# ----------------------------------------------------
# Probabilidades a priori (creencias iniciales sobre la demanda)
prior <- c(0.20, 0.45, 0.35)
# Verosimilitudes:
# P(Informe favorable | estado de demanda)
likel_F <- c(0.10, 0.40, 0.90)
# P(Informe desfavorable | estado)
likel_D <- 1 - likel_F
# ----------------------------------------------------
# FUNCIÓN DE ACTUALIZACIÓN BAYESIANA
# ----------------------------------------------------
actualizar <- function(prior, likel) {
# Probabilidad conjunta:
# P(S ∩ E) = P(S) * P(E | S)
conj <- prior * likel
# Probabilidad posterior:
# P(S | E) = P(S ∩ E) / P(E)
# donde P(E) = suma de conjuntas
list(post = conj/sum(conj), P_E = sum(conj))
}
# ----------------------------------------------------
# ACTUALIZACIÓN CON INFORMACIÓN
# ----------------------------------------------------
# Posterior si el informe es favorable
bayes_F <- actualizar(prior, likel_F)
# Posterior si el informe es desfavorable
bayes_D <- actualizar(prior, likel_D)
cat("Posterior si FAVORABLE: ", round(bayes_F$post, 3), "\n")
## Posterior si FAVORABLE: 0.039 0.35 0.612
cat("Posterior si DESFAVORABLE: ", round(bayes_D$post, 3), "\n")
## Posterior si DESFAVORABLE: 0.371 0.557 0.072
# Interpretación:
# Se actualizan las probabilidades de los estados de demanda
# según el resultado del estudio de mercado
# ----------------------------------------------------
# FUNCIÓN DE VALOR MONETARIO ESPERADO (VME)
# ----------------------------------------------------
mejor_vme <- function(prob) {
# VME = Σ (Pago * Probabilidad del estado)
# Implementación matricial: pagos %*% prob
vme <- pagos %*% prob
# Selección de la mejor alternativa:
# criterio de maximización del valor esperado
idx <- which.max(vme)
list(alternativa = rownames(pagos)[idx],
valor = vme[idx],
todos = vme)
}
# ----------------------------------------------------
# DECISIONES BAJO DIFERENTES ESCENARIOS
# ----------------------------------------------------
# Sin información adicional
opt_sin_info <- mejor_vme(prior)
# Con información imperfecta:
# decisión condicionada al resultado del informe
opt_fav <- mejor_vme(bayes_F$post)
opt_desf <- mejor_vme(bayes_D$post)
# ----------------------------------------------------
# VALOR ESPERADO CON INFORMACIÓN IMPERFECTA
# ----------------------------------------------------
# Se ponderan los VME por la probabilidad de cada señal:
# VME = P(Fav)*VME(Fav) + P(Desf)*VME(Desf)
vme_con_info <- bayes_F$P_E * opt_fav$valor +
bayes_D$P_E * opt_desf$valor
# ----------------------------------------------------
# VALOR DE LA INFORMACIÓN
# ----------------------------------------------------
# VECP (Valor Esperado con Información Perfecta)
# Se elige el mejor pago en cada estado
vecp <- sum(apply(pagos, 2, max) * prior)
# VEIP (Valor Esperado de Información Perfecta)
# Ganancia máxima por eliminar incertidumbre completamente
veip <- vecp - opt_sin_info$valor
# VEII (Valor Esperado de Información Imperfecta)
# Beneficio de usar el informe (antes de pagar por él)
veii <- vme_con_info - opt_sin_info$valor
# ----------------------------------------------------
# RESUMEN DECISIONAL
# ----------------------------------------------------
cat("\n===== RESUMEN DECISIONAL =====\n")
##
## ===== RESUMEN DECISIONAL =====
cat(sprintf("Sin info → %s: $%s\n",
opt_sin_info$alternativa,
format(round(opt_sin_info$valor), big.mark=",")))
## Sin info → Mediana: $185,000
cat(sprintf("Si Fav → %s: $%s\n",
opt_fav$alternativa,
format(round(opt_fav$valor), big.mark=",")))
## Si Fav → Grande: $333,010
cat(sprintf("Si Desf → %s: $%s\n",
opt_desf$alternativa,
format(round(opt_desf$valor), big.mark=",")))
## Si Desf → 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("VECP: $%s\n", format(round(vecp), big.mark=",")))
## VECP: $285,000
cat(sprintf("VEIP: $%s\n", format(round(veip), big.mark=",")))
## VEIP: $1e+05
cat(sprintf("VEII: $%s (max a pagar por la consultora)\n",
format(round(veii), big.mark=",")))
## VEII: $51,300 (max a pagar por la consultora)
# Interpretación clave:
# VEII representa el valor económico máximo que se debería pagar
# por el estudio de mercado (información imperfecta)
# ----------------------------------------------------
# VISUALIZACIÓN COMPARATIVA
# ----------------------------------------------------
df_vme <- data.frame(
Escenario = c("Sin info\n(A₂ Mediana)",
"Si Favorable\n(A₁ Grande)",
"Si Desfav.\n(A₃ Pequeña)",
"Con info\n(esperado)",
"Cert. Perfecta\n(VECP)"),
VME = c(opt_sin_info$valor, opt_fav$valor,
opt_desf$valor, vme_con_info, vecp),
Tipo = c("Base","Info","Info","Esperado","Perfecto")
)
df_vme$Escenario <- factor(df_vme$Escenario, levels=df_vme$Escenario)
# ----------------------------------------------------
# GRÁFICO
# ----------------------------------------------------
ggplot(df_vme, aes(x=Escenario, y=VME/1000, fill=Tipo)) +
geom_col(width=0.6, show.legend=FALSE) +
# Barras del VME por escenario
geom_text(aes(label=paste0("$",round(VME/1000,0),"k")),
vjust=-0.4, size=3.8, fontface="bold") +
# Etiquetas monetarias
scale_fill_manual(values=c(Base="#3a7fbd",Info="#d97706",
Esperado="#0f7a52",Perfecto="#b0305a")) +
labs(title="Comparación de VME por Nivel de Información",
subtitle="VEII = VME(con info) − VME(sin info)",
x=NULL, y="VME (miles de $)") +
theme_minimal() +
# Línea base del escenario sin información
annotate("segment", x=1, xend=4,
y=opt_sin_info$valor/1000, yend=opt_sin_info$valor/1000,
linetype="dashed", color="#3a7fbd", linewidth=0.7) +
# Etiqueta del valor de la información
annotate("label", x=2.5, y=opt_sin_info$valor/1000,
label=paste0("VEII = $",round(veii/1000,1),"k"),
fill="#edf2f7", color="#3a7fbd", size=3.5)

# ----------------------------------------------------
# CONCLUSIÓN (Enfoque de decisión)
# ----------------------------------------------------
# 1. Sin información:
# → Se elige la alternativa con mayor VME (criterio racional bajo riesgo)
#
# 2. Con información imperfecta:
# → Se ajustan probabilidades con Bayes
# → Se toman decisiones condicionadas al resultado del informe
#
# 3. Valor de la información:
# → VEII cuantifica el beneficio de reducir incertidumbre
# → Es el máximo precio racional a pagar por el estudio
#
# 4. Jerarquía:
# VECP ≥ VME(con info imperfecta) ≥ VME(sin info)
#
# Este esquema es fundamental en:
# → análisis de decisiones
# → economía
# → ingeniería estadística
# → teoría de utilidad