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