Actividad # 2 Informe 1

ESTIMACIÓN DE PI

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

Introducción

En este informe, se estimara el valor de π utilizando un método de simulación conocido como Monte Carlo. El método se basa en generar puntos aleatorios en un cuadrado y determinar cuántos estan dentro de un círculo en dicho cuadrado.

Definición del Problema

Punto (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).

Punto(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.

Punto(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.

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

Definición de los objetivos.

Objetivo general: Estimar el valor de π usando el método de Monte Carlo.

Objetivos específicos: Generar puntos aleatorios en un cuadrado unitario. Determinar cuántos de esos puntos caen dentro del círculo inscrito. Calcular el valor de π con base en la proporción de puntos dentro del círculo. Evaluar cómo cambia la precisión de la estimación a medida que aumenta el número de puntos generados.

Definición de las variables de interés.

Coordenadas (x, y): Variables continuas generadas aleatoriamente entre 0 y 1, que representan las posiciones de los puntos dentro del cuadrado. Distancia al centro del círculo: Variable calculada que mide la distancia de cada punto respecto al centro del círculo. Puntos dentro del círculo: Variable booleana que indica si un punto está dentro o fuera del círculo inscrito en el cuadrado. Estimación de π: Variable de resultado que estima el valor de π basado en la proporción de puntos dentro del círculo.

Diseño del experimento.

Generar un número dado de puntos aleatorios con coordenadas uniformemente distribuidas en el intervalo [0, 1] para ambas dimensiones (x, y). Calcular la distancia de cada punto desde el centro del círculo ubicado en el punto (0.5, 0.5) con un radio de 0.5. Contar cuántos puntos caen dentro del círculo (donde la distancia calculada es menor que 0.25). Usar la relación entre los puntos dentro y fuera del círculo para estimar π. Para un cuadrado de área 1 y un círculo inscrito de área π/4, la proporción de puntos dentro del círculo debe ser π/4.

Análisis descriptivo o exploratorio de datos.

Probabilidad: La probabilidad de que un punto generado aleatoriamente caiga dentro del círculo es igual a la relación entre el área del círculo y el área del cuadrado, es decir, π/4.

Variable aleatoria: Las coordenadas x e y son variables aleatorias continuas que siguen una distribución uniforme en el intervalo [0,1].

Exploración gráfica: Se puede realizar una visualización de los puntos generados, coloreando aquellos que caen dentro del círculo para observar la proporción gráfica de los puntos utilizados en la estimación.

## generacion de muestras y puntos

n <- 1000
n1 <- 10000
n2 <- 100000

x <- runif(n,0,1)
y <- runif(n,0,1)

diferencias <- numeric ()

for (i in 1:length(x)) {
  diferencias[i] = (x[i]-0.5)^2+(y[i]-0.5)^2
}
# 1 = puntos dentro
# 0 = puntos fuera

puntos = ifelse(diferencias < 0.25, 1, 0)

x1 <- runif(n1,0,1)
y1 <- runif(n1,0,1)

diferencias1 <- numeric ()

for (i in 1:length(x1)) {
  diferencias1[i] = (x1[i]-0.5)^2+(y1[i]-0.5)^2
}
# 1 = puntos dentro
# 0 = puntos fuera

puntos1 = ifelse(diferencias1 < 0.25, 1, 0)

x2 <- runif(n2,0,1)
y2 <- runif(n2,0,1)

diferencias2 <- numeric ()

for (i in 1:length(x2)) {
  diferencias2[i] = (x2[i]-0.5)^2+(y2[i]-0.5)^2
}
# 1 = puntos dentro
# 0 = puntos fuera

puntos2 = ifelse(diferencias2 < 0.25, 1, 0)

Se emplea el método de Monte Carlo para estimar el valor de pi (π) dónde se utilizan puntos generados aleatoriamente dentro de un cuadrado, con el fin de verificar cuántos de esos puntos caen dentro de un círculo inscrito en el cuadrado. A partir de esta simulación, hemos obtenido estimaciones de pi para diferentes tamaños de muestra (n) y hemos calculado el error en cada estimación.

Muestra n=1000

# Datos iniciales
n <- 1000

# Generar puntos aleatorios para n = 1000
x <- runif(n, 0, 1)
y <- runif(n, 0, 1)

# Calcular las distancias al centro (0.5, 0.5)
diferencias <- (x - 0.5)^2 + (y - 0.5)^2

# Identificar puntos dentro del círculo (radio 0.5)
puntos <- ifelse(diferencias < 0.25, 1, 0)

# Graficar puntos
plot(x, y, col = ifelse(puntos == 1, "green", "brown"), pch = 4, 
     main = "Puntos dentro y fuera del círculo",
     xlab = "Coordenada X", ylab = "Coordenada Y", asp = 1)

# Añadir el círculo de referencia
symbols(0.5, 0.5, circles = 0.5, inches = FALSE, add = TRUE, lwd = 2)


# Añadir una leyenda para identificar los conjuntos
legend("topright", legend = c("n = 1000 (dentro)", "n = 1000 (fuera)"),
       col = c("green", "brown"), pch = 16, cex = 0.8)

Los resultados obtenidos para la muestra de tamaño n=1000, se presentan a continuación:

##      puntos estimacion_pi   error_pi
## [1,]    809         3.236 0.09440735

Muestra n=10000

# Datos iniciales
n1 <- 10000

# Generar puntos aleatorios para n = 1000
x1 <- runif(n1, 0, 1)
y1 <- runif(n1, 0, 1)

# Calcular las distancias al centro (0.5, 0.5)
diferencias <- (x1 - 0.5)^2 + (y1 - 0.5)^2

# Identificar puntos dentro del círculo (radio 0.5)
puntos <- ifelse(diferencias < 0.25, 1, 0)

# Graficar puntos
plot(x1, y1, col = ifelse(puntos == 1, "green", "brown"), pch = 4, 
     main = "Puntos dentro y fuera del círculo",
     xlab = "Coordenada X", ylab = "Coordenada Y", asp = 1)

# Añadir el círculo de referencia
symbols(0.5, 0.5, circles = 0.5, inches = FALSE, add = TRUE, lwd = 2)


# Añadir una leyenda para identificar los conjuntos
legend("topright", legend = c("n = 10000 (dentro)", "n = 10000 (fuera)"),
       col = c("green", "brown"), pch = 16, cex = 0.8)

Los resultados obtenidos para la muestra de tamaño n=10000, se presentan a continuación:

##      puntos1 estimacion_pi1   error_pi1
## [1,]    7811         3.1244 -0.01719265

Muestra n=100000

# Datos iniciales
n2 <- 100000

# Generar puntos aleatorios para n = 1000
x2 <- runif(n2, 0, 1)
y2 <- runif(n2, 0, 1)

# Calcular las distancias al centro (0.5, 0.5)
diferencias <- (x2 - 0.5)^2 + (y2 - 0.5)^2

# Identificar puntos dentro del círculo (radio 0.5)
puntos <- ifelse(diferencias < 0.25, 1, 0)

# Graficar puntos
plot(x2, y2, col = ifelse(puntos == 1, "green", "brown"), pch = 4, 
     main = "Puntos dentro y fuera del círculo",
     xlab = "Coordenada X", ylab = "Coordenada Y", asp = 1)

# Añadir el círculo de referencia
symbols(0.5, 0.5, circles = 0.5, inches = FALSE, add = TRUE, lwd = 2)


# Añadir una leyenda para identificar los conjuntos
legend("topright", legend = c("n = 10000 (dentro)", "n = 10000 (fuera)"),
       col = c("green", "brown"), pch = 16, cex = 0.8)

Los resultados obtenidos para la muestra de tamaño n=100000, se presentan a continuación:

##      puntos2 estimacion_pi2    error_pi2
## [1,]   78499        3.13996 -0.001632654

Conclusiones

Las gráficas nos permiten identificar como a medida que vamos aumentandola muestra (o disparos) de 1000 a 10000 y luego a 100000, vamos obteniendo mayor cantidad de puntos dentro del circulo, mejorando la calidad de la estimación de PI y disminuyendo el error. Esto quiere decir que con un tamaño de muestra lo suficientemente grande, la estimación de pi se acerca considerablemente al valor real de pi. Esto demuestra que la simulación de Monte Carlo converge al valor real a medida que aumenta el tamaño de la muestra.

El siguiente gráfico nos permite concluir que a medida que aumentamos la muestra, nos vamos acercando al valor de pi:

# Definir los vectores
estimacion_pi_final <- c(3.02, 3.1388, 3.14084)

#puntos_final <- c(770, 7828,78689)
puntos_final <- c(785, 7847, 78521)

# Crear el gráfico de dispersión
plot(estimacion_pi_final, puntos_final, 
     type = "b",                   # Muestra tanto los puntos como las líneas
     col = "brown",                 # Color de las líneas y puntos
     pch = 16,                     # Forma de los puntos (círculos rellenos)
     xlab = "Estimación Pi Final", # Etiqueta del eje X
     ylab = "Puntos Totales",      # Etiqueta del eje Y
     main = "Gráfico de Estimación Pi vs Puntos") # Título del gráfico

## [1] 3.02000 3.13880 3.14084
## [1]   785  7847 78521