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,…,Xm∼N(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?