1 ESTIMACIÓN DEL VALOR DE π

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 π.

2 PASOS A SEGUIR

a. Genere n coordenadas x: X1, . . . , Xn. Utilice la distribución uniforme con valor mínimo de 0 y valor máximo de 1. La distribución uniforme genera variables aleatorias que tienen la misma probabilidad de venir de cualquier parte del intervalo (0,1).

b. Genere 1000 coordenadas y: Y1,…,Yn, utilizando nuevamente la distribución uniforme con valor mínimo de 0 y valor máximo de 1.

c. Cada punto (Xi,Yi) se encuentra dentro del círculo si su distancia desde el centro (0.5,0.5) es menor a 0.5. Para cada par (Xi,Yi) determine si la distancia desde el centro es menor a 0.5. Esto último se puede realizar al calcular el valor (Xi−0.5)2+(Yi−0.5)2, que es el cuadrado de la distancia, y al determinar si es menor que 0.25.

d. ¿Cuántos de los puntos están dentro del círculo? ¿Cuál es su estimación de π?

3 SOLUCIONES

Inicialmente, se crea una función para generar las coordenadas aleatorias de x y y con valores entre 0 y 1, bajo la distribución uniforme:

fmuestrapuntos <- function(n){
  coordenadasx<-runif(n, min=0, max=1)
  coordenadasy<- runif(n, min=0, max=1)
  muestracoordenadas <- data.frame(x=coordenadasx, y=coordenadasy)
  return(muestracoordenadas)
}

Posteriormente, se crea una función que ubica los puntos dentro del círculo:

fpuntoscirculo <- function(dataframe){
  distancia2 <- (dataframe$x - 0.5)^2 + (dataframe$y - 0.5)^2
  distanciadeterminada <- distancia2 < 0.25
  dataframe$puntosdetectados <- distanciadeterminada
  return(dataframe)
}

Luego, se crea una función que cuenta o suma los puntos dentro del círculo:

fconteopuntos <- function(puntosdetectados) {
  conteop<-sum(puntoscirculo$puntosdetectados)
  return(conteop)
}

Ahora, se generan las muestras aleatorias:

set.seed(123)
simulacion <- c(1000, 10000, 100000)
resultadossimulacion <- numeric(length(simulacion))
piestimadovalor <- numeric(length(simulacion))
errorestimado<-numeric(length(simulacion))     
par(pty = "s")  

for (i in 1:length(simulacion)){
  n<-simulacion [i]
  muestracoordenadas <- fmuestrapuntos(n)
  puntoscirculo <- fpuntoscirculo(muestracoordenadas)
  resultadossimulacion [i] <-fconteopuntos(puntoscirculo)
  piestimadovalor [i] = 4*resultadossimulacion [i] / simulacion [i]
  errorestimado [i] <- abs(piestimadovalor [i] - pi)
  colores <- ifelse(puntoscirculo$puntosdetectados, "#7FFF00", "#00B2EE")
   plot(x = muestracoordenadas$x, y = muestracoordenadas$y, col = colores, pch = 20, main = paste("Simulación con tamaño de muestra =", n), xlim = c(0, 1), ylim = c(0, 1))
   symbols(0.5, 0.5, 0.5, add = TRUE, lwd = 2, inches = FALSE)
  cat ("Para tamaño de muestra:", n, "\n")
  cat ("Puntos dentro del círculo:", resultadossimulacion [i], "\n")
  cat ("Pi Estimado:", piestimadovalor [i], "\n")
  cat ("Error Estimado:", errorestimado [i],"\n" )
}

## Para tamaño de muestra: 1000 
## Puntos dentro del círculo: 800 
## Pi Estimado: 3.2 
## Error Estimado: 0.05840735

## Para tamaño de muestra: 10000 
## Puntos dentro del círculo: 7882 
## Pi Estimado: 3.1528 
## Error Estimado: 0.01120735

## Para tamaño de muestra: 1e+05 
## Puntos dentro del círculo: 78600 
## Pi Estimado: 3.144 
## Error Estimado: 0.002407346

Verificamos las desviaciones respecto Pi de cada muestra:

tabla <- data.frame("Muestra" = c(1000, 10000, 100000))
tabla$PuntosDentro <- (resultadossimulacion)
tabla$Pi_Estimado <- ((tabla$PuntosDentro*4)/tabla$Muestra)
tabla$Desviacion_Pi <- (3.14159265359 - tabla$Pi_Estimado)

#tabla$Muestra <- options(scipen = 9999999)
kable(tabla,font_face = c("bold"))
Muestra PuntosDentro Pi_Estimado Desviacion_Pi
1e+03 800 3.2000 -0.0584073
1e+04 7882 3.1528 -0.0112073
1e+05 78600 3.1440 -0.0024073

4 CONCLUSIONES

  • La muestra corresponde a un conjunto de individuos de una población sobre la cual se desea realizar inferencia. El objetivo de la muestra es que sea aleatoria y representativa, de manera que contenga las mismas característica de la población, para que de esta manera no se presente sesgo. En este ejercicio, a través de funciones y códigos, se generaron en todo momento muestras aleatorias. De aquí la importancia de establecer la técnica de muestreo acorde con el experimiento, para que no se limite por el juicio del investigador.

  • Cuando se trabajan con muestras, resulta necesario conocer el error de estimación, que es inevitable, dado que no se podrá conocer a toda la población, salvo que se trabaje con un censo. Así, el error estándar de estimación, mide las variaciones de la media de la muestra frente al valor de la media poblacional, siendo inversamente proporcional al tamaño de la muestra.

  • En vista de lo anterior, se pudo demostrar que a medida que se incluye una mayor cantidad de observaciones en las simulaciones, el valor estimado de pi se acerca más al valor real y el error de estimación tiende a disminuir, en otras palabras, mejora la precisión de la estimación. Esto se produce debido a que cuando aumenta el tamaño de la muestra, se va conociendo mejor a la población.

  • Es importante que se establezca el costo de oportunidad al momento de asignar recursos en experimentos aleatorios, dado que si bien entre más grande sea la muestra, se obtiene una mejor estimacion, pero también implica el consumo de recursos adicionales, bien sean computacionales, tiempo, presupuesto, entre otros. Así, resulta necesario que se realice un balanceo entre el tamaño de muestra y precisión, sin desconocer que muestras pequeñas tienden a reflejar estimaciones imprecisas, dado que aumenta el intervalo de confianza.