Comment échantillonner uniformément à la surface d'un hyper-ellipsoïde (distance de Mahalanobis constante)?

12

Dans un cas multivarié à valeur réelle, existe-t-il un moyen d'échantillonner uniformément les points de la surface où la distance de Mahalanobis à la moyenne de la est constante?

EDIT: Cela se résume à des points d'échantillonnage uniformément à partir de la surface d'un hyper-ellipsoïde qui satisfait l'équation,

(xμ)TΣ1(xμ)=d2.

Pour être plus précis, par "uniformément", j'entends un échantillon tel que chaque élément de surface dA de l'hyper-surface contienne la même masse de probabilité.

sachin vernekar
la source
1
XcE[X]
1
Je pense que nous aurons besoin d'une définition appropriée de «uniformément». La raison en est la suivante: en deux dimensions, cet ensemble de points se trouve le long d'une ellipse. Est-il censé échantillonner à partir de cette ellipse de telle manière que des longueurs égales aient des chances égales, ou que des angles égaux aient des chances égales, ou que des longueurs égales lorsque les variables soient normalisées aient des chances égales, ou d'une autre manière? Si vous pouviez expliquer ce que cet échantillonnage vise à réaliser, cela pourrait nous donner suffisamment d'informations pour savoir ce que vous essayez de demander.
whuber
1
Je comprends que l'échantillonnage uniforme de la surface de la sphère, puis sa mise en correspondance avec l'ellipsoïde ne donnera pas d'échantillons uniformes sur l'ellipsoïde. J'ai donc besoin d'une méthode qui échantillonne uniformément à la surface d'un ellipsoïde.
sachin vernekar
1
Voulez-vous que l'échantillon soit uniforme à la surface d'un ellipsoïde, dans le sens où chaque élément de surface dA de l'hyper-surface contient la même masse de probabilité?
Sextus Empiricus
1
Pourquoi, comment et où allez-vous appliquer cet échantillon uniforme? Ces informations peuvent aider à proposer une stratégie optimale / suffisante. Par exemple, lorsque les différents axes ellipsoïdes ne sont pas très différents, vous pouvez utiliser l'échantillonnage de rejet en (1) échantillonnant sur une sphère, (2) en la comprimant dans un ellipsoïde, (3) calculez la vitesse à laquelle la surface a été comprimée (4) rejeter les échantillons selon l'inverse de ce taux.
Sextus Empiricus

Réponses:

4

Lorsque les différents axes ellipsoïdes ne sont pas trop différents, il est possible d'utiliser l'échantillonnage de rejet (avec de grandes différences, vous rejetez beaucoup ce qui le rend moins faisable)

  • (1) échantillon sur une hyper-sphère
  • (2) le serrant dans un hyper-ellipsoïde
  • (3) calculer le taux de compression de la surface
  • (4) rejeter les échantillons selon ce taux.

Exemple 2D

exemple

set.seed(1)
#some matrix to transform n-sphere (in this case 2x2)
m <- matrix(c(1, 0.55, 0.55, 0.55), 2)

# sample multinomial with identity covariance matrix
x <- cbind(rnorm(3000, 0, 1), rnorm(3000, 0, 1))
l1 <- sqrt(x[,1]^2 + x[,2]^2)

# perpendicular vector
per <- cbind(x[,2], -x[,1])

# transform x
x <- x %*% m
# transform perpendicular vector (to see how the area transforms)
per2 <- per %*% m

# get onto unit-"sphere"/ellipsoid
x <- x/l1

# this is how the area contracted
contract <- sqrt(per2[,1]^2 + per2[,2]^2) / sqrt(per[,1]^2 + per[,2]^2)

# then this is how we should choose to reject samples 
p <- contract/max(contract)

# rejecting
choose <- which( rbinom(n=length(p), size=1, p=p) == 1)

#plotting
plot(x[1:length(choose), 1], x[1:length(choose), 2],
     xlim=c(-1.2, 1.2), ylim=c(-1.2, 1.2),
     xlab = expression(x[1]), ylab = expression(x[2]),
     bg=rgb(0, 0, 0, 0.01), cex=0.6, pch=21, col=rgb(0, 0, 0, 0.01))
title("squeezed uniform circle \n ")

#plotting
plot(x[choose,1], x[choose,2],
     xlim=c(-1.2, 1.2), ylim=c(-1.2, 1.2),
     xlab = expression(x[1]), ylab = expression(x[2]),
     bg=rgb(0, 0, 0, 0.01), cex=0.6, pch=21, col=rgb(0, 0, 0, 0.01))
title("squeezed uniform circle \n  with rejection sampling")
Sextus Empiricus
la source