Antoine Gombaud, conocido como el Caballero de Méré.
El Caballero de Méré fue un filósofo y escritor que vivió durante el reinado de Luis XIV. En primer lugar (Modo de Juego 1), propuso lanzar un dado cuatro veces consecutivas (n = 4) y apostar que saldría por lo menos un seis (“6”) en alguno de los 4 lanzamientos. Si el seis no saliese, entonces el oponente ganaría el juego.
En el segundo juego (Modo de Juego 2), de Méré propone lanzar dos dados 24 veces (n = 24) y apostar que la pareja de seis (“6”,”6”) aparecería por lo menos una vez en los 24 lanzamientos. Si la combinación (“6”,”6”) no aparece, el oponente ganará el juego.
Estos dos juegos son llamados los problemas de Méré. De Méré acudió a su amigo Blaise Pascal (1623-1662) y le planteó calcular la probabilidad de ganar en estos juegos. Acudiendo a sus habilidades matemáticas, Pascal sugirió que la probabilidad de ganar del anfitrión se puede calcular con la siguiente expresión:
P (𝐺𝑎𝑛𝑎𝑟 𝐴𝑛𝑓𝑖𝑡𝑟𝑖𝑜𝑛) = 1 − (1 − 𝑝) ^ n
Con:
p = 1/6 para el Modo de Juego 1 y
p = 1/36 para el Modo de Juego 2.
Blaise Pascal.
Verificar la exactitud del cálculo de Pascal a través de un ejercicio de simulación.
Construir las respectivas funciones en R, que reproduzcan a través de simulación la relación que existe entre P: la probabilidad de ganar del Anfitrión (Eje Y) y n: el número de lanzamientos que se permite realizar al jugador (Eje X).
juego.simple <- function(n) {
lanzamientos <- sample(1:6, n, replace = TRUE) # Se simulan n lanzamientos de un dado
exito <- any(lanzamientos == 6) # Se Verifica si hay al menos un seis en los lanzamientos
return(exito) # Se obtiene TRUE si hay al menos un seis, FALSE para los demás resultados
}
prob.ganar <- function(n=20, I=5000) {
resultados <- sapply(1:I, function(x) juego.simple(n)) # Se simula el juego.simple I veces y los resultados se almacenan en un vector
probabilidad_ganar <- mean(resultados) # Se determina la proporción de veces que se ganó el juego (cuando al menos apareció un seis)
return(probabilidad_ganar) # Se obtiene la probabilidad de ganar
}
prob.mere <- function(n=20) { # Probabilidad Calculada por Pascal
resultados.mere <- sapply(1:n, function (x) 1-(1-(1/6))^(n)) # Se calcula la probabilidad de ganar en n lanzamientos de un dado
prob_ganar.mere <- mean(resultados.mere) # Se obtiene la probabilidad promedio
return(prob_ganar.mere) # Se obtiene la probabilidad de ganar según la estimación de Pascal
}
plot(sapply(2:20,prob.ganar),xlab="n: Número de Lanzamientos", ylab="P : Probabilidad de Ganar",
type="p", lty=2, pch=8, cex=0.5, col="blue", main="Juego del Caballero de Meré - Modo 1",
ylim=c(0,1), xlim=c(0,20))
lines(sapply(2:20,prob.mere), col = "red")
legend("bottomright", legend = c("Puntos Simulados", "Curva de Pascal"), col = c("blue", "red"), pch = c(8,NA), lty = 1, cex = 0.8)
juego.simple2 <- function(n) {
lanzamientos2 <- matrix(sample(1:6, 2 * n, replace = TRUE), ncol = 2) # Se simulan n lanzamientos de dos dados
exito2 <- any(lanzamientos2[, 1] == 6 & lanzamientos2[, 2] == 6) # Se Verifica si hay al menos una pareja de seis en los lanzamientos
return(exito2) # Se obtiene TRUE si hay al menos una pareja un seis, FALSE para los demás resultados
}
prob.ganar2 <- function(n=20, I =5000) {
resultados2 <- sapply(1:I, function(x) juego.simple2(n)) # Se simula el juego.simple2 I veces y los resultados se almacenan en un vector
probabilidad_ganar2 <- mean(resultados2) # Se determina la proporción de veces que se ganó el juego (cuando al menos apareció una pareja de seis)
return(probabilidad_ganar2) # Se obtiene la probabilidad de ganar
}
prob.mere2 <- function(n=20) { # Probabilidad Calculada por Pascal
resultados.mere2 <- sapply(1:n, function (x) 1-(1-(1/36))^(n)) # Se calcula la probabilidad de ganar en n lanzamientos de dos dados
prob_ganar.mere2 <- mean(resultados.mere2) # Se obtiene la probabilidad promedio
return(prob_ganar.mere2) # Se obtiene la probabilidad de ganar según la estimación de Pascal
}
plot(sapply(2:100,prob.ganar2),xlab="n: Número de Lanzamientos", ylab="P : Probabilidad de Ganar",
type="p", lty=2, pch=8, cex=0.5, col="blue", main="Juego del Caballero de Meré - Modo 2",
ylim=c(0,1), xlim=c(0,100))
lines(sapply(2:100,prob.mere2), col = "red")
legend("bottomright", legend = c("Puntos Simulados", "Curva de Pascal"), col = c("blue", "red"), pch = c(8,NA), lty = 1, cex = 0.8)
A través de las simulaciones se pudo comprobar el acierto de Pascal al determinar la expresión de probabilidad para los problemas de Méré.
Un aficionado del futbol está interesado en llenar un album de ocasión especial con las imagenes de los 50 jugadores de su equipo de preferencia y 10 figuras adicionales con las formaciones que han ganado campeonatos. En total son 60 laminas, las cuales se venden en sobres de 5 unidades por un costo de $5000. El aficionado está interesado en obtener una estimación del costo de llenar el album.
Para estudiar el costo, se debe generar en R una rutina de programación que genere y visualice la función de probabilidad del costo de llenado de album.
llenar_album <- function() {
album <- rep(0, 60) # Se crea un vector para representar el álbum que inicialmente está sin llenar
sobres_comprados <- 0 # Contador de sobres comprados
while(sum(album == 0) > 0) { # Mientras haya espacios de láminas sin llenar en el álbum
sobres <- sample(1:60, 5) # Obtener 5 láminas aleatorias (comprando otro sobre)
for (i in sobres) {
if (album[i] == 0) { # Si la lámina no está en el álbum
album[i] <- 1 # Llenar la lámina en el álbum
}
}
sobres_comprados <- sobres_comprados + 1 # Aumentar en 1, el contador de sobres comprados
}
return(sobres_comprados) # Devolver el número de sobres comprados
}
# Se calcula el costo de cada simulación de llenado del álbum, en 10000 ensayos
costo <- replicate(10000, llenar_album()) * 5000
# Se calculan los percentiles, el costo medio, la mediana del costo, la desviación estándar, el CV, la asimetría y la curtosis
percentil_5 <- quantile(costo, 0.05)
percentil_95 <- quantile(costo, 0.95)
costo_medio <- mean(costo)
costo_mediana <- median(costo)
desviacion_estandar <- sd(costo)
coeficiente_variacion <- desviacion_estandar / costo_medio
asimetria <- skewness(costo)
curtosis <- kurtosis(costo)
# Se calcula el monto necesario a reservar para asegurar el llenado del album con un 95% de probabilidad
monto_reserva <- quantile(costo, 0.05)
Se incluye el código.
# Se crea el histograma de frecuencias
hist(costo, breaks = 30, col = "skyblue", main = "Distribución del Costo de Llenado del Álbum", xlab = "Costo", ylab = "Frecuencia")
# Se agregan las líneas de referencia verticales
abline(v = percentil_5, col = "red", lty = 2, lwd = 2) # Línea para el percentil 5%
abline(v = percentil_95, col = "blue", lty = 2, lwd = 2) # Línea para el percentil 95%
abline(v = costo_medio, col = "green", lty = 2, lwd = 2) # Línea para el costo medio
legend("topright", legend = c("Percentil 5%", "Percentil 95%", "Costo Medio"), col = c("red", "blue", "green"), lty = 2, lwd = 2)
Se incluye el código.
# Para crear la tabla de los valores calculados
resumen=c(percentil_5, percentil_95, costo_medio, costo_mediana,desviacion_estandar, coeficiente_variacion, asimetria,curtosis, monto_reserva )
names(resumen)=c("Percentil 5%","Percentil 95%","Media Costo","Mediana Costo", "Desv. Estándar", "Coef. de Variación", "Asimetría", "Curtosis", "Monto Reserva(95% Prob.)" )
round(resumen,2)
## Percentil 5% Percentil 95% Media Costo
## 180000.00 410000.00 272733.50
## Mediana Costo Desv. Estándar Coef. de Variación
## 260000.00 72750.77 0.27
## Asimetría Curtosis Monto Reserva(95% Prob.)
## 1.27 3.16 180000.00