Simulación Monte Carlo

Experimento: Lanzamos simultáneamente dos monedas: una moneda justa, con una probabilidad de 0.5 de obtener cara, y una moneda cargada, con una probabilidad de 0.9 de obtener cara.

Si los lanzamientos de ambas monedas son realmente independientes, la probabilidad de obtener dos caras debería calcularse como el producto de las probabilidades individuales: \(\mathbb{P}(C_{1}C_{2}) = \mathbb{P}(C_{1}) \times \mathbb{P}(C_{2}) = 0.5 \times 0.9 = 0.45\).

library("tidyverse")

# Establecemos un número de simulaciones
n_simulaciones <- 100000
cat("Número de simulaciones:", n_simulaciones, "\n")
## Número de simulaciones: 1e+05
# Realizamos el lanzamiento de la primera moneda (justa) 1000 veces
coin1 <- rbinom(n_simulaciones, 1, prob = 0.5)
cat("Primeros 10 resultados de la primera moneda (0=Cruz, 1=Cara):", coin1[1:10], "\n")
## Primeros 10 resultados de la primera moneda (0=Cruz, 1=Cara): 0 0 0 0 1 1 1 0 0 1
# Realizamos el lanzamiento de la segunda moneda (cargada) 1000 veces
coin2 <- rbinom(n_simulaciones, 1, prob = 0.9)
cat("Primeros 10 resultados de la segunda moneda (0=Cruz, 1=Cara):", coin2[1:10], "\n")
## Primeros 10 resultados de la segunda moneda (0=Cruz, 1=Cara): 1 0 1 1 1 1 1 1 1 1


Importante: Es importante destacar que ambos eventos son independientes, ya que no hemos establecido ninguna relación entre ellos.


# Combinamos los resultados de ambos lanzamientos en una base de datos
data_coins <- tibble(coin1 = coin1, coin2 = coin2)
cat("Muestra de las primeras filas del dataframe:\n")
## Muestra de las primeras filas del dataframe:
print(data_coins, n = 10)
## # A tibble: 100,000 × 2
##    coin1 coin2
##    <int> <int>
##  1     0     1
##  2     0     0
##  3     0     1
##  4     0     1
##  5     1     1
##  6     1     1
##  7     1     1
##  8     0     1
##  9     0     1
## 10     1     1
## # ℹ 99,990 more rows
# Definimos el evento exitoso: obtener dos Caras (CC)
data_coins <- data_coins %>%
  mutate(cc = if_else(coin1 == 1 & coin2 == 1, "CC", "Otro"))

# Calculamos la probabilidad empírica de obtener dos Caras (CC)
probabilidad_empirica <- prop.table(table(data_coins$cc))
cat("Probabilidades empíricas de los resultados:\n")
## Probabilidades empíricas de los resultados:
print(knitr::kable(probabilidad_empirica, col.names = c("Resultado", "Probabilidad")))
## 
## 
## |Resultado | Probabilidad|
## |:---------|------------:|
## |CC        |      0.45272|
## |Otro      |      0.54728|
## Comparación con la probabilidad teórica
# La probabilidad teórica de obtener dos Caras es 0.45
probabilidad_teorica <- 0.5 * 0.9
cat("La probabilidad teórica de obtener dos Caras es:", probabilidad_teorica, "\n")
## La probabilidad teórica de obtener dos Caras es: 0.45

Comparación entre la probabilidad empírica y teórica de obtener ‘CC’

cat("Probabilidad empírica de obtener 'CC':", probabilidad_empirica["CC"], "\n")
## Probabilidad empírica de obtener 'CC': 0.45272
cat("Probabilidad teórica de obtener 'CC':", probabilidad_teorica, "\n")
## Probabilidad teórica de obtener 'CC': 0.45