Te daré una respuesta general de n dimensiones que funciona también para el caso de dos dimensiones, por supuesto. En tres dimensiones un análogo de un disco es el volumen de una bola sólida (esfera).
Hay dos enfoques que voy a discutir. Uno de ellos lo llamaría "preciso" y obtendrás una solución completa con ella en R. La segunda la llamo heurística Y es sólo la idea, no se proporciona ninguna solución completa.
"Solución "precisa
Mi solución se basa en Trabajos de Marsaglia y Muller . Básicamente, sucede que el vector gaussiano normalizado a su norma daría los puntos uniformemente distribuidos en una hiperesfera d-dimensional:
Es lo mismo que los puntos distribuidos uniformemente en un círculo en dos dimensiones. Para extenderlo a toda la superficie de un disco, hay que escalarlos aún más por el radio. El cuadrado de un radio procede de una distribución uniforme en dos dimensiones o elevado al poder $d$ en las dimensiones d. Entonces, se eleva a la potencia $1/d$ un número aleatorio uniforme para obtener el radio correctamente distribuido. Aquí tienes un código completo en R para dos dimensiones, que puedes extender fácilmente a cualquier número de dimensiones:
n <- 1e4
rho <- sqrt(runif(n))
# d - # of dimensions of hyperdisk
d = 2
r = matrix(rnorm(n*d),nrow=n,ncol=d)
x = r/rep(sqrt(rowSums(r^2))/rho,1)
plot(x[,1], x[,2], pch=19, cex=0.6, col="#00000020")
Aquí hay un fragmento de código para el caso 3d, es decir, una bola sólida:
library(scatterplot3d)
n <- 1e3
# d - # of dimensions of hyperdisk
d=3
rho <- (runif(n))^(1/d)
r = matrix(rnorm(n*d),nrow=n,ncol=d)
x = r/rep(sqrt(rowSums(r^2))/rho,1)
scatterplot3d(x[,1], x[,2], x[,3])
Enfoque heurístico
Este enfoque se basa en un hecho no tan obvio: la proporción del volumen de la hiperesfera unitaria sobre el volumen de un hipercubo unitario que la encierra se reduce a cero cuando el número de dimensiones aumenta hasta el infinito. Esto puede verse fácilmente en la expresión para un volumen de una hiperesfera : $$V_n(R) = \frac{\pi^\frac{n}{2}}{\Gamma\left(\frac{n}{2} + 1\right)}R^n$$ Aquí se puede ver cómo el coeficiente delante de $R^n$ disminuye rápidamente a cero. Esta es otra manifestación del fenómeno que está ligado a lo que se conoce como maldición de la dimensionalidad en el aprendizaje automático.
¿Por qué es esto relevante para nuestro problema? Supongamos que queremos generar d números aleatorios uniformes, que serían los puntos aleatorios dentro del hipercubo d-dimensional. A continuación, se aplica el muestreo de rechazo para elegir los puntos dentro de la hiperesfera (también conocida como n-ball): $\sum_{i=1}^d x_i^2<R^2$ . El problema es que para un número elevado de dimensiones d, ¡casi todos los puntos estarán fuera de la esfera! Acabarás desechando la gran mayoría de tus muestras.
La solución que propongo es utilizar el muestreo de rechazo con sobremuestreo de los puntos cercanos al centro. Resulta que si se observara una de las coordenadas cartesianas de la muestra aleatoria uniforme del interior de la bola, su distribución convergería a una gaussiana con varianza $\frac 1 {\sqrt{d+2}}$ . Así, en lugar de elegir puntos uniformemente del cubo, muestreamos las coordenadas cartesianas utilizando la gaussiana, y luego aplicamos el muestreo de rechazo sobre ellas. De esta manera no estaríamos desperdiciando tantas variantes aleatorias generadas. Esto sería una forma de técnica de muestreo de importancia.