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


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

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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.