2 Probabilidad Condicional
2.1 Problema de los dos hijos
Muestras aleatorias
set.seed(42)
n <- 10^6
hijo1 <- sample(c("niño", "niña"), n, replace = T)
hijo2 <- sample(c("niño", "niña"), n, replace = T)
Una familia tiene dos hijos. El mayor es niña. ¿Cuál es la probabilidad que ambos hijos sean niñas?
## [1] 0.5007114
Una familia tiene dos hijos. Al menos uno de los hijos es niño. ¿Cuál es la probabilidad que ambos hijos sean niños?
n_b <- sum(hijo1 == "niño" | hijo2 == "niño")
n_ab <- sum(hijo1 == "niño" & hijo2 == "niño")
n_ab / n_b
## [1] 0.333509
Una familia tiene dos hijos. Aleatoreamente, te encuentras con uno de los dos y te das cuenta que es niña. ¿Cuál es la probabilidad que ambos hijos sean niñas?
set.seed(43)
hijo_encontrado <- sample(2, n, replace = T)
genero_encontrado <- ifelse(hijo_encontrado == 1, hijo1, hijo2)
n_b <- sum(genero_encontrado == "niña")
n_ab <- sum(hijo1 == "niña" & hijo2 == "niña")
n_ab / n_b
## [1] 0.5005504
Una familia tiene dos hijos. Encuentra la probabilidad de que ambos hijos sean niñas, dado que al menos uno de los dos es una niña que nació en invierno. Además, asume que nacer cada una de las 4 estaciones tiene la misma probabilidad y que es independiente del género.
set.seed(44)
estaciones <- c("primavera", "verano", "otoño", "invierno")
estacion1 <- sample(estaciones, size = n, replace = T)
estacion2 <- sample(estaciones, size = n, replace = T)
n_b <- sum((hijo1 == "niña" & estacion1 == "invierno") |
(hijo2 == "niña" & estacion2 == "invierno"))
n_ab <- sum((hijo1 == "niña" & hijo2 == "niña") &
(estacion1 == "invierno" | estacion2 == "invierno"))
n_ab / n_b
## [1] 0.4673629
2.2 Ruina del Apostador
Dos apostadores, \(A\) y \(B\), hacen una secuencia de apuestas de 1 sol. En cada apuesta, el apostador \(A\) tiene probabilidad de ganar \(p\) y el apostador \(B\) tiene probabilidad de ganar \(q = 1 - p\). El apostador \(A\) empieza con \(i\) soles y el apostador \(B\) empieza con \(n - i\) soles. El juego temina cuando alguno de los apostadores queda en ruina. ¿Cuál es la probabilidad de que \(A\) pierda el juego?
\[ P(\{\text{A pierde}\}) = \begin{cases} \frac{1 - {\left(\frac{p}{q}\right)}^{N-i}}{1 - {\left(\frac{p}{q}\right)}^{N}} & p \neq 1/2 \\ \frac{N-i}{N} & p = 1/2 \end{cases} \]
n <- 10
i <- 3
p <- 0.5
termina <- replicate(1000, {
while (!(i %in% c(0, n))) {
paso <- 2 * sample(2, 1, prob = c(1 - p, p)) - 3
i <- i + paso
}
i
})
table(termina)
## termina
## 0 10
## 718 282
2.3 Monty Hall
En un show de televisión, un concursante escoge una de tres puertas cerradas, dos de las cuales tienen una cabra y una tiene un carro. El anfitrión conoce donde está el carro, entonces abre una de las puertas restantes (que no es la puerta elegida ni la que contiene el carro) y muestra la cabra. Luego, se le ofrece al concursante la opción de cambiar su elección hacia la otra puerta cerrada. ¿El concursante debería cambiar de puerta?
Jugemos el juego interactivamente llamando a la función monty()
.
monty <- function() {
puertas <- 1:3
# Se escoge aleatoriamente la puerta del carro
puerta_carro <- sample(1:3, 1)
# Pedimos escoger una puerta al jugador (respuesta debe ser 1, 2 o 3)
print("El anfitrión dice ‘¡escoge una puerta!’")
puerta_elegida <- scan(what = integer(), nlines = 1, quiet = TRUE)
# El anfitrión retira una puerta (ni la puerta escogida ni la del carro)
if (puerta_elegida != puerta_carro) {
puerta_retirada <- puertas[-c(puerta_elegida, puerta_carro)]
} else {
puerta_retirada <- sample(puertas[-puerta_elegida], 1)
}
print(paste("El anfitrión abre la puerta ", puerta_retirada,
" y muestra una cabra!", sep = ""))
otra_puerta <- puertas[-c(puerta_elegida, puerta_retirada)]
print(paste("Quieres cambiar de puerta a la puerta", otra_puerta, " (s/n)?"))
reply <- scan(what = character(), nlines = 1, quiet = TRUE)
# Actua en caso se responsa "si"
if (substr(reply, 1, 1) == "s") {
puerta_elegida <- puertas[-c(puerta_elegida, puerta_retirada)]
}
# Imprimir el resultado del juego
if (puerta_elegida == puerta_carro) print("Ganaste! :D")
else print("Perdiste! :(")
}
Ahora simulemos el juego
set.seed(42)
n <- 10^5
k <- 3
puertas <- 1:k
puerta_carro <- sample(k, n, replace = T)
puerta_elegida <- sample(k, n, replace = T)
retirar <- function(puerta_elegida, puerta_carro) {
x <- puertas[-c(puerta_elegida, puerta_carro)]
index <- sample.int(length(x), 1)
x[index]
}
puerta_retirada <- mapply(retirar, puerta_elegida, puerta_carro)
Si decido mantener la puerta
mean(puerta_elegida == puerta_carro)
## [1] 0.33302
Si decido cambiar de puerta
cambiar <- function(puerta_elegida, puerta_retirada) {
x <- puertas[-c(puerta_elegida, puerta_retirada)]
index <- sample.int(length(x), 1)
x[index]
}
puerta_elegida <- mapply(cambiar, puerta_elegida, puerta_retirada)
mean(puerta_elegida == puerta_carro)
## [1] 0.66698