Muestreando la distribución uniforme sobre la esfera unidad en n dimensiones

Debo esta entrada a la diligencia de Juanjo Gibaja, que se tomó la molestia de ubicar los teoremas relevantes en el libro Simulation and the Monte Carlo Method de Rubinstein y Kroese.

Esencialmente, como la distribución normal multivariante (con matriz de covarianzas I) es simétrica, entonces, dadas X1,,XmN(0,In) independientes, los m puntos del espacion n-dimensional Xi/|Xi| siguen una distribución uniforme sobre su esfera (su superficie, vale la pena reiterar) unidad.

Para muestrear la bola n-dimensional, hay que muestrear primero la esfera (como en el párrafo anterior) y luego generar m variables aletorias Ui con la distribución uniforme. La muestra en la esfera unidad será entonces U1/niXi/|Xi|.

Efectivamente, Xi/|Xi| proporciona la dirección. Y en cuanto a la distancia con respecto al centro hay que tener encuenta que la bola de radio r < 1 contiene sólo un rn del volumen de la bola unidad. Como P(Ui<r)=r, entonces P(U1/n<r)=P(U<rn)=rn.

En R,

n <- 100
d <- 2

x <- matrix( rnorm(d * n), n, d )
x.norma <- sqrt( rowSums( x^2 ) )
u <- runif( n )

plot( x / x.norma, col = "red", xlab = "", ylab = "" )
points( x * u^{1/d} / x.norma, col = "blue" )

Y si alguien quiere ver las rodajas de una distribución uniforme sobre la esfera 5-dimensional, por ejemplo, puede ejecutar

n <- 100
d <- 5

x <- matrix( rnorm(d * n), n, d )
x.norma <- sqrt( rowSums( x^2 ) )
u <- runif( n )

plot( data.frame(x * u^{1/d}/ x.norma ))

¿Le sugiere el gráfico (p.e., los rangos de las proyecciones sobre los distintos ejes) algún comentario?