Ist das richtig ? (Erzeugen eines abgeschnittenen norm-multivariaten Gaußschen)


10

Wenn XRn, XN(0_,σ2I) dh

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

Ich möchte eine analoge Version einer abgeschnittenen Normalverteilung in einem multivariaten Fall.

Genauer gesagt möchte ich ein normbeschränktes (auf einen Wert a ) multivariates Gaußsches Y st erzeugen . f X ( y ) ,  wenn  | | y | | ein 0 ,  sonst  .

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

Jetzt beobachte ich folgendes:

Wenn x=(x1,x2,,xn) , ||x||a

|xn|Tmax(0,(a21n1xi2))

Daher kann man durch Auswahl von als Gaußsche Stichproben als Stichprobe aus einer Verteilung der abgeschnittenen Normalverteilung (nach einem Gaußschen Schwanz ) , mit Ausnahme seines zufällig ausgewählten Vorzeichens mit der Wahrscheinlichkeit .x1,,xn1xnTNT(0,σ2)1/2

Meine Frage lautet nun:

Wenn ich jede Vektorprobe von(x1,,xn)(X1,,Xn) als, generiere

x1,,xn1N(0,σ2)

und

xn=Z1Z2  wobei , , (dh a abgeschnittenes skalar-normales RV mit Z1{±1 w.p. 1/2}Z2NT(0,σ2)T(x1,,xn1)max(0,(a21n1xi2))

Wird ein normbeschränkter ( ) multivariater Gaußscher sein? (dh wie oben definiertes ). Wie soll ich überprüfen? Irgendwelche anderen Vorschläge, wenn dies nicht der Weg ist?(X1,X2,,Xn)aY

BEARBEITEN:

Hier ist ein Streudiagramm der Punkte im 2D-Fall, wobei die Norm auf Werte über "1" abgeschnitten ist. Norm-abgeschnittenes multivariates Gaußsches

Hinweis: Im Folgenden finden Sie einige gute Antworten, aber die Begründung, warum dieser Vorschlag falsch ist, fehlt. In der Tat ist das der Hauptpunkt dieser Frage.


1
@ Xi'an Vielen Dank für Ihre Anfrage und Ihr Interesse. Hier ist meine Begründung für Ihren Punkt: Der fragliche Algorithmus benötigt RVs , Gaußsche und abgeschnittene Gaußsche, wenn sie pro Stichprobe gesehen werden ; Insbesondere variiert eine der Verteilungen jede Probe. Sie sind nicht die jeweiligen Ränder. Weil jedes in zwei Begriffen erscheint: und ; und ist eindeutig zeitlich variierend, da die Kürzungsschwelle für jede Probe variiert. Der von Ihnen vorgelegte Zerlegungsnachweis weist im gleichen Sinne ein Problem auf. Marginals sind einfach nicht verfügbar. X1Xnn1xi,i=1,,n1xixnxn
Liebt Wahrscheinlichkeit

Ihr (falscher) Algorithmus generiert zuerst und dann gegeben . Daher ist die erste Generation vom Rand und die zweite Generation vom Bedingten. Mein Beweis zeigt, dass der Rand keine (n-1) dimensionale Gaußsche Verteilung ist.
X1,,Xn1N(0,σ2)
XnNT(0,σ2)
X1,,Xn1
Xi'an

@ Xi'an Bedingte Gaußsche bedeutet nicht marginale Gaußsche !!
Liebt Wahrscheinlichkeit

@ Xi'an Okay, mein Punkt ist dies. Wenn als Gaußsche Werte generiert werden und spätere Terme von diesen Werten abhängen, sind die Ränder von keine Gaußschen Werte . Was Sie gesagt haben, ist genau das gleiche. Sie könnten "bedingt Gauß" sein, aber definitiv nicht "geringfügig Gauß". Mein früherer Kommentar bedeutet das. X1,,Xn1X1,,Xn1
Liebt Wahrscheinlichkeit

1
@ Xi'an Vielen Dank für Ihre geduldigen Antworten. Ich habe endlich meinen Fehler mit Ihrer Anregung verstanden und auch meine eigene ausführliche Antwort geschrieben , die das gleiche erklärt. Aber sorry, ich hoffe es macht Ihnen nichts aus, ich sollte wahrscheinlich Whubers Antwort auf seine detaillierte Erklärung akzeptieren, die bei der tatsächlichen Lösung des Problems hilft.
Liebt Wahrscheinlichkeit

Antworten:


11

Die multivariate Normalverteilung von ist sphärisch symmetrisch. Die gesuchte Verteilung schneidet den Radius unten bei . Da dieses Kriterium nur von der Länge von abhängt , bleibt die abgeschnittene Verteilung sphärisch symmetrisch. Da unabhängig vom Kugelwinkelund hat eine -Verteilung . Sie können daher in nur wenigen einfachen Schritten Werte aus der abgeschnittenen Verteilung generieren:Xρ=||X||2aXρX/||X||ρσχ(n)

  1. Generiere .XN(0,In)

  2. Erzeugen Sie als Quadratwurzel einer bei abgeschnittenen -Verteilung .Pχ2(d)(a/σ)2

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

In Schritt 1 wird als eine Folge von unabhängigen Realisierungen einer normalen Standardvariablen erhalten.Xd

In Schritt 2 wird leicht durch Invertieren der Quantilfunktion einer -Verteilung erzeugt: Erzeugen einer einheitlichen Variablen die im Bereich (von Quantilen) zwischen und und setze .PF1χ2(d)UF((a/σ)2)1P=F(U)

Hier ist ein Histogramm von solcher unabhängigen Realisierungen von für in Dimensionen, unten abgeschnitten bei . Die Generierung dauerte ungefähr eine Sekunde, was die Effizienz des Algorithmus bestätigt.105σPσ=3n=11a=7

Zahl

Die rote Kurve ist die Dichte einer abgeschnittenen -Verteilung, skaliert mit . Die enge Übereinstimmung mit dem Histogramm ist ein Beweis für die Gültigkeit dieser Technik.χ(11)σ=3

Um eine Intuition für die Kürzung zu erhalten, betrachten Sie den Fall , in Dimensionen. Hier ist ein von gegen (für unabhängige Realisierungen). Es zeigt deutlich das Loch im Radius :a=3σ=1n=2Y2Y1104a

Figur 2

Schließlich ist zu beachten, dass (1) die Komponenten identische Verteilungen haben müssen (aufgrund der sphärischen Symmetrie) und (2) außer wenn , dass diese gemeinsame Verteilung nicht normal ist. Tatsächlich bewirkt die schnelle Abnahme der (univariaten) Normalverteilung , wenn groß wird, dass sich der größte Teil der Wahrscheinlichkeit, dass sich die sphärisch abgeschnittene multivariate Normalverteilung nahe der Oberfläche der Kugel (mit dem Radius ) zusammenballt. Die Randverteilung muss sich daher einer skalierten symmetrischen Beta -Verteilung annähern, die im Intervall . Dies ist im vorherigen Streudiagramm ersichtlich, in demXia=0an1a((n1)/2,(n1)/2)(a,a)a=3σist bereits in zwei Dimensionen groß: Die Punkte begrenzen einen Ring (eine Kugel) mit dem Radius .213σ

Hier sind Histogramme der Randverteilungen aus einer Simulation der Größe in Dimensionen mit , (für die die ungefähre Beta -Verteilung gleichmäßig ist):1053a=10σ=1(1,1)

Figur 3

Da die ersten Ränder des in der Frage beschriebenen Verfahrens (konstruktionsbedingt) normal sind, kann dieses Verfahren nicht korrekt sein.n1


Der folgende RCode erzeugte die erste Abbildung. Es ist zu parallelen Schritten 1-3 zum Erzeugen von . Es wurde modifiziert , die zweite Zahl durch Ändern Variablen zu erzeugen , , und und dann den Plot Befehl ausgibt , nachdem generiert wurde.Yadnsigmaplot(y[1,], y[2,], pch=16, cex=1/2, col="#00000010")y

Die Erzeugung von wird in dem Code für höhere numerische Auflösung geändert: der Code erzeugt tatsächlich und verwenden diese zur Rechen .U1UP

Dieselbe Technik, Daten nach einem vermeintlichen Algorithmus zu simulieren, sie mit einem Histogramm zusammenzufassen und ein Histogramm zu überlagern, kann verwendet werden, um die in der Frage beschriebene Methode zu testen. Es wird bestätigt, dass die Methode nicht wie erwartet funktioniert.

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
Das ist eine wundervolle Antwort! Aber können Sie auch freundlich etwas Licht ins Dunkel bringen, warum der fragliche Vorschlag fehlschlägt? (Xi'an Antwort ist nicht zufriedenstellend genug, ich sehe ein Problem mit seiner Argumentation, zB wenn er integriert)
Loves Probability

1
Vielen Dank. Darf ich Sie aber auch bitten, auf meinen ersten Kommentar oben zu antworten? Es scheint, mein Vorschlag gibt auch ein gutes Histogramm nahe genug. Ich bin verwirrt!! Wo ist der Fehler? Beachten Sie, dass dies der Hauptpunkt der Frage ist und WENN RICHTIG , benötigt die Methode nur ein "abgeschnittenes Gaußsches" Beispiel PLUS. Mit der Verfügbarkeit vorhandener schneller Algorithmen führt dies zu enormen Einsparungen (vermeidet zusätzlich Divisionen und Multiplikationen) Vermeidung der Notwendigkeit eines relativ komplexeren abgeschnittenen ChiSquare)
Liebt die Wahrscheinlichkeit

2
Soweit ich das beurteilen kann, schlagen Sie vor, iid aus einer Normalverteilung und aus einer zweiseitig abgeschnittenen Normalen zu zeichnen . Das ist so offensichtlich keine abgeschnittene MVN-Verteilung, wie ein Streudiagramm für leicht zeigen wird, dass ich glaube, dass ich diesen Teil Ihrer Frage nicht verstehen konnte. Im Allgemeinen liegt die Last der Fragen, die fragen, warum etwas nicht funktioniert, beim Fragesteller, um zu beweisen, dass es funktioniert . Wenn Sie solche Beweise vorlegen würden, würde die Art Ihrer Frage möglicherweise klar werden. X1,,Xn1Xnn=2
whuber

1
Danke für die Details. Ich habe, wie Sie sagten, ein 2-D-Streudiagramm hinzugefügt und einige Sätze korrigiert. Tut mir leid, ich wollte Ihnen eigentlich nicht die gesamte Beweislast übertragen. Mein Vorschlag scheint bei allen einfachen Überprüfungen in Ordnung zu sein, daher bin ich gespannt, warum er falsch ist, was auch der Hauptzweck dieser Frage ist.
Liebt Wahrscheinlichkeit

1
Die Betrachtung der Randverteilungen ist der einfachste Weg, um die Unterschiede in den Verfahren zu veranschaulichen. Ich habe eine Abbildung und einen Code hinzugefügt, um diese Ränder anzuzeigen.
whuber

7

Ich habe dies unter der Annahme geschrieben, dass Sie keine Punkte mit || y || wollen > a, das ist das Analogon der üblichen eindimensionalen Kürzung. Sie haben jedoch geschrieben, dass Sie Punkte mit | y || behalten möchten > = a und wirf die anderen raus. Trotzdem kann die offensichtliche Anpassung an meine Lösung vorgenommen werden, wenn Sie wirklich Punkte mit | y || behalten möchten > = a.

Der einfachste Weg, der zufällig eine sehr allgemeine Technik ist, ist die Verwendung von Acceptance-Rejection https://en.wikipedia.org/wiki/Rejection_sampling . Es wird ziemlich schnell sein, solange Prob (|| X ||> a) ziemlich niedrig ist, weil es dann nicht viele Ablehnungen geben wird.

Generieren Sie einen Beispielwert x aus der nicht eingeschränkten multivariaten Normalen (obwohl Ihr Problem besagt, dass die multivariate Normalität sphärisch ist, kann die Technik angewendet werden, auch wenn dies nicht der Fall ist). Wenn || x || <= a, akzeptiere, dh benutze x, lehne es ab und generiere eine neue Stichprobe. Wiederholen Sie diesen Vorgang, bis Sie so viele akzeptierte Proben haben, wie Sie benötigen. Die Anwendung dieser Prozedur bewirkt, dass y so erzeugt wird, dass seine Dichte c * f_X (y) ist, wenn || y || <= a und 0 wenn || y || > a, gemäß meiner Korrektur des ersten Teils Ihrer Frage. Sie müssen niemals c berechnen; Es wird vom Algorithmus automatisch anhand der Häufigkeit bestimmt, mit der Abtastwerte verworfen werden.


3
+1 Ich finde es gut, dass Ihr Vorschlag mit nicht sphärisch symmetrischen MVNs funktioniert, dass Sie die Umstände, unter denen er wirksam sein wird, klar beschrieben haben und dass Sie die Notwendigkeit betonen, die Ablehnungsrate bei der Entscheidung über die Verwendung der Ablehnungsstichprobe zu bewerten.
whuber

2
Ja, und beachten Sie auch, dass es für beliebig geformte Akzeptanzbereiche funktionieren kann, nicht nur für die 2-Norm, die wie hier über oder unter einem Schwellenwert liegt.
Mark L. Stone

5

Dies ist ein schöner Versuch, aber er funktioniert aufgrund der "Normalisierungskonstante" nicht: Wenn Sie die berücksichtigen die Zerlegung

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
das in in zeigt das
fXn(xn)P(Xn2>a2||xn||2)(2πσ2)(n1)/2exp(||xn||22σ2)
xn
  1. Die bedingte Verteilung von bei den anderen Komponenten ist eine abgeschnittene Normalverteilung;XnXn
  2. Die Randverteilung der anderen Komponenten, , ist aufgrund des zusätzlichen Terms keine Normalverteilung. ;;XnP(Xn2>a2||xn||2)

Die einzige Möglichkeit, diese Eigenschaft zu nutzen, besteht darin, einen Gibbs-Sampler einzeln auszuführen und dabei die abgeschnittenen normalen bedingten Verteilungen zu verwenden.


1
Vielen Dank für die ausführliche Antwort. Nur zur Klarstellung, die Fläche unter Ihrer Dichte (zweite Gleichung) summiert sich nicht zu 1 !! --- Ich denke, sobald es korrigiert ist, wird es den "Normalisierungsfaktor" aufheben, von dem Sie sprechen. Irgendwelche Gedanken? fX(x)
Liebt Wahrscheinlichkeit

3

Die Frage ergibt sich aus der Idee, - die grundlegende bedingte Zerlegung von Gelenkverteilungen - zu verwenden, um Vektorproben zu ziehen.

Sei ein multivariater Gaußscher mit iid-Komponenten.X

Sei und Prob(||X||>a)TYX.I||X||>a

Der fragliche Algorithmus wird basierend auf der folgenden (alles korrekte, aber täuschende Interpretation) bedingten Faktorisierung vorgeschlagen:

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??

Die kürzeste Antwort ist, dass der letztere Faktor kein abgeschnittener Gaußscher (noch wichtiger) nicht einmal eine Verteilung ist.


Hier ist die detaillierte Erklärung, warum die obige Faktorisierung selbst einen grundlegenden Fehler aufweist. In einem einzigen Satz: Jede bedingte Faktorisierung einer bestimmten gemeinsamen Verteilung muss einige sehr grundlegende Eigenschaften erfüllen, und die obige Faktorisierung erfüllt diese nicht (siehe unten).

Wenn wir jemals dann ist im der Rand von und ist die bedingte Verteilung von . Was bedeutet:fXY(x,y)=fX(x)fY|X(y|x)fX(x)XfY|X(y|x)Y

  1. Der Faktor "angenommen als" muss eine Verteilung sein. Und,f(x,y)fX(x)
  2. Der zweite Faktor "angenommen als" muss eine Verteilung für jede Wahl vonfY|X(y|x)x

Im obigen Beispiel versuchen wir, als zu konditionieren . Dies bedeutet, dass die Eigenschaft 1 für den Faktor Gauß gelten sollte und die Eigenschaft 2 für den letzten Teil gelten sollte.Yn|(Y1Yn1)

Es ist klar, dass die Eigenschaft 1 beim ersten Faktor gilt. Aber das Problem ist mit der Eigenschaft-2. Der letzte Faktor oben ist leider überhaupt keine Verteilung (vergessen Sie Truncated Gaussian) für fast jeden Wert von !!(Y1Yn1)


Ein solcher Vorschlag eines Algorithmus ist wahrscheinlich das Ergebnis des folgenden Missverständnisses: Sobald eine Verteilung auf natürliche Weise aus einer gemeinsamen Verteilung herausgerechnet wird (wie oben in Gauß), führt dies zu einer bedingten Faktorisierung. ---- Das tut es nicht! ---- Der andere (zweite) Faktor muss ebenfalls gut sein.


Hinweis: Es gibt eine großartige Antwort von @whuber, die das Problem der Erzeugung eines normkürzeten multivariaten Gaußschen tatsächlich löst. Ich akzeptiere seine Antwort. Diese Antwort dient nur dazu, mein eigenes Verständnis und die Entstehung der Frage zu klären und zu teilen.


2
+1 Vielen Dank, dass Sie uns Ihre Gedanken mitgeteilt haben: Sie geben diesem Thread wertvolle Einblicke.
whuber
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.