library(data.tree)
library(DiagrammeR)
library(knitr)
library(flextable)

Ejercicio 1.

En cierta región del país se sabe por experiencia que la probabilidad de seleccionar un adulto mayor de 40 años de edad con cáncer es 0.05. Si la probabilidad de que un doctor diagnostique de forma correcta que una persona con cáncer tiene la enfermedad es 0.78, y la probabilidad de que diagnostique de forma incorrecta que una persona sin cáncer tiene la enfermedad es 0.06, ¿cuál es la probabilidad de que a un adulto mayor de 40 años se le diagnostique cáncer?

p.AC <- 0.05 # adulto tenga cancer
p.DCC <- 0.78 # diagnostico cancer correcto
p.DINC <-0.06 # prob de diagnostico incorrecto
p.NC <- 1-p.AC # prob no cancer


p.ADC <- p.AC*p.DCC
p.ANC <- p.NC*p.DINC
p.T <-p.ADC+p.ANC

df.cancer <- data.frame(
  "Diagnóstico" = c("Positivo (D)", "TOTAL"),
  "Con Cáncer (C)" = c(p.ADC,p.AC),
  "Sin Cáncer (Nc)" = c(p.ANC,p.NC),
  "TOTAL" = c(p.T, 1) # La suma de los totales debe ser 1
)

flextable(df.cancer)

Diagnóstico

Con.Cáncer..C.

Sin.Cáncer..Nc.

TOTAL

Positivo (D)

0.039

0.057

0.096

TOTAL

0.050

0.950

1.000

