Est-ce correct ? (génération d'une gaussienne multivariée à normes tronquées)


10

Si c'est-à-dire XRn, XN(0_,σ2I)

fX(x)=1(2πσ2)n/2exp(||x||22σ2)

Je veux une version analogue d'une distribution normale tronquée dans un cas multivarié.

Plus précisément, je veux générer une norme-contrainte (à une valeur ) gaussienne multivariée st oùY f Y ( y ) = { c . f X ( y ) ,  si  | | y | | a 0 ,  sinon  . c = 1aY

fY(y)={c.fX(y), if ||y||a0, otherwise .
c=1Prob{||X||a}

Maintenant, j'observe ce qui suit:

Si ,| | x | | ax=(x1,x2,,xn)||x||a

|xn|Tmax(0,(a21n1xi2))

Par conséquent, en choisissant x1,,xn1 comme échantillons gaussiens, on peut restreindre xn comme échantillon à une distribution normale tronquée (suivant une queue gaussienne T ) distribution NT(0,σ2) , à l'exception de son signe choisi au hasard avec une probabilité 1/2 .

Maintenant ma question est la suivante,

Si je génère chaque échantillon vectoriel (x1,,xn) de (X1,,Xn) comme,

x1,,xn1N(0,σ2)

et

Z 1{ ± 1 w.p. 1 / 2 } Z 2 ~ N T ( 0 , σ 2 ) T ( x 1 , ... , x n - 1 ) xn=Z1Z2  où, , , (c'est-à-dire un RV tronqué-scalaire-normal avec Z1{±1 w.p. 1/2}Z2NT(0,σ2)T(x1,,xn1)max(0,(a21n1xi2))

Est-ce que une contrainte normative ( ) à plusieurs variables gaussienne? (c'est-à-dire identique à défini ci-dessus). Comment dois-je vérifier? D'autres suggestions si ce n'est pas le cas?a Y(X1,X2,,Xn)aY

ÉDITER:

Voici un nuage de points des points dans le cas 2D avec une norme tronquée à des valeurs supérieures à "1" Gaussien multivarié tronqué aux normes

Remarque: Il y a quelques bonnes réponses ci-dessous, mais la justification de la raison pour laquelle cette proposition est erronée manque. En fait, c'est le point principal de cette question.


1
@ Xi'an Merci pour votre requête et votre intérêt. Voici mon raisonnement pour votre point: l'algorithme en question a besoin de RVs , qui sont gaussiens et un gaussien tronqué quand ils sont vus par échantillon ; plus précisément, l'une des distributions varie chaque échantillon. Ce ne sont pas les marginaux respectifs. Parce que, chaque apparaît en deux termes: et ; et varie clairement dans le temps car le seuil de troncature varie pour chaque échantillon. La preuve de décomposition que vous avez fournie a un problème exactement dans le même sens. Les marginaux ne sont tout simplement pas disponibles. n - 1 x i , i = 1 , , n - 1 x i x n x nX1Xnn1xi,i=1,,n1xixnxn
Aime la probabilité

Votre algorithme (incorrect) génère d'abord puis étant donné . Par conséquent, la première génération est issue du marginal et la deuxième génération est issue du conditionnel. Ma preuve montre que le marginal n'est pas une distribution gaussienne dimensionnelle (n-1). X nN T ( 0 , σ 2 ) X 1 , , X n - 1
X1,,Xn1N(0,σ2)
XnNT(0,σ2)
X1,,Xn1
Xi'an

@ Xi'an gaussien conditionnel ne signifie pas gaussien marginal !!
Loves Probability

@ Xi'an D'accord, mon point est le suivant. Lorsque sont générés en tant que gaussiens et que les termes ultérieurs dépendent de ces valeurs, les marginaux de ne seront pas gaussiens. Ce que vous avez dit est exactement le même. Ils peuvent être "conditionnellement gaussiens" mais certainement pas "marginalement gaussiens". Mon commentaire précédent signifie cela. X 1 , , X n - 1X1,,Xn1X1,,Xn1
Loves Probability du

1
@ Xi'an Merci beaucoup pour les réponses de vos patients. J'ai finalement compris mon erreur avec votre stimulation, et j'ai également écrit ma propre réponse détaillée expliquant la même chose. Mais désolé, j'espère que cela ne vous dérange pas, je devrais probablement accepter la réponse de whuber pour son explication détaillée qui aide à résoudre le problème.
Loves Probability

Réponses:


11

La distribution normale multivariée de est sphériquement symétrique. La distribution que vous recherchez tronque le rayon ci-dessous en . Étant donné que ce critère ne dépend que de la longueur de , la distribution tronquée reste sphérique symétrique. Puisque est indépendant de l'angle sphériqueet a la distribution , vous pouvez donc générer des valeurs de la distribution tronquée en quelques étapes simples de:ρ = | | X | | 2 a X ρ X / | | X | | ρXρ=||X||2aXρX/||X||χ ( n )ρσχ(n)

  1. Générez .XN(0,In)

  2. Générez comme racine carrée d'une tronquée en .χ 2 ( d ) ( a / σ ) 2Pχ2(d)(a/σ)2

  3. Soit.Y=σPX/||X||

À l'étape 1, est obtenu comme une séquence de réalisations indépendantes d'une variable normale standard.dXd

À l'étape 2, est facilement généré en inversant la fonction quantile d'une : générer une variable uniforme supportée dans la plage (de quantiles) entre et et définissez .F - 1 χ 2 ( d ) U F ( ( a / σ ) 2 ) 1 P = PF1χ2(d)UF((a/σ)2)1P=F(U)

Voici un histogramme de telles réalisations indépendantes de pour en dimensions, tronquées ci-dessous à . Il a fallu environ une seconde pour générer, attestant de l'efficacité de l'algorithme. σ P σ = 3 n = 11 a = 7105σPσ=3n=11a=7

Figure

La courbe rouge est la densité d'une tronquée mise à l'échelle par . Sa correspondance étroite avec l'histogramme prouve la validité de cette technique.σ = 3χ(11)σ=3

Pour obtenir une intuition pour la troncature, considérons le cas , dans dimensions. Voici un nuage de points de contre (pour réalisations indépendantes). Il montre clairement le trou au rayon :σ = 1 n = 2 Y 2 Y 1 10 4 aa=3σ=1n=2Y2Y1104a

Figure 2

Enfin, notez que (1) les composants doivent avoir des distributions identiques (en raison de la symétrie sphérique) et (2) sauf lorsque , cette distribution commune n'est pas normale. En fait, à mesure grandit, la diminution rapide de la distribution normale (univariée) fait que la plupart des probabilités que la normale multivariée tronquée sphérique se regroupent près de la surface de la sphère (de rayon ). La distribution marginale doit donc se rapprocher d'une distribution symétrique Beta concentrée dans l'intervalle . Ceci est apparent dans le diagramme de dispersion précédent, oùXia=0an1a((n1)/2,(n1)/2)(a,a)a=3σest déjà grand en deux dimensions: les points limn un anneau (une sphère ) de rayon .213σ

Voici des histogrammes des distributions marginales d'une simulation de taille en dimensions avec , (pour laquelle la distribution approximative Beta est uniforme):1053a=10σ=1(1,1)

figure 3

Étant donné que les premiers marginaux de la procédure décrite dans la question sont normaux (par construction), cette procédure ne peut pas être correcte.n1


Le Rcode suivant a généré la première figure. Il est conçu pour des mesures parallèles 1-3 pour générer . Il a été modifié pour générer le deuxième chiffre par des variables changeantes , , et puis de lancer la commande plot après a été généré.Yadnsigmaplot(y[1,], y[2,], pch=16, cex=1/2, col="#00000010")y

La génération de est modifié dans le code de résolution numérique plus élevé: le code génère effectivement et l' utilise pour calculer .U1UP

La même technique de simulation des données selon un algorithme supposé, de les résumer avec un histogramme et de superposer un histogramme peut être utilisée pour tester la méthode décrite dans la question. Il confirmera que la méthode ne fonctionne pas comme prévu.

a <- 7      # Lower threshold
d <- 11     # Dimensions
n <- 1e5    # Sample size
sigma <- 3  # Original SD
#
# The algorithm.
#
set.seed(17)
u.max <- pchisq((a/sigma)^2, d, lower.tail=FALSE)
if (u.max == 0) stop("The threshold is too large.")
u <- runif(n, 0, u.max)
rho <- sigma * sqrt(qchisq(u, d, lower.tail=FALSE)) 
x <- matrix(rnorm(n*d, 0, 1), ncol=d)
y <- t(x * rho / apply(x, 1, function(y) sqrt(sum(y*y))))
#
# Draw histograms of the marginal distributions.
#
h <- function(z) {
  s <- sd(z)
  hist(z, freq=FALSE, ylim=c(0, 1/sqrt(2*pi*s^2)),
       main="Marginal Histogram",
       sub="Best Normal Fit Superimposed")
  curve(dnorm(x, mean(z), s), add=TRUE, lwd=2, col="Red")
}
par(mfrow=c(1, min(d, 4)))
invisible(apply(y, 1, h))
#
# Draw a nice histogram of the distances.
#
#plot(y[1,], y[2,], pch=16, cex=1/2, col="#00000010") # For figure 2
rho.max <- min(qchisq(1 - 0.001*pchisq(a/sigma, d, lower.tail=FALSE), d)*sigma, 
               max(rho), na.rm=TRUE)
k <- ceiling(rho.max/a)
hist(rho, freq=FALSE, xlim=c(0, rho.max),  
     breaks=seq(0, max(rho)+a, by=a/ceiling(50/k)))
#
# Superimpose the theoretical distribution.
#
dchi <- function(x, d) {
  exp((d-1)*log(x) + (1-d/2)*log(2) - x^2/2 - lgamma(d/2))
}
curve((x >= a)*dchi(x/sigma, d) / (1-pchisq((a/sigma)^2, d))/sigma, add=TRUE, 
      lwd=2, col="Red", n=257)

1
C'est une merveilleuse réponse! Mais pouvez-vous également nous éclairer sur les raisons de l'échec de la proposition en question? (La réponse de Xi'an n'est pas assez satisfaisante, je vois un problème avec son argument, par exemple quand il s'intègre)
Loves Probability

1
Merci beaucoup. Mais, puis-je également vous demander de répondre à mon premier commentaire ci-dessus? Il semble que ma proposition donne également un bon histogramme assez proche. Je suis confus!! Où est l'erreur? Notez que, c'est le point principal de la question et SI CORRECT , la méthode n'a besoin que d'un échantillon "gaussien tronqué" PLUS Avec la disponibilité des algorithmes rapides existants, elle conduit à des économies énormes (évite les divisions et les multiplications, en plus de en évitant le besoin d'un ChiSquare tronqué relativement plus complexe)
Loves Probability

2
Autant que je sache, vous proposez de dessiner iid à partir d'une distribution normale et partir d'une normale tronquée à deux côtés. Ce n'est donc évidemment pas une distribution MVN tronquée, comme un nuage de points pour le révélera facilement, que je crois que je n'ai pas pu comprendre cette partie de votre question. De manière plus générale, la charge de questions qui demandent pourquoi quelque chose ne pas le travail est le demandeur de fournir la preuve qu'il fait le travail. Peut-être que si vous fournissiez une telle preuve, la nature de votre question deviendrait claire. X n n = 2X1,,Xn1Xnn=2
whuber

1
Merci pour les détails. J'ai ajouté un nuage de points 2D comme vous l'avez dit et corrigé quelques phrases. Au fait, désolé, je ne voulais pas vraiment vous transférer la charge totale de la preuve. Ma proposition semble fonctionner correctement avec toutes les vérifications simples, donc je suis curieux de savoir pourquoi elle est erronée, ce qui est également l'objectif principal de cette question.
Loves Probability

1
L'examen des distributions marginales est le moyen le plus simple que j'ai pu trouver pour illustrer les différences dans les procédures. J'ai ajouté un chiffre et du code pour montrer ces marginaux.
whuber

7

J'ai écrit ceci en supposant que vous ne voulez pas que les points aient || y || > a, qui est l'analogue de la troncature unidimensionnelle habituelle. Cependant, vous avez écrit que vous souhaitez conserver les points avec | y || > = a et jetez les autres. Néanmoins, l'ajustement évident à ma solution peut être fait si vous voulez vraiment garder des points avec | y || > = a.

La manière la plus simple, qui se trouve être une technique très générale, consiste à utiliser Acceptance-Rejection https://en.wikipedia.org/wiki/Rejection_sampling . Ce sera assez rapide tant que Prob (|| X ||> a) est assez faible, car alors il n'y aura pas beaucoup de rejets.

Générez un échantillon de valeur x à partir de la normale multivariée sans contrainte (même si votre problème indique que la normale multivariée est sphérique, la technique peut être appliquée même si elle ne l'est pas). Si || x || <= a, acceptez, c'est-à-dire, utilisez x, sinon rejetez-le et générez un nouvel échantillon. Répétez ce processus jusqu'à ce que vous ayez autant d'échantillons acceptés que nécessaire. L'application de cette procédure a pour effet de générer y tel que sa densité soit c * f_X (y), si || y || <= a, et 0 si || y || > a, par ma correction à la partie d'ouverture de votre question. Vous n'avez jamais besoin de calculer c; il est en effet auto-déterminé par l'algorithme en fonction de la fréquence de rejet des échantillons.


3
+1 J'aime que votre proposition fonctionne avec des MVN à symétrie non sphérique, que vous avez clairement décrit les circonstances dans lesquelles elle sera efficace et que vous insistez sur la nécessité d'évaluer le taux de rejet lorsque vous décidez d'utiliser l'échantillonnage de rejet.
whuber

2
Oui, et notez également que cela peut fonctionner pour des régions d'acceptation de forme arbitraire, et pas seulement 2 normes étant au-dessus ou en dessous d'un seuil comme ici.
Mark L. Stone

5

C'est une belle tentative mais cela ne fonctionne pas à cause de la "constante de normalisation": si vous considérez la densité conjointe la décomposition

fX(x)1(2πσ2)n/2exp(||x||22σ2)I||x||>a=1(2πσ2)n/2exp(x12++xn22σ2)I||x||>a
fX(x)1(2πσ2)(n1)/2exp(||xn||22σ2)1(2πσ2)1/2exp(xn22σ2)I||x||>a
=1(2πσ2)(n1)/2exp(||xn||22σ2)1(2πσ2)1/2exp(xn22σ2)I||xn||2+xn2>a2
=P(Xn2>a2||xn||2)(2πσ2)(n1)/2exp(||xn||22σ2)
×P(Xn2>a2||xn||2)1(2πσ2)1/2exp(xn22σ2)Ixn2>a||xn||2
qui s'intègre à dans , montre que
fXn(xn)P(Xn2>a2||xn||2)(2πσ2)(n1)/2exp(||xn||22σ2)
xn
  1. La distribution conditionnelle de étant donné les autres composants, , est une distribution normale tronquée;XnXn
  2. La distribution marginale des autres composants, , n'est pas une distribution normale en raison du terme supplémentaire ; P ( X 2XnP(Xn2>a2||xn||2)

La seule façon dont je peux voir en tirant parti de cette propriété est d'exécuter un échantillonneur Gibbs, un composant à la fois, en utilisant les distributions conditionnelles normales tronquées.


1
Merci beaucoup pour la réponse détaillée. Juste une précision, l'aire sous votre densité (deuxième éq) ne somme pas à 1 !! --- Je pense qu'une fois corrigé, il annulera le "facteur de normalisation" dont vous parlez. Des pensées? fX(x)
Loves Probability

3

La question provient de l'idée d'utiliser - la décomposition conditionnelle de base des distributions conjointes - pour dessiner des échantillons vectoriels.

Soit un gaussien multivarié avec des composants iid.X

Soit et Prob(||X||>a)TYX.I||X||>a

L'algorithme en question est proposé sur la base de la factorisation conditionnelle suivante (tout à fait correcte mais trompeuse):

fY(y)=1T1(2πσ2)n/2exp(||y||22σ2)I||y||>a=1T1(2πσ2)n/2exp(y12++yn22σ2)I||y||>a=(i=1n112πσ2exp(yi22σ2))(1T12πσ2exp(yn22σ2)I||y||>a)=(i=1n112πσ2exp(yi22σ2))Gaussians(1T12πσ2exp(yn22σ2)Iyn2>(a2y12yn12))Truncated Gaussian??

La réponse la plus courte est que ce dernier facteur n'est pas un gaussien tronqué, (surtout) pas même une distribution.


Voici l'explication détaillée des raisons pour lesquelles la factorisation ci-dessus elle-même a un défaut fondamental. En une seule phrase: toute factorisation conditionnelle d'une distribution conjointe donnée doit satisfaire à certaines propriétés très fondamentales, et la factorisation ci-dessus ne les satisfait pas (voir ci-dessous).

En général, si nous factorisons jamais alors est la marge de et est la distribution conditionnelle de . Ce qui signifie:fXY(x,y)=fX(x)fY|X(y|x)fX(x)XfY|X(y|x)Y

  1. Le facteur de "supposé" doit être une distribution. Et,f(x,y)fX(x)
  2. Le deuxième facteur "supposé" doit être une distribution pour chaque choix defY|X(y|x)x

Dans l'exemple ci-dessus, nous essayons de conditionner comme . Cela signifie que la propriété-1 devrait être valable pour le facteur des Gaussiens et la propriété-2 devrait être valable pour la dernière partie.Yn|(Y1Yn1)

Il est clair que la propriété-1 tient bon sur le premier facteur. Mais le problème est avec la propriété-2. Le dernier facteur ci-dessus n'est malheureusement pas du tout une distribution (oubliez le gaussien tronqué) pour presque toutes les valeurs de !!(Y1Yn1)


Une telle proposition d'algorithme est probablement le résultat de l'idée fausse suivante: Une fois qu'une distribution factorise naturellement une distribution conjointe (comme les Gaussiennes ci-dessus), elle conduit à une factorisation conditionnelle. ---- Ce n'est pas le cas! ---- L'autre (deuxième) facteur doit également être bon.


Remarque: Il y a une excellente réponse de @whuber plus tôt, qui résout en fait le problème de la génération d'une norme gaussienne multivariée tronquée. J'accepte sa réponse. Cette réponse n'est que pour clarifier et partager ma propre compréhension et la genèse de la question.


2
+1 Merci de partager vos réflexions: elles ajoutent de précieuses informations à ce fil.
whuber
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.