Problema 1: Estimación del valor de \(\pi\)

El objetivo planteado, es encontrar la estimación del valor de \(\pi\) a través de una distribución uniforme entre 0 y 1. Para ello, primero se evaluan 1.000 simulaciones de X e Y, cada una con una distribución uniforme(0,1) y se compara con el circulo de area \(\pi/4\) como lo presentamos en la siguiente figura:

n=1000
set.seed(1995)
X <- runif(n, min=0, max=1)
Y <- runif(n, min=0, max=1)
t <- seq(0, 2*pi, length.out = 1000) 
radio <- pi/6.3
a <- 0.5 ## origen circunferencia eje x
b <- 0.5 ## origen circunferencia eje y
x <- a + cos(t)*radio
y <- b + sin(t)*radio
plot(X,Y, asp = 1, lty = 3, 
     xlim = c(0, 1), ylim = c(0, 1))
abline(v = seq(-1, 1, 1), lty = 1, col = "gray50")
abline(h = seq(-1, 1, 1), lty = 1, col = "gray50")
lines(x, y)

Ahora, con lo anterior se evaluará cuantos puntos quedaron por fuera del circulo gráficado, para eso, se calcula la distancia de cada uno frente al centro y si es mayor a 0.25 se establece que está por fuera del circulo:

datos <- data.frame("var_x" = X,
                    "var_y" = Y,
                    "distancia" = ((X-0.5)**2 + (Y-0.5)**2))

sum(datos$distancia<0.25) ## Número de puntos que están dentro del circulo
## [1] 787
# Estimación de pi/4
sum(datos$distancia<0.25)/n
## [1] 0.787
# Estimación de pi
sum(datos$distancia<0.25)/n*4
## [1] 3.148

De lo anterior se puede inferir que 787 de los 1.000 puntos están ubicados dentro del circulo gráficado, es decir, el error es de 0.213 apróximadamente y la estimación de \(\pi\)/4 es de 0.787; de ahí que la estimación de \(\pi\)=3.148 usando una muestra de tamaño 1000. Ahora veamos que pasa con un tamaño de muestra pequeño y cuando se incrementa el tamaño de la muestra a 10.000 y 1.000.000

n = 100
set.seed(1995)
X <- runif(n, min=0, max=1)
Y <- runif(n, min=0, max=1)
datos <- data.frame("var_x" = X,
                    "var_y" = Y,
                    "distancia" = ((X-0.5)**2 + (Y-0.5)**2))
sum(datos$distancia<0.25)
## [1] 85
sum(datos$distancia<0.25)/n
## [1] 0.85
# Estimación de pi
sum(datos$distancia<0.25)/n*4
## [1] 3.4
n = 10000
set.seed(1995)
X <- runif(n, min=0, max=1)
Y <- runif(n, min=0, max=1)
datos <- data.frame("var_x" = X,
                    "var_y" = Y,
                    "distancia" = ((X-0.5)**2 + (Y-0.5)**2))
sum(datos$distancia<0.25)
## [1] 7835
sum(datos$distancia<0.25)/n
## [1] 0.7835
# Estimación de pi
sum(datos$distancia<0.25)/n*4
## [1] 3.134
n = 1000000
set.seed(1995)
X <- runif(n, min=0, max=1)
Y <- runif(n, min=0, max=1)
datos <- data.frame("var_x" = X,
                    "var_y" = Y,
                    "distancia" = ((X-0.5)**2 + (Y-0.5)**2))
sum(datos$distancia<0.25)
## [1] 785995
sum(datos$distancia<0.25)/n
## [1] 0.785995
# Estimación de pi
sum(datos$distancia<0.25)/n*4
## [1] 3.14398

con n=100, el error aumenta y la estimación de \(\pi\) es de 3.4, lo cual se aleja del valor real. Al incrementar el tamaño de la muestra a 10.000 y 1.000.000, el error disminuye y se tiene una aproxímación más cercana al verdadero valor de \(\pi\), siendo esta de 3.134 y 3.1439, respectivamente. De lo anterior, se permite confirmar que a entre más grande es el tamaño de la muestra, menor error de estimación se tendrá, si n tiende a infinito, la estimación del parámetro de interés es igual al valor real del parámetro.