Introducción

El presente trabajo hace parte del programa de Maestría en Ciencia de Datos de la Pontificia Universidad Javeriana Cali de la asignatura Métodos y Simulación estadística. El documento contiene el desarrollo del problema 1 de la actividad número 2 como evaluación de la temática Probabilidad e Inferencia Estadística.

Problema 1

Estimación del valor de \(\pi\)

La siguiente figura se sugiere como estimar el valor de π con una simulación. En la Figura 1, un círcuito con un área igual a π/4, está inscrito en un cuadrado cuya área es igual a 1. Se elige de forma aleatoria n puntos dentro del cuadrado . La probabilidad de que un punto esté dentro del círculo es igual a la fracción del área del cuadrado que abarca a éste, la cual es π/4. Por tanto, se puede estimar el valor de π/4 al contar el número de puntos dentro del círculo, para obtener la estimación de π/4. De este último resultado se encontrar una aproximación para el valor de π.

# Crear un data frame con las coordenadas del círculo
circle_data <- data.frame(
  x = 0.5,
  y = 0.5,
  r = 0.5  # Radio del círculo (diámetro / 2)
)

# Crear un data frame con puntos aleatorios
set.seed(123)  # Para reproducibilidad
points_data <- data.frame(
  x = runif(1000, 0, 1),
  y = runif(1000, 0, 1)
)

# Crear el gráfico
ggplot() +
  geom_circle(data = circle_data, aes(x0 = x, y0 = y, r = r), color = "#69b7ff", fill = "#69b7ff", alpha = 0.7) +
  geom_point(data = points_data, aes(x = x, y = y), color = "#515bf4") +
  geom_hline(yintercept = 0.5, linetype = "dashed", color = "black") +  # Eje horizontal
  geom_vline(xintercept = 0.5, linetype = "dashed", color = "black") +  # Eje vertical
  coord_fixed() +
  xlim(0, 1) +
  ylim(0, 1) +
  theme_minimal() +  # Cambiar a theme_minimal para mostrar los ejes
  labs(x = "Eje X", y = "Eje Y") +  # Etiquetas para los ejes
  ggtitle("Figura 1. Ejemplo de estimación de π, n = 1.000 puntos aleatorios")

Solución

Para realizar la estimación de \(\pi\) se aplicó el método de Montecarlo, para ello se generaron \(n=100.000\) valores aleatorios \(X\) y \(Y\) siguiendo una distribución uniforme, los cuales se tomaron como coordenadas dentro del plano. Posteriormente se calculó la distancia (\(d\)) de cada una de las coordenadas respecto al centro de la circunferencia aplicando la formula \(d = (X_i-0.5)^2+(Y_i-0.5)^2\).

# Definimos el tamaño de muestra

n <- 100000

# Generamos coordenadas aleatorias para X y Y

x <- runif(n, min = 0, max = 1)
y <- runif(n, min = 0, max = 1)

# Calculamos la distancia desde el centro

d <- (x - 0.5)^2 + (y - 0.5)^2 

Posteriormente comprobamos aquellos puntos que están dentro del área de la circunferencia, lo que implica que la distancia desde el centro de la dircunferencia hasta la ubicación del punto (\(d\)) sea menor o igual que 0.25. Como se observa en la Figura 2, aquellos que cumplen dicha condición se representan en color rojo y aquellos que no la cumplen se representan en color verde.

# Comprobamos que la distancia desde el centro sea menos o igual a 0.25

cond <- ifelse(d <= 0.25, 1, 0)

# Creamos la variable categórica

categoria <- ifelse(cond == 1, "Dentro", "Fuera")

# Creamos el dataframe
dataset_epi <- data.frame(x = x, y = y, d = d, cond = cond, Ubicación = categoria)
# Crear un data frame con las coordenadas del círculo
circle_data <- data.frame(
  x = 0.5,
  y = 0.5,
  r = 0.5  # Radio del círculo (diámetro / 2)
)

# Crear el gráfico
ggplot() +
  geom_point(data = dataset_epi, aes(x = x, y = y, color = Ubicación), size = 0.3) +
  geom_circle(data = circle_data, aes(x0 = x, y0 = y, r = r), color = "gray", fill = "#69b7ff", alpha = 0.4) +
  geom_hline(yintercept = 0.5, linetype = "dashed", color = "black") +  # Eje horizontal
  geom_vline(xintercept = 0.5, linetype = "dashed", color = "black") +  # Eje vertical
  coord_fixed() +
  xlim(0, 1) +
  ylim(0, 1) +
  theme_minimal() +  # Cambiar a theme_minimal para mostrar los ejes
  labs(x = "Eje X", y = "Eje Y") +  # Etiquetas para los ejes
  ggtitle("Figura 2. Estimación de π, n = 100.000 puntos aleatorios")

De los 100.000 puntos de coordenadas aleatorias se obtuvo un total de 78.646 equivalentes a aproximadamente el 79% casos en los que las coordenadas del punto se encontraban dentro del área de la circunferencia como se observa en la Figura 3.

# Contamos la cantidad de puntos dentro de la circunferencia

p_dentro <- sum(cond)


# Calculamos el valor del estimador obtenido

estimador_pi <- (p_dentro/n)*4

print(p_dentro)
[1] 78646
# Suponiendo que dataset_epi es un data frame con las columnas necesarias
# Contar la frecuencia de cada categoría en 'Ubicación'

dataset_counts <- dataset_epi %>%
  count(Ubicación)

# Crear el gráfico de torta con etiquetas de conteo

ggplot(dataset_counts, aes(x = "", y = n, fill = Ubicación)) +
  geom_bar(width = 1, stat = "identity") +
  coord_polar(theta = "y") +
  labs(
    title = "Figura 3. Visualización de conteo de ubicación de puntos",
    fill = "Ubicación"
  ) +
  theme_void() +
  theme(
    plot.title = element_text(hjust = 0.5, size = 12),
    legend.position = "right"
  ) +
  geom_text(
    aes(label = n),
    position = position_stack(vjust = 0.5),
    color = "white",
    size = 4
  )

Finalmente presentamos la estimación obtenida de \(\pi\).

print(estimador_pi)
[1] 3.14584

Resultados y análisis

1. Número de Puntos Dentro del Círculo:

La variable p_dentro nos indica cuántos de los 1000 puntos generados caen dentro del círculo. Este número debería estar en el rango de aproximadamente 78646, dado que el área del círculo (con radio 0.5) es \(\pi *(0.5)^2 = \frac{\pi}{4}\), que es aproximadamente 0.79.

2. Estimación de \(\pi\)

π:

La estimación de \(\pi\) se calcula como la proporción de puntos adentro del área de la circunferencia multiplicado por 4. Dado que la proporción de puntos dentro del círculo debería aproximarse al área del círculo sobre el área del cuadrado, multiplicar esta proporción por 4 nos da una estimación de \(\pi\).

En general, la estimación de \(\pi\) proporcionada por el código es bastante cerca del valor real de 𝜋≈ 3.14159 tomando un valor de \(\hat{\pi} = 3.14584\). La variación es esperada debido al carácter aleatorio del muestreo. Repetir el experimento con diferentes semillas o diferentes números de puntos puede proporcionar estimaciones ligeramente diferentes.

Conclusiones

Esto demuestra que el método de Monte Carlo es efectivo para estimar \(\pi\) y proporciona una aproximación razonablemente precisa mediante la simulación aleatoria.