library(DiagrammeR)
grViz("
digraph arbol_cancer {
  # Definición de Nodos
  node [shape=rectangle, style=unfilled, color=blue]

  

  adulto -> C_rama [label='P(Cáncer) = 0.05'] # P.AC
  adulto -> NC_rama [label='P(No Cáncer) '] # P.NC


  C_rama -> D_final_C [label='P(|C) = 0.78'] # P.DCC
 

  NC_rama -> D_final_NC [label='P(|Nc) = 0.06'] # P.DINC


  
  C_rama [label='cancer']
  NC_rama [label='Sin Cáncer']
  
  D_final_C [label='Diagnóstico correcto']
  
  
  D_final_NC [label='Diagnóstico incorrecto']

}
")

Ejercicio 2

Una cadena de tiendas de pintura produce y vende pintura de látex y semiesmaltada. De acuerdo con las ventas a largo plazo, la probabilidad de que un cliente compre pintura de látex es 0.75. De los que compran pintura de látex, 60 % también compra rodillos. Sin embargo, sólo 30 % de los que compran pintura semiesmaltada compra rodillos. Un comprador que se selecciona al azar adquiere un rodillo y una lata de pintura. ¿Cuál es la probabilidad de que sea pintura de látex?

fórmula de Bayes:

\[\small P(L|R) = \frac{P(R|L)P(L)}{P(R)}\]Donde \(\small P(R)\) se calcula usando la Ley de Probabilidad Total:\[\small P(R) = P(R|L)P(L) + P(R|S)P(S)\]

library(flextable)

# L: Compra Pintura de Látex
# S: Compra Pintura Semiesmaltada 
# R: Compra Rodillo

P.L <- 0.75# Probabilidad a priori de comprar látex
P.S <- 1 - P.L # Probabilidad a priori de comprar semiesmaltada,
P.R_dado_L <- 0.60# Probabilidad de comprar rodillo dado Látex, P(R|L)
P.R_dado_S <- 0.30# Probabilidad de comprar rodillo dado Semiesmaltada, P(R|S)

# Cálculo de Probabilidades Conjuntas y Total P(R)
P.R_y_L <- P.R_dado_L * P.L  
P.R_y_S <- P.R_dado_S * P.S  
P.R_total <- P.R_y_L + P.R_y_S 

# Aplicación del Teorema de Bayes (P(L|R))
P.L_dado_R <- P.R_y_L / P.R_total 

df.bayes <- data.frame(
  "Pintura" = c("Látex (L)", "Semiesmaltada (S)", "TOTAL", "P(L|R)"),
  "P.Pintura" = c(P.L, P.S, P.L + P.S, NA),
  "P.(Rdado pintura" = c(P.R_dado_L, P.R_dado_S, NA, NA),
  "P_R_y_Pintura" = c(P.R_y_L, P.R_y_S, P.R_total, P.L_dado_R)
)

flextable(df.bayes)

Pintura

P.Pintura

P..Rdado.pintura

P_R_y_Pintura

Látex (L)

0.75

0.6

0.4500000

Semiesmaltada (S)

0.25

0.3

0.0750000

TOTAL

1.00

0.5250000

P(L|R)

0.8571429

La probabilidad de que la pintura sea látex, dado que se compró un rodillo es 0.8571.

library(DiagrammeR) 
grViz("
digraph arbol_pintura_sencillo {
  node [shape=rectangle, style=unfilled, color=blue]
  
  cliente -> L_rama [label='Látex ']
  cliente -> S_rama [label='Semiesmaltada ']

  # Desde 'Látex' (L)
  L_rama -> R_final_L [label='Rodillo ']
  L_rama -> NR_final_L [label='No Rodillo ']

  # Desde 'Semiesmaltada' (S)
  S_rama -> R_final_S [label='Rodillo ']
  S_rama -> NR_final_S [label='No Rodillo ']

  cliente [label='Cliente']
  
  L_rama [label='Pintura Látex']
  S_rama [label='Pintura Semiesmaltada']
  R_final_L [label='Látex y Rodillo']
  NR_final_L [label='Látex y No Rodillo']
  R_final_S [label='Semiesmaltada y Rodillo']
  NR_final_S [label='Semiesmaltada y No Rodillo']}")

Ejercicio 3

Una empresa industrial grande usa tres moteles locales para ofrecer hospedaje nocturno a sus clientes. Se sabe por experiencia que a 20% de los clientes se le asigna habitaciones en el Ramada Inn, a 50% en el Sheraton y a 30% en el Lakeview Motor Lodge. Si hay una falla en la plomería en 5% de las habitaciones del Ramada Inn, en 4% de las habitaciones del Sheraton y en 8% de las habitaciones del Lakeview Motor Lodge, ¿cuál es la probabilidad de que (a) a un cliente se le asigne una habitación en la que falle la plomería? (b) a una persona que ocupa una habitación en la que falla la plomería se le haya hospedado en el Lakeview Motor Lodge?

library(data.tree)
library(DiagrammeR)

# Probabilidades base
P_Ramada <- 0.2; P_Sheraton <- 0.5; P_Lakeview <- 0.3
P_F_given_Ramada <- 0.05; P_F_given_Sheraton <- 0.04; P_F_given_Lakeview <- 0.08

P_F <- P_Ramada * P_F_given_Ramada +
       P_Sheraton * P_F_given_Sheraton +
       P_Lakeview * P_F_given_Lakeview

cat("Probabilidad de falla de plomería:", round(P_F, 3), "\n")
## Probabilidad de falla de plomería: 0.054
P_Lakeview_given_F <- (P_F_given_Lakeview * P_Lakeview) / P_F
cat("P(Lakeview | falla) =", round(P_Lakeview_given_F, 3), "\n")
## P(Lakeview | falla) = 0.444
df_hoteles <- data.frame(
  Hotel = c("Ramada","Sheraton","Lakeview","TOTAL"),
  P_Hotel = c(P_Ramada,P_Sheraton,P_Lakeview,1),
  P_Falla_given_Hotel = c(P_F_given_Ramada,P_F_given_Sheraton,P_F_given_Lakeview,NA),
  P_Hotel_y_Falla = c(P_Ramada*P_F_given_Ramada,
                      P_Sheraton*P_F_given_Sheraton,
                      P_Lakeview*P_F_given_Lakeview,
                      P_F)
)
flextable(df_hoteles)

Hotel

P_Hotel

P_Falla_given_Hotel

P_Hotel_y_Falla

Ramada

0.2

0.05

0.010

Sheraton

0.5

0.04

0.020

Lakeview

0.3

0.08

0.024

TOTAL

1.0

0.054

hotel_tree <- Node$new("Cliente")
ramada <- hotel_tree$AddChild("Ramada (0.2)")
ramada$AddChild("Falla (0.05)")
ramada$AddChild("Sin falla (0.95)")
sheraton <- hotel_tree$AddChild("Sheraton (0.5)")
sheraton$AddChild("Falla (0.04)")
sheraton$AddChild("Sin falla (0.96)")
lakeview <- hotel_tree$AddChild("Lakeview (0.3)")
lakeview$AddChild("Falla (0.08)")
lakeview$AddChild("Sin falla (0.92)")

ToDiagrammeRGraph(hotel_tree) %>% render_graph()

Ejercicio 4

La probabilidad de que un hombre casado vea cierto programa de televisión es 0.4 y la probabilidad de que lo vea una mujer casada es 0.5. La probabilidad probabilidad de que un hombre vea el programa, dado que su esposa lo ve, es 0.7. Calcule la probabilidad de que (a) una pareja casada vea el programa (b) una esposa vea el programa dado que su esposo lo ve (c) al menos uno de los miembros de la pareja casada vea el programa.

# Datos base
P_H <- 0.4   # Hombre ve el programa
P_M <- 0.5   # Mujer ve el programa
P_H_given_M <- 0.7  # Hombre ve el programa dado que su esposa lo ve

# (a) Probabilidad de que ambos lo vean
P_H_and_M <- P_H_given_M * P_M
cat("(a) Probabilidad de que ambos vean el programa =", round(P_H_and_M, 3), "\n")
## (a) Probabilidad de que ambos vean el programa = 0.35
# (b) Probabilidad de que la esposa lo vea dado que el esposo lo ve
P_M_given_H <- P_H_and_M / P_H
cat("(b) Probabilidad de que la esposa lo vea dado que el esposo lo ve =", round(P_M_given_H, 3), "\n")
## (b) Probabilidad de que la esposa lo vea dado que el esposo lo ve = 0.875
# (c) Probabilidad de que al menos uno vea el programa
P_H_or_M <- P_H + P_M - P_H_and_M
cat("(c) Probabilidad de que al menos uno vea el programa =", round(P_H_or_M, 3), "\n")
## (c) Probabilidad de que al menos uno vea el programa = 0.55
# Tabla resumen
df_pareja <- data.frame(
  Evento = c("Hombre (H)", "Mujer (M)", "Ambos (H∩M)", "Al menos uno (H∪M)"),
  Probabilidad = c(P_H, P_M, P_H_and_M, P_H_or_M)
)

library(flextable)
flextable(df_pareja)

Evento

Probabilidad

Hombre (H)

0.40

Mujer (M)

0.50

Ambos (H∩M)

0.35

Al menos uno (H∪M)

0.55

# Diagrama de árbol (para visualizar dependencias)
library(DiagrammeR)

grViz("
digraph arbol_pareja {
  node [shape=rectangle, style=unfilled, color=blue]

  pareja [label='Pareja casada']
  pareja -> mujer [label='P(M)=0.5']
  pareja -> no_mujer [label='P(no M)=0.5']

  mujer -> hombre_m [label='P(H|M)=0.7']
  mujer -> no_hombre_m [label='P(no H|M)=0.3']

  no_mujer -> hombre_nm [label='P(H|no M)=?']
  no_mujer -> no_hombre_nm [label='P(no H|no M)=?']

  mujer [label='Esposa ve el programa']
  no_mujer [label='Esposa no lo ve']
  hombre_m [label='Ambos ven el programa (0.35)']
  no_hombre_m [label='Solo esposa ve el programa']
  hombre_nm [label='Solo esposo ve el programa']
  no_hombre_nm [label='Ninguno ve el programa']
}
")