È corretto ? (generazione di una norma troncata multivariata-gaussiana)


10

Se cioè, XRn, XN(0_,σ2I)

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

Voglio una versione analoga di una distribuzione normale troncata in un caso multivariato.

Più precisamente, voglio generare una norma gaussiana multivariata vincolata da una norma (a un valore ) st doveaY

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

Ora osservo quanto segue:

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

|xn|Tmax(0,(a21n1xi2))

Pertanto, scegliendo x1,,xn1 come campioni gaussiani, si può limitare xn come campione da una distribuzione troncata-normale (seguendo una coda gaussiana T ) NT(0,σ2) , ad eccezione del segno scelto casualmente con probabilità 1/2 .

Ora la mia domanda è questa,

Se generi ogni campione vettoriale (x1,,xn) di (X1,,Xn) come,

x1,,xn1N(0,σ2)

e

Z 1{ ± 1 w.p. 1 / 2 } Z 2 ~ N T ( 0 , σ 2 ) T ( x 1 , ... , x n - 1 ) xn=Z1Z2  dove, , , (ovvero un RV normale scalare troncato con Z1{±1 w.p. 1/2}Z2NT(0,σ2)T(x1,,xn1)max(0,(a21n1xi2))

Will essere una norma-vincolata ( ) multivariata gaussiana? (ovvero uguale a definito sopra). Come devo verificare? Qualche altro suggerimento se non è così?a Y(X1,X2,,Xn)aY

MODIFICARE:

Ecco un diagramma a dispersione dei punti nel caso 2D con norma troncata a valori superiori a "1" Gaussiano multivariato troncato a norma

Nota: di seguito sono riportate alcune ottime risposte, ma manca la giustificazione del motivo per cui questa proposta è errata. In effetti, questo è il punto principale di questa domanda.


1
@ Xi'an Grazie per l'interrogazione e l'interesse. Ecco il mio ragionamento per il tuo punto: l'algoritmo in questione necessita di camper , che sono gaussiani e un troncato-gaussiano quando sono visti per campione ; più specificamente, una delle distribuzioni varia ogni campione. Sono Non rispettivi marginali. Perché, ogni appare in due termini: e ; e varia chiaramente nel tempo poiché la soglia di troncamento varia per ogni campione. La prova di decomposizione che hai fornito ha un problema esattamente nello stesso senso. I marginali non sono disponibili. n - 1X1Xnn1x ixi,i=1,,n1xix nxnxn
Ama la probabilità

Il tuo algoritmo (errato) genera e poi dato . Quindi, la prima generazione proviene dal marginale e la seconda generazione dal condizionale. La mia prova mostra che il marginale non è una distribuzione gaussiana dimensionale (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 Gaussiano condizionale non significa gaussiano marginale !!
Loves Probability,

@ Xi'an Va bene, il mio punto è questo. Quando vengono generati come gaussiani e i termini successivi dipendono da questi valori, i margini di non saranno gaussiani. Quello che hai detto è esattamente lo stesso. Potrebbero essere "condizionatamente gaussiani" ma sicuramente non "marginalmente gaussiani". Il mio commento precedente significa questo. X 1 , , X n - 1X1,,Xn1X1,,Xn1
Loves Probability,

1
@ Xi'an Grazie mille per le risposte dei tuoi pazienti. Alla fine ho capito il mio errore con la tua stimolazione e ho anche scritto la mia risposta dettagliata spiegando lo stesso. Ma scusa, spero non ti dispiaccia, probabilmente dovrei accettare la risposta di Whuber per la sua spiegazione dettagliata che aiuta a risolvere il problema.
Loves Probability,

Risposte:


11

La distribuzione normale multivariata di è sfericamente simmetrica. La distribuzione che cerchi tronca il raggio basso a . Poiché questo criterio dipende solo dalla lunghezza di , la distribuzione troncata rimane sfericamente simmetrica. Poiché è indipendente dall'angolo sfericoe ha un la distribuzione , è quindi in grado di generare valori dalla distribuzione troncato in pochi semplici passi:ρ = | | X | | 2 a X ρ X / | | X | | ρXρ=||X||2aXρX/||X||χ ( n )ρσχ(n)

  1. Genera .XN(0,In)

  2. Genera come radice quadrata di una distribuzione troncata in .χ 2 ( d ) ( a / σ ) 2Pχ2(d)(a/σ)2

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

Nel passaggio 1, si ottiene come una sequenza di realizzazioni indipendenti di una variabile normale standard.dXd

Nel passaggio 2, viene prontamente generato capovolgendo la funzione quantile di una distribuzione : genera una variabile uniforme supportata nell'intervallo (di quantili) tra e e impostare .F - 1 χ 2 ( d ) U F ( ( a / σ ) 2 ) 1 P = PF1χ2(d)UF((a/σ)2)1P=F(U)

Ecco un istogramma di tali realizzazioni indipendenti di per in dimensioni, troncato di seguito in . La generazione ha richiesto circa un secondo, a dimostrazione dell'efficienza dell'algoritmo. σ P σ = 3 n = 11 a = 7105σPσ=3n=11a=7

figura

La curva rossa è la densità di una distribuzione troncata di ridimensionata da . La sua stretta corrispondenza con l'istogramma è la prova della validità di questa tecnica.σ = 3χ(11)σ=3

Per ottenere un'intuizione per il troncamento, considera il caso , in dimensioni. Ecco un a dispersione di contro (per realizzazioni indipendenti). Mostra chiaramente il buco nel raggio :σ = 1 n = 2 Y 2 Y 1 10 4 aa=3σ=1n=2Y2Y1104a

figura 2

Infine, si noti che (1) i componenti devono avere distribuzioni identiche (a causa della simmetria sferica) e (2) tranne quando , quella distribuzione comune non è normale. Infatti, come cresce grande, la rapida diminuzione della (univariata) Distribuzione normale provoca la maggior parte della probabilità del multivariata sferica troncata normale a raggrupparsi vicino alla superficie del -sphere (di raggio ). La distribuzione marginale deve quindi approssimare una distribuzione beta simmetrica in scala concentrata nell'intervallo . Ciò è evidente nel grafico a dispersione precedente, dove a = 0 a n - 1 a ( ( n - 1 ) / 2 , ( n - 1 ) / 2 ) ( - a , a ) a = 3 σ 2 - 1 3 σXia=0an1a((n1)/2,(n1)/2)(a,a)a=3σè già grande in due dimensioni: i punti limnano un anello (una sfera ) di raggio .213σ

Ecco gli istogrammi delle distribuzioni marginali da una simulazione di dimensione in dimensioni con , (per cui la distribuzione approssimativa di Beta è uniforme): 3 a = 10 σ = 1 ( 1 , 1 )1053a=10σ=1(1,1)

Figura 3

Poiché i primi marginali della procedura descritta nella domanda sono normali (per costruzione), tale procedura non può essere corretta.n1


Il Rcodice seguente ha generato la prima cifra. È costruito ai passi paralleli 1-3 per la generazione . È stato modificato per generare la seconda cifra da variabili mutevoli , , , e quindi emette il comando plot dopo è stato generato.Yadnsigmaplot(y[1,], y[2,], pch=16, cex=1/2, col="#00000010")y

La generazione di viene modificato nel codice per una maggiore risoluzione numerica: il codice genera effettivamente e l'utilizza per calcolare .1 - U PU1UP

La stessa tecnica di simulazione dei dati secondo un presunto algoritmo, riassumendoli con un istogramma e sovrapponendo un istogramma può essere utilizzata per testare il metodo descritto nella domanda. Confermerà che il metodo non funziona come previsto.

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
Questa è una risposta meravigliosa! Ma puoi anche gentilmente far luce sul perché la proposta in questione fallisce? (La risposta di Xi'an non è abbastanza soddisfacente, vedo qualche problema con la sua argomentazione, ad esempio quando si integra)
Loves Probability

1
Grazie mille. Ma posso anche chiederti di rispondere al mio primo commento sopra? Sembra che anche la mia proposta dia un buon istogramma abbastanza vicino. Sono confuso!! Dov'è l'errore? Si noti che questo è il punto principale della domanda e SE CORRETTO , il metodo richiede un solo campione "troncato-gaussiano" PLUS Con la disponibilità di algoritmi veloci esistenti, porta a un enorme risparmio (evita divisioni e moltiplicazioni, oltre a evitando la necessità di ChiSquare troncato relativamente più complesso)
Loves Probability

2
Per quanto posso dire, proponi di disegnare iid da una distribuzione normale e da una normale troncata su due lati. Questa ovviamente non è una distribuzione MVN troncata, come rivelerà facilmente un diagramma a dispersione per , che credo di non essere stato in grado di comprendere quella parte della tua domanda. Più in generale, l'onere di domande che chiedono il motivo per cui qualcosa dovesse non lavoro è il richiedente di fornire la prova che fa il lavoro. Forse se fornissi tali prove, la natura della tua domanda diventerebbe chiara. X n n = 2X1,,Xn1Xnn=2
whuber

1
Grazie per i dettagli Ho aggiunto un diagramma a dispersione 2D come hai detto e ho corretto alcune frasi. A proposito, scusami non volevo davvero trasferire a te l'onere della prova totale. La mia proposta sembra funzionare bene con tutti i semplici controlli, quindi sono curioso di sapere perché è sbagliata, che è anche lo scopo principale di questa domanda.
Loves Probability il

1
Osservare le distribuzioni marginali è il modo più semplice che ho trovato per illustrare le differenze nelle procedure. Ho aggiunto una figura e un po 'di codice per mostrare questi marginali.
whuber

7

Ho scritto questo presupponendo che non si desideri alcun punto con || y || > a, che è l'analogo del solito troncamento monodimensionale. Tuttavia, hai scritto che desideri mantenere i punti con | y || > = a e butta via gli altri. Tuttavia, l'ovvio adattamento alla mia soluzione può essere apportato se si vuole davvero mantenere punti con | y || > = a.

Il modo più semplice, che sembra essere una tecnica molto generale, è quello di utilizzare Acceptance-Rejection https://en.wikipedia.org/wiki/Rejection_sampling . Sarà abbastanza veloce fintanto che Prob (|| X ||> a) è abbastanza basso, perché non ci saranno molti rifiuti.

Generare un valore campione x dalla Normale multivariata non vincolata (anche se il problema indica che la Normale multivariata è sferica, la tecnica può essere applicata anche se non lo è). Se || x || <= a, accetta, ovvero usa x, altrimenti lo rifiuta e genera un nuovo campione. Ripetere questo processo fino ad avere tutti i campioni accettati di cui hai bisogno. L'effetto dell'applicazione di questa procedura è di generare y in modo tale che la sua densità sia c * f_X (y), se || y || <= a e 0 se || y || > a, secondo la mia correzione alla parte iniziale della tua domanda. Non hai mai bisogno di calcolare c; è in effetti determinato automaticamente dall'algoritmo in base alla frequenza con cui i campioni vengono rifiutati.


3
+1 Mi piace che la tua proposta funzioni con MVN non sferici simmetrici, che tu abbia chiaramente descritto le circostanze in cui sarà efficace e che sottolinei la necessità di valutare il tasso di rifiuto quando decidi se usare il campionamento di rifiuto.
whuber

2
Sì, e nota anche che può funzionare per una o più regioni di accettazione di forma arbitraria, non solo la 2-norma al di sopra o al di sotto di una soglia come qui.
Mark L. Stone,

5

Questo è un bel tentativo ma non funziona a causa della "costante di normalizzazione": se si considera la densità del giunto la decomposizione

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
che si integra con in , mostra che
fXn(xn)P(Xn2>a2||xn||2)(2πσ2)(n1)/2exp(||xn||22σ2)
xn
  1. La distribuzione condizionale di dati gli altri componenti, , è una distribuzione normale troncata;XnXn
  2. La distribuzione marginale degli altri componenti, , non è una distribuzione normale a causa del termine extra ;XnP(Xn2>a2||xn||2)

L'unico modo in cui posso vedere approfittando di questa proprietà è di eseguire un campionatore di Gibbs, un componente alla volta, usando le distribuzioni condizionali normali troncate.


1
Grazie mille per la risposta dettagliata. Solo un chiarimento, l'area sotto la tua densità (seconda eq) non si somma a 1 !! --- Penso che, una volta corretto, annullerà il "fattore di normalizzazione" di cui stai parlando. qualche idea? fX(x)
Loves Probability,

3

La domanda nasce dall'idea di usare - la decomposizione condizionale di base delle distribuzioni congiunte - per disegnare campioni vettoriali.

Sia un gaussiano multivariato con componenti iid.X

Let e Prob(||X||>a)TYX.I||X||>a

L'algoritmo in questione è proposto in base alla seguente fattorizzazione condizionale (interpretazione completamente corretta ma ingannevole):

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 risposta più breve è che quest'ultimo fattore non è un gaussiano troncato, (cosa ancora più importante) nemmeno una distribuzione.


Ecco la spiegazione dettagliata del perché la suddetta fattorizzazione presenta alcuni difetti fondamentali. In una sola frase: l'eventuale fattorizzazione condizionale di una data distribuzione congiunta deve soddisfare alcune proprietà fondamentali, e la suddetta fattorizzazione non le soddisfa (Vedi sotto).

In generale, se mai fattorizziamo allora è il margine di e è la distribuzione condizionata di . Che significa:fXY(x,y)=fX(x)fY|X(y|x)fX(x)XfY|X(y|x)Y

  1. Il fattore di "assunto come" deve essere una distribuzione. E,f(x,y)fX(x)
  2. Il secondo fattore "assunto come" deve essere una distribuzione per ogni scelta difY|X(y|x)x

Nell'esempio sopra, stiamo provando a condizionare come . Significa che la proprietà-1 dovrebbe valere per il fattore gaussiano e la proprietà-2 dovrebbe valere per l'ultima parte.Yn|(Y1Yn1)

È chiaro che la proprietà-1 è valida per il primo fattore. Ma il problema è con la proprietà-2. L'ultimo fattore sopra riportato purtroppo non è affatto una distribuzione (dimentica di Gaussian troncato) per quasi qualsiasi valore di !!(Y1Yn1)


Una simile proposta di algoritmo è probabilmente il risultato del seguente malinteso: una volta che una distribuzione si discosta naturalmente da una distribuzione congiunta (come Gaussians in precedenza), porta a una fattorizzazione condizionale. ---- Non lo fa! ---- Anche l'altro (secondo) fattore deve essere buono.


Nota: c'è una grande risposta di @whuber in precedenza, che in realtà risolve il problema di generare una norma trussata multivariata gaussiana. Sto accettando la sua risposta. Questa risposta è solo per chiarire e condividere la mia comprensione e la genesi della domanda.


2
+1 Grazie per aver condiviso i tuoi pensieri: aggiungono preziose informazioni a questa discussione.
whuber
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.