Distancia mínima esperada desde un punto con densidad variable

8

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:

Expected Min Distance=12Density

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

ingrese la descripción de la imagen aquí

#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
  )

Un gráfico de valores de densidad contra el mínimo esperado, tanto monte carlo como teórico

Michael Bird
fuente
La dependencia directa (asintótica) de la raíz inversa de la densidad se deriva fácil e inmediatamente de las consideraciones de las unidades de medida, por lo que la única pregunta se refiere a por qué 1/2.
whuber
@whuber Sí, me di cuenta de que las unidades estaban bien alineadas y sí, la pregunta es: ¿de dónde vienen los 2?
Michael Bird
1
los 2es el ancho de tu cuadrado.
whuber

Respuestas:

8

Considere la distancia al origen de n variables aleatorias distribuidas independientemente (Xi,Yi) que tienen distribuciones uniformes en el cuadrado [1,1]2.

Escritura Ri2=Xi2+Yi2 para la distancia al cuadrado, la geometría euclidiana nos muestra que

Pr(Rir1)=14πr2

mientras (con un poco más de trabajo)

Pr(1Ryor2)=14 4(πr2+4 4r2-1-4 4r2ArcTan(r2-1)).

Figura 1: Gráfico de la función de distribución

Juntos, estos determinan la función de distribución común a todos losFRyo.

Debido a que los puntos son independientes, también lo son las distancias donde la función de supervivencia de esnorteRyo,min(Ryo)

Snorte(r)=(1-F(r))norte,

lo que implica que la distancia más corta media es

μ(norte)=0 02Snorte(r)rer.

Para casi toda el área de esta integral está cerca de por lo que podemos aproximarla comonorte1,0 0,

μaprox.(norte)=0 01Snorte(r)rer=0 01(1-π4 4r2)norterer.

El error no es mayor que la parte de la integral que se omitió, que a su vez no es mayor que

(2-1)(1-F(1))norte=(2-1)(1-π/ /4 4)norte,

que obviamente disminuye exponencialmente connorte.

A su vez, podemos aproximar el integrando como

(1-π4 4r2)norteExp(-12r22/ /(norteπ)).

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/ /(norteπ).

C(norte)=12πσ2=12π 2/ /(norteπ)=norte2.

Por lo tanto, extendiendo la integral de a (que agrega un error proporcional a ),1mi-norte

μaprox.(norte)0 0mi-t2/ /(2σ2)ret=1C(norte)12=1norte.

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)

! [Figura 2: Trazado de errores de simulación

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 esnorte1norte105 5norte.norteo(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 dondenorte,[-1,1]24 4

2Densidad=2norte/ /4 4=norte.

Este es el Rcódigo para la simulación:

n.sim <- 1e5  # Size of each simulation
d <- 2        # Dimension
n <- 2^(1:11) # Numbers of points in each simulation
#
# Estimate mean distance to the origin for each `n`.
#
y <- sapply(n, function(n.points) {
  x <- array(runif(d*n.points*n.sim, -1, 1), c(d, n.points, n.sim))
  mean(sqrt(apply(colSums(x^2), 2, min)))
})
#
# Plot the errors (normalized) against `n`.
#
library(ggplot2)
ggplot(data.frame(Log2.n = 1:length(n), Error=sqrt(n)* (1 - y * n^(1/d))),
       aes(Log2.n, Error)) + geom_point() + geom_smooth() 
  ylab("Error * n") + ggtitle("Simulation Means")
whuber
fuente
2
¡Guauu! ¡Qué respuesta! Muchas gracias, esto es genial. ¡Gracias!
Michael Bird
Hola @whuber, estaba tratando de reproducir tu y noté que tu ecuación para no devuelve como muestran tus gráficos. Cuando obtuve que proporciona la curva que proporcionó. ¿Has hecho un error tipográfico? F(r)F(2)1Pr(1Ryor2)π/ /4 4-r(rArcCos(1/ /r)-1-1/ /r2)
Michael Bird
1
@ Michael Gracias, hay un error tipográfico, pero no es el que sugieres: una de mis " " debería haber sido " ". He arreglado eso. r4 4
whuber