Estoy viendo cómo la distancia euclidiana mínima esperada entre puntos aleatorios uniformes y el origen cambia a medida que aumentamos la densidad de puntos aleatorios ( puntos por unidad de cuadrado ) alrededor del origen. He logrado llegar a una relación entre los dos descritos como tales:
Se me ocurrió esto ejecutando algunas simulaciones de Monte Carlo en R y ajustando una curva manualmente (código a continuación).
Mi pregunta es : ¿podría haber derivado este resultado teóricamente en lugar de a través de la experimentación?
#Stack Overflow example
library(magrittr)
library(ggplot2)
#---------
#FUNCTIONS
#---------
#gen random points within a given radius and given density
gen_circle_points <- function(radius, density) {
#round radius up then generate points in square with side length = 2*radius
c_radius <- ceiling(radius)
coords <- data.frame(
x = runif((2 * c_radius) ^ 2 * density, -c_radius, c_radius),
y = runif((2 * c_radius) ^ 2 * density, -c_radius, c_radius)
)
return(coords[sqrt(coords$x ^ 2 + coords$y ^ 2) <= radius, ])#filter in circle
}
#Example plot
plot(gen_circle_points(radius = 1,density = 200)) #200 points around origin
points(0,0, col="red",pch=19) #colour origin
#return euclidean distances of points generated by gen_circle_points()
calculate_distances <- function(circle_points) {
return(sqrt(circle_points$x ^ 2 + circle_points$y ^ 2))
}
#find the smallest distance from output of calculate_distances()
calculate_min_value <- function(distances) {
return(min(distances))
}
#Try a range of values
density_values <- c(1:100)
expected_min_from_density <- sapply(density_values, function(density) {
#simulate each density value 1000 times and take an average as estimate for
#expected minimum distance
sapply(1:1000, function(i) {
gen_circle_points(radius=1, density=density) %>%
calculate_distances() %>%
calculate_min_value()
}) %>% mean()
})
results <- data.frame(density_values, expected_min_from_density)
#fit based off exploration
theoretical_fit <- data.frame(density = density_values,
fit = 1 / (sqrt(density_values) * 2))
#plot monte carlo (black) and fit (red dashed)
ggplot(results, aes(x = density_values, y = expected_min_from_density)) +
geom_line() +
geom_line(
data = theoretical_fit,
aes(x = density, y = fit),
color = "red",
linetype = 2
)
r
expected-value
monte-carlo
uniform
minimum
Michael Bird
fuente
fuente
Respuestas:
Considere la distancia al origen denorte variables aleatorias distribuidas independientemente (Xyo,Yyo) que tienen distribuciones uniformes en el cuadrado [ - 1 , 1]2.
EscrituraR2yo=X2yo+Y2yo para la distancia al cuadrado, la geometría euclidiana nos muestra que
mientras (con un poco más de trabajo)
Juntos, estos determinan la función de distribución común a todos losF Ryo.
Debido a que los puntos son independientes, también lo son las distancias donde la función de supervivencia de esnorte Ryo, min (Ryo)
lo que implica que la distancia más corta media es
Para casi toda el área de esta integral está cerca de por lo que podemos aproximarla comon ≫ 1 , 0 ,
El error no es mayor que la parte de la integral que se omitió, que a su vez no es mayor que
que obviamente disminuye exponencialmente conn .
A su vez, podemos aproximar el integrando como
Hasta una constante de normalización, esta es la función de densidad de una distribución Normal con media y varianza La constante de normalización que falta es0 0 σ2= 2 / ( n π) .
Por lo tanto, extendiendo la integral de a (que agrega un error proporcional a ),1 ∞ mi- n
En el proceso de obtención de esta aproximación se cometieron tres errores. Colectivamente, son como máximo del orden el error incurrido al aproximar por el gaussiano.norte- 1, Snorte( r )
Esta figura representa veces la diferencia entre y veces la distancia más corta media observada en conjuntos de datos simulados separados para cada Debido a que disminuyen a medida que crece, esto es evidencia de que el error esnorte 1 norte--√ 105 5 n . norte o (norte- 1/ /norte--√) = o (norte- 3 / 2) .
Finalmente, el factor en la pregunta deriva del tamaño del cuadrado:1 / 2 la densidad es el número de puntos por unidad de área y el cuadrado tiene área , de donden , [ - 1 , 1]2 4 4
Este es el
R
código para la simulación:fuente