Objetivo

El presente Informe tiene como objetivo mostrar de manera detallada el desarrollo del Problema 1 de la unidad 2 de la materia Metodos Y Simulación Estadistica de la Maestria de Ciencia de Datos de la Universidad Javeriana de Cali, Este probelma esta relacionado con una simulación para estimar el valor de π.

Problema 1

Estimación del valor de π

La siguiente figura sugiere como estimar el valor de π con una simulación. En la figura, un circulo 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 π.

a. Genere 1000 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).

Lo primero que realizamos fue crear una varaibles denominada “n” para asignar la cantidad de coordenadas que vamos a generar

n = 1000

Luego de esto generamos las 1000 coordenadas usando la distribución Uniforme:

set.seed(5634)
X = runif(n,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.

Generamos las 1000 coordenadas usando la distribución Uniforme:

set.seed(5678)
Y = runif(n,0,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.

Nosotros decidimos almacenar X y Y en un data frame y partiendo de este realizar todos los calculos de cara a llegar al resultado. Creamos el DataFrame

data=data.frame(X,Y)

Ahora Calculamos la distancias de las coordenadas desde el centro y la almacenamos en una variable nueva del Dataframe

data$distancia = (data$X-0.5)^2 + (data$Y-0.5)^2

Seguido de esto creamos una variable de cara a identificar de manera binaria cuales coordenadas son inferiores a 0.25

data_menor025 = subset(data, data$distancia < 0.25)
data$encirculo = ifelse(data$distancia < 0.25 ,1,0)

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

A continuación hacemos una sumatoria de la variable encirculo del data frame data, de esta forma podemos obtener el total de coordenadas que se encuentran dentro del circulo.

cat("La cantidad de puntos dentro del circulo son: ",sum(data$encirculo),"\n")
## La cantidad de puntos dentro del circulo son:  783

Ahora procedemos a calcular la estimación de π para resolver la segunda pregunta del punto d.

pi_estimate = 4 * (sum(data$encirculo) / n)
cat("Estimación de π: ", pi_estimate, "\n")
## Estimación de π:  3.132

Como se puede notar en los resultados el valor de π con estas 783 coordenadas generadas aleatoriamente y que estan dentro del circulo esta a 0,009 del valor de π.

Ahora realizaremos el ejercicio con generando 10000 coordenadas.

n = 10000
set.seed(5634)
X = runif(n,0,1)
set.seed(5678)
Y = runif(n,0,1)
data=data.frame(X,Y)
data$distancia = (data$X-0.5)^2 + (data$Y-0.5)^2
data_menor025 = subset(data, data$distancia < 0.25)
data$encirculo = ifelse(data$distancia < 0.25 ,1,0)
cat("La cantidad de puntos dentro del circulo son: ",sum(data$encirculo), "\n")
## La cantidad de puntos dentro del circulo son:  7866
pi_estimate = 4 * (sum(data$encirculo) / n)
cat("Estimación de π:", pi_estimate, "\n")
## Estimación de π: 3.1464

Con las 10.000 coordenadas generadas aleatoriamente, quedaro 7.866 valores dentro del cirulo, los cuales se usaron para estimar el valor de π que nos da como resultado 3,1464 es decir a 0,004

Ahora realizaremos el ejercicio con generando 100000 coordenadas.

n = 100000
set.seed(56341)
X = runif(n,0,1)
set.seed(56781)
Y = runif(n,0,1)
data=data.frame(X,Y)
data$distancia = (data$X-0.5)^2 + (data$Y-0.5)^2
data_menor025 = subset(data, data$distancia < 0.25)
data$encirculo = ifelse(data$distancia < 0.25 ,1,0)
cat("La cantidad de puntos dentro del circulo son: ",sum(data$encirculo), "\n")
## La cantidad de puntos dentro del circulo son:  78476
pi_estimate = 4 * (sum(data$encirculo) / n)
cat("Estimación de π:", pi_estimate, "\n")
## Estimación de π: 3.13904

Con las 100.000 coordenadas generadas aleatoriamente, quedaron 78.476 valores dentro del cirulo, los cuales se usaron para estimar el valor de π que nos da como resultado 3,13904 es decir a 0,0025.

Conclusiones:

Como podemos visualizar en este ejercicio donde generamos valores aleatorios con una distribución uniforme entre 0 y 1, donde se parte del area de un cuadrado y se traza un circulo con base al valor de π/4 y se toman las coordenadas dentro de esta area para estimar el calor de π, podemos concluir que cuanto mas valores aletorios generemos, el resultado del estimado mas se acerca al mismo.