La siguiente figura sugiere como estimar el valor de π con una simulación. En la figura, un circuito 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 este, 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 π
.
Estimar el valor de π por medio de simulaciones de números aleatorios.
La variable de interés para estimar el valor de π será el numero de puntos dentro del area del circulo, a partir del numero de objetos dentro del circulo se estimara el valor de π
Generar n coordenadas x: X1,. . . , Xn, con una distribución uniforme con valor mínimo de 0 y valor máximo de 1.
Generar n coordenadas y: Y1,. . . , Yn, con una distribución uniforme con valor mínimo de 0 y valor máximo de 1.
Clasificar puntos que se encuentren dentro del círculo, esta condición se cumple si:
Ri^2 = (Xi - 0.5)^2 + (Yi - 0.5)^2 < 0.25
Contar numero de puntos dentro del area del circulo y estimar π teniendo en cuenta que el area del circulo es igual a π/4
Se realizará 3 escenarios de simulación:
Escenario 1 con n = 1,000
Escenario 2 con n = 10,000
Escenario 3 con n = 100,000
Los datos generados son presentados en las siguientes figuras.
#Definición de tamaños de muestra
nmil =1000
n10mil =10000
n100mil=100000
#Generación de puntos aleatorios (x, y)
set.seed(123)
milPuntos = data.frame(x = runif(nmil, 0, 1), y = runif(nmil, 0, 1))
diezmilPuntos = data.frame(x = runif(n10mil, 0, 1), y = runif(n10mil, 0, 1))
cienmilPuntos = data.frame(x = runif(n100mil, 0, 1), y = runif(n100mil, 0, 1))
#Graficando coordenadas
plotMilPuntos = ggplot(milPuntos, aes(x = x, y = y)) +
geom_point(alpha = 0.5) +
theme_minimal() +
labs(title = "Figura 1: 1,000 Puntos Aleatorios") +
coord_fixed() # Mismo aspecto para x e y
plotDiezMilPuntos = ggplot(diezmilPuntos, aes(x = x, y = y)) +
geom_point(alpha = 0.5) +
theme_minimal() +
labs(title = "Figura 2: 10,000 Puntos Aleatorios") +
coord_fixed() # Mismo aspecto para x e y
plotCienMilPuntos = ggplot(cienmilPuntos, aes(x = x, y = y)) +
geom_point(alpha = 0.5) +
theme_minimal() +
labs(title = "Figura 3: 100,000 Puntos Aleatorios") +
coord_fixed() # Mismo aspecto para x e yPara el procesamiento de los datos se realizó una clasificación de los puntos teniendo en cuenta si se encontraban dentro del área del círculo con el cual se estimará el valor de π.
Para esto se verifico la distancia cuadrada entre las coordenadas del punto y el centro del círculo, si la distancia cuadrada es menor a 0.25 el punto se encuentra dentro del círculo.
#Clasificación de datos dentro del circulo
milPuntos$dentro = with(milPuntos, (x-0.5)^2 + (y-0.5)^2 <= 0.25)
diezmilPuntos$dentro = with(diezmilPuntos, (x-0.5)^2 + (y-0.5)^2 <= 0.25)
cienmilPuntos$dentro = with(cienmilPuntos, (x-0.5)^2 + (y-0.5)^2 <= 0.25)
#Definiendo circulo
t = seq(0, 2*pi, length.out = 100) # Crear 100 puntos para formar un círculo
circulo = data.frame(x = 0.5 + 0.5 * cos(t), y = 0.5 + 0.5 * sin(t))
#Graficando clasificacion
plotMilPuntos = ggplot(milPuntos, aes(x = x, y = y, color = dentro)) +
geom_point(alpha = 0.5) +
scale_color_manual(values = c("TRUE" = "blue", "FALSE" = "red")) +
geom_polygon(data = circulo, aes(x = x, y = y), color = "gray", fill = NA, linewidth= 1) +
theme_minimal() +
labs(title = "Figura 4: 1,000 Puntos Aleatorios Clasificados") +
coord_fixed() + # Mismo aspecto para x e y
theme(legend.title = element_blank()) # Sin título en la leyenda
plotDiezMilPuntos = ggplot(diezmilPuntos, aes(x = x, y = y, color = dentro)) +
geom_point(alpha = 0.5) +
scale_color_manual(values = c("TRUE" = "blue", "FALSE" = "red")) +
geom_polygon(data = circulo, aes(x = x, y = y), color = "gray", fill = NA, linewidth= 1) +
theme_minimal() +
labs(title = "Figura 5: 10,000 Puntos Aleatorios Clasificados") +
coord_fixed() + # Mismo aspecto para x e y
theme(legend.title = element_blank()) # Sin título en la leyenda
plotCienMilPuntos = ggplot(cienmilPuntos, aes(x = x, y = y, color = dentro)) +
geom_point(alpha = 0.5) +
scale_color_manual(values = c("TRUE" = "blue", "FALSE" = "red")) +
geom_polygon(data = circulo, aes(x = x, y = y), color = "gray", fill = NA, linewidth= 1) +
theme_minimal() +
labs(title = "Figura 6: 100,000 Puntos Aleatorios Clasificados") +
coord_fixed() + # Mismo aspecto para x e y
theme(legend.title = element_blank()) # Sin título en la leyendaPara el escenario 1 se determinó que dentro del círculo se encuentran 800 puntos.
## [1] 800
La estimación de π para el Escenario 1 es de 3.2, esta estimación tiene un error de un 1.86%.
Para el escenario 2 se determinó que dentro del círculo se encuentran 7,882 puntos.
## [1] 7882
La estimación de π para el Escenario 2 es de 3.15, esta estimación tiene un error de un 0.36%
## [1] 3.1528
Para el escenario 3 se determinó que dentro del círculo se encuentran 78,600 puntos.
## [1] 78600
La estimación de π para el Escenario 3 es de 3.144, esta estimación tiene un error de un 0.077%
## [1] 3.144
Los métodos de simulación estadística utilizados en este ejercicio demuestran su eficacia para realizar estimaciones de valores que de otra manera serían desconocidos, siempre que exista una comprensión profunda del problema a tratar. En este contexto específico, se ha logrado estimar el valor de π aprovechando la proporción geométrica entre un círculo inscrito y un cuadrado de área 1x1. Los puntos generados aleatoriamente siguiendo una distribución uniforme reflejan esta proporción, asegurando que cada punto dentro del cuadrado tenga igual probabilidad de ser elegido. Este enfoque destaca la importancia de fundamentar la simulación en sólidos principios teóricos, facilitando estimaciones precisas en situaciones donde los métodos de cálculo directo resultan complejos o inviables.
También es importante destacar que, a medida que el número de muestras aumenta, el valor estimado de π converge hacia su valor real. Este fenómeno respalda la ley de los grandes números, subrayando cómo el incremento en el tamaño de la muestra mejora la precisión de las estimaciones estadísticas.