Ronda de Penales - Simulación Monte Carlo


Ronda de Penales

En esta sección, simularemos una ronda de penales entre Brasil y Chile.

penales
penales

Definición de la situación

Para realizar la simulación, consideramos dos casos:

1. Si no hay empate en los primeros cinco tiros:

  • Goles Brasil = variable binomial(n=5, p=0.8)

  • Goles Chile = variable binomial(n=5, p=0.75)

2. Si hay empate en los primeros cinco tiros:

  • Goles Brasil = variable binomial(n=5, p=0.8) + variable bernoulli(p=0.5)

  • Goles Chile = variable binomial(n=5, p=0.75) + variable bernoulli(p=0.5)

Luego, determinamos el ganador:

  • Si Goles Brasil > Goles Chile \(\to\) Gana Brasil

  • Si Goles Brasil < Goles Chile \(\to\) Gana Chile


Simulación Monte Carlo

En esta sección, definimos la función para realizar una simulación de una ronda de penales. La función ronda_penales realiza los lanzamientos y determina el ganador según las reglas establecidas.

library("tidyverse")
library("knitr")

p_chile  = 0.75
p_brasil = 0.8

ronda_penales <- function() {
  goles_chile  <- rbinom(1, size=5, prob=p_chile)
  goles_brasil <- rbinom(1, size=5, prob=p_brasil)
  
  # Si los dos equipos están empatados después de los primeros cinco tiros, 
  # pasan gol de oro
  while (goles_chile == goles_brasil) {
    goles_chile  <- goles_chile  + rbinom(1, size=1, prob=0.5)
    goles_brasil <- goles_brasil + rbinom(1, size=1, prob=0.5)
  }
  
  return(c(chile = goles_chile, brasil = goles_brasil))
}

Ejecución de la simulación

En esta parte, ejecutamos la simulación para una ronda de penales y mostramos el resultado. Dependiendo del resultado, se incluirá una imagen correspondiente al país ganador.

resultados <- t(replicate(n=1, ronda_penales())) %>% as_tibble() %>%
  mutate(gana = if_else(chile > brasil, "Chile", "Brasil"))

if (resultados$gana[1] == "Chile") {
  print(resultados)
  include_graphics("/Users/Mauricio/Library/Mobile Documents/com~apple~CloudDocs/Teaching/ISUC/2023_2_data_analysis2/repo/slides/class_3/chile.jpg")
} else {
  print(resultados)
  include_graphics("/Users/Mauricio/Library/Mobile Documents/com~apple~CloudDocs/Teaching/ISUC/2023_2_data_analysis2/repo/slides/class_3/brasil.jpg")
}
## # A tibble: 1 × 3
##   chile brasil gana  
##   <int>  <int> <chr> 
## 1     3      5 Brasil

Multiverso

En esta sección realizamos la situación hipotética de jugar el partido 10,000 veces bajo las mismas circunstancias. Es decir, ejecutamos la simulación 10,000 veces para obtener una estimación de la probabilidad de que cada equipo gane.

resultados_multiverso <- t(replicate(n=10000, ronda_penales())) %>% as_tibble() %>%
  mutate(gana = if_else(chile > brasil, "Chile", "Brasil"))

knitr::kable(prop.table(table(resultados_multiverso$gana)), col.names = c("País", "Probabilidad de Ganar"))
País Probabilidad de Ganar
Brasil 0.5715
Chile 0.4285