Es esto correcto ? (generando un Truncated-norm-multivariate-Gaussian)


10

Si es decir, XRn, XN(0_,σ2I)

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

Quiero una versión análoga de una distribución normal truncada en un caso multivariante.

Más precisamente, quiero generar una norma restringida (a un valor a ) Gaussiano multivariante Y st

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

Ahora observo lo siguiente:

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

|xn|Tmax(0,(a21n1xi2))

Por lo tanto, al elegir x1,,xn1 como muestras gaussianas, se puede restringir xn como muestra fuera de una distribución de distribución normal truncada (siguiendo una cola gaussiana T ) NT(0,σ2) , excepto por su signo elegido al azar con probabilidad 1/2 .

Ahora mi pregunta es esta,

Si genero cada muestra de vector (x1,,xn) de (X1,,Xn) como,

x1,,xn1N(0,σ2)

y

xn=Z1Z2  donde, , , (es decir, un RV truncada-escalar-normal con Z1{±1 w.p. 1/2}Z2NT(0,σ2)T(x1,,xn1)max(0,(a21n1xi2))

¿Será un gaussiano multivariado con restricción de norma ( )? (es decir, igual que definido anteriormente). ¿Cómo debo verificar? ¿Alguna otra sugerencia si este no es el camino?(X1,X2,,Xn)aY

EDITAR:

Aquí hay un diagrama de dispersión de los puntos en caso 2D con la norma truncada a valores superiores a "1" Gaussiano multivariado truncado por norma

Nota: Hay algunas respuestas excelentes a continuación, pero falta la justificación de por qué esta propuesta es incorrecta. De hecho, ese es el punto principal de esta pregunta.


1
@ Xi'an Gracias por su consulta e interés. Aquí está mi razonamiento para su punto: el algoritmo en cuestión necesita RVs , que son gaussianos y un gaussiano truncado cuando se ven por muestra ; más específicamente, una de las distribuciones varía cada muestra. Son no las respectivas marginales. Porque, cada aparece en dos términos: y ; y varía claramente en el tiempo ya que el umbral de truncamiento varía para cada muestra. La prueba de descomposición que proporcionó tiene un problema exactamente en el mismo sentido. Los marginales simplemente no están disponibles. X1Xnn1xi,i=1,,n1xixnxn
Ama la probabilidad

Su algoritmo (incorrecto) genera primero y luego dado . Por lo tanto, la primera generación es de lo marginal y la segunda generación es de lo condicional. Mi prueba muestra que el marginal no es una distribución gaussiana dimensional (n-1).
X1,,Xn1N(0,σ2)
XnNT(0,σ2)
X1,,Xn1
Xi'an

@ Xi'an Gaussiano Condicional no significa Gaussiano Marginal !!
Loves Probability

@ Xi'an Bien, mi punto es este. Cuando se generan como gaussianos, y los términos posteriores dependen de estos valores, los de no serán gaussianos. Lo que dijiste es exactamente lo mismo. Pueden ser "condicionalmente gaussianos" pero definitivamente no "marginalmente gaussianos". Mi comentario anterior significa eso. X1,,Xn1X1,,Xn1
Ama la probabilidad

1
@ Xi'an Muchas gracias por las respuestas de tus pacientes. Finalmente entendí mi error con su estimulación, y también he escrito mi propia respuesta detallada explicando lo mismo. Pero lo siento, espero que no te importe, probablemente debería aceptar la respuesta de Whuber por su explicación detallada que ayuda a resolver el problema.
Loves Probability

Respuestas:


11

La distribución normal multivariada de es esféricamente simétrica. La distribución que busca trunca el radio continuación en . Debido a que este criterio depende solo de la longitud de , la distribución truncada permanece esféricamente simétrica. Como es independiente del ángulo esféricoy tiene un de distribución , por lo tanto, se puede generar valores de la distribución truncada en tan sólo unos sencillos pasos:Xρ=||X||2aXρX/||X||ρσχ(n)

  1. Genere .XN(0,In)

  2. Genere como la raíz cuadrada de una truncada en .Pχ2(d)(a/σ)2

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

En el paso 1, se obtiene como una secuencia de realizaciones independientes de una variable normal estándar.Xd

En el paso 2, se genera fácilmente invirtiendo la función cuantil de una : genera una variable uniforme soportada en el rango (de cuantiles) entre y y establezca .PF1χ2(d)UF((a/σ)2)1P=F(U)

Aquí hay un histograma de tales realizaciones independientes de para en dimensiones, truncadas a continuación en . Se tardó aproximadamente un segundo en generar, lo que demuestra la eficacia del algoritmo.105σPσ=3n=11a=7

Figura

La curva roja es la densidad de una truncada de escalada por . Su estrecha coincidencia con el histograma es evidencia de la validez de esta técnica.χ(11)σ=3

Para obtener una intuición para el truncamiento, considere el caso , en dimensiones. Aquí hay un diagrama de dispersión de contra (para realizaciones independientes). Muestra claramente el agujero en el radio :a=3σ=1n=2Y2Y1104a

Figura 2

Finalmente, tenga en cuenta que (1) los componentes deben tener distribuciones idénticas (debido a la simetría esférica) y (2) excepto cuando , esa distribución común no es Normal. De hecho, como crece grande, la rápida disminución de la (univariado) distribución Normal causa la mayoría de la probabilidad de que la multivariable esférica truncada normal a agruparse cerca de la superficie de la -sphere (de radio de ). Por lo tanto, la distribución marginal debe aproximarse a una distribución Beta simétrica a escala concentrada en el intervalo . Esto es evidente en el diagrama de dispersión anterior, dondeXia=0an1a((n1)/2,(n1)/2)(a,a)a=3σya es grande en dos dimensiones: los puntos forman un anillo (una esfera ) de radio .213σ

Aquí hay histogramas de las distribuciones marginales de una simulación de tamaño en dimensiones con , (para el cual la distribución aproximada de Beta es uniforme):1053a=10σ=1(1,1)

figura 3

Como los primeros marginales del procedimiento descrito en la pregunta son normales (por construcción), ese procedimiento no puede ser correcto.n1


El siguiente Rcódigo generó la primera figura. Se construye a pasos paralelos 1-3 para la generación de . Fue modificada para generar la segunda cifra por variables cambiantes , , , y a continuación, emite el comando parcela después fue generado.Yadnsigmaplot(y[1,], y[2,], pch=16, cex=1/2, col="#00000010")y

La generación de se modifica en el código para una mayor resolución numérica: el código genera en realidad y usos que para calcular .U1UP

La misma técnica de simular datos de acuerdo con un supuesto algoritmo, resumirlos con un histograma y superponer un histograma puede usarse para probar el método descrito en la pregunta. Confirmará que el método no funciona como se esperaba.

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
¡Esa es una respuesta maravillosa! Pero, ¿también puede arrojar algo de luz sobre por qué falla la propuesta en cuestión? (La respuesta de Xi'an no es lo suficientemente satisfactoria, veo algún problema con su argumento, por ejemplo, cuando se integra)
Loves Probability

1
Muchas gracias. Pero, ¿puedo solicitarle que responda mi primer comentario anterior? Parece que mi propuesta también ofrece un buen histograma lo suficientemente cerca. ¡¡Estoy confundido!! ¿Dónde está el error? Tenga en cuenta que este es el punto principal de la pregunta y SI ES CORRECTO , el método necesita solo una muestra "truncada-gaussiana" ADEMÁS Con la disponibilidad de algoritmos rápidos existentes, conduce a un gran ahorro (evita divisiones y multiplicaciones, además de evitando la necesidad de un ChiSquare truncado relativamente más complejo)
Loves Probability

2
Por lo que puedo decir, propones dibujar iid de una distribución Normal y de una Normal truncada de dos lados. Obviamente, esa no es una distribución MVN truncada, como lo revelará fácilmente un diagrama de dispersión para , que creo que no he podido entender esa parte de su pregunta. En términos más generales, la carga de las preguntas que preguntan por qué algo no funciona recae en el autor de la pregunta para proporcionar evidencia de que funciona. Tal vez si proporcionara tal evidencia, la naturaleza de su pregunta quedaría clara. X1,,Xn1Xnn=2
whuber

1
Gracias por los detalles. Agregué un diagrama de dispersión 2D como dijiste y arreglé algunas oraciones. Por cierto, lo siento, realmente no quise transferirte la carga total de la prueba. Mi propuesta parece funcionar bien con todas las comprobaciones simples, por lo tanto, tengo curiosidad por qué está mal, que también es el objetivo principal de esta pregunta.
Le encanta la probabilidad el

1
Mirar las distribuciones marginales es la forma más directa que puedo encontrar para ilustrar las diferencias en los procedimientos. Agregué una figura y un código para mostrar estos marginales.
whuber

7

He escrito esto asumiendo que no quieres ningún punto que tenga || y || > a, que es el análogo del truncamiento unidimensional habitual. Sin embargo, ha escrito que desea mantener puntos con | y || > = a y tirar a los demás. Sin embargo, el ajuste obvio a mi solución se puede hacer si realmente desea mantener los puntos que tienen | y || > = a.

La forma más directa, que resulta ser una técnica muy general, es utilizar el rechazo de aceptación https://en.wikipedia.org/wiki/Rejection_sampling . Será bastante rápido siempre que Prob (|| X ||> a) sea bastante bajo, porque entonces no habrá muchos rechazos.

Genere un valor de muestra x a partir de la Multivariada Normal sin restricciones (aunque su problema indique que la Multivariada Normal es esférica, la técnica se puede aplicar incluso si no lo es). Si || x || <= a, aceptar, es decir, usar x, de lo contrario rechazarlo y generar una nueva muestra. Repita este proceso hasta que tenga tantas muestras aceptadas como necesite. El efecto de aplicar este procedimiento es generar y tal que su densidad sea c * f_X (y), si || y || <= a, y 0 si || y || > a, según mi corrección a la parte inicial de su pregunta. Nunca necesitas calcular c; en efecto, el algoritmo lo determina automáticamente en función de la frecuencia con la que se rechazan las muestras.


3
+1 Me gusta que su propuesta funcione con MVN no simétricamente esféricos, que haya descrito claramente las circunstancias bajo las cuales será efectiva, y que enfatice la necesidad de evaluar la tasa de rechazo al decidir si usar el muestreo de rechazo.
whuber

2
Sí, y también tenga en cuenta que puede funcionar para regiones de aceptación de forma arbitraria, no solo que la norma 2 esté por encima o por debajo de un umbral como aquí.
Mark L. Stone

5

Este es un buen intento, pero no funciona debido a la "constante de normalización": si considera la densidad de la junta la descomposición

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
que se integra a en , muestra que
fXn(xn)P(Xn2>a2||xn||2)(2πσ2)(n1)/2exp(||xn||22σ2)
xn
  1. La distribución condicional de dados los otros componentes, , es una distribución normal truncada;XnXn
  2. La distribución marginal de los otros componentes, , no es una distribución normal debido al término adicional ;XnP(Xn2>a2||xn||2)

La única forma en que puedo ver al aprovechar esta propiedad es ejecutar una muestra de Gibbs, un componente a la vez, utilizando las distribuciones condicionales normales truncadas.


1
Muchas gracias por la respuesta detallada. Solo una aclaración, ¡el área bajo su densidad (segunda ecuación) no suma 1! --- Creo que, una vez que se corrige, cancelará el "factor de normalización" del que está hablando. ¿Alguna idea? fX(x)
Ama la probabilidad

3

La pregunta se origina en la idea de usar, la descomposición condicional básica de distribuciones conjuntas, para dibujar muestras de vectores.

Sea un gaussiano multivariante con componentes iid.X

Deje que e Prob(||X||>a)TYX.I||X||>a

El algoritmo en cuestión se propone en base a la siguiente factorización condicional (toda interpretación correcta pero engañosa):

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 respuesta más corta es que el último factor no es un gaussiano truncado, (más importante) ni siquiera una distribución.


Aquí está la explicación detallada de por qué la factorización anterior tiene algún defecto fundamental. En una sola oración: cualquier factorización condicional de una distribución conjunta dada debe satisfacer algunas propiedades muy fundamentales, y la factorización anterior no las satisface (ver más abajo).

En general, si alguna vez factorizamos entonces es el marginal de y es la distribución condicional de . Lo que significa:fXY(x,y)=fX(x)fY|X(y|x)fX(x)XfY|X(y|x)Y

  1. El factor de "asumido como" debe ser una distribución. Y,f(x,y)fX(x)
  2. El segundo factor "asumido como" debe ser una distribución para cada elección defY|X(y|x)x

En el ejemplo anterior, estamos tratando de condicionar como . Significa que la propiedad-1 debería ser válida para el factor gaussiano y la propiedad-2 debería ser válida para la última parte.Yn|(Y1Yn1)

Está claro que la propiedad-1 se mantiene bien en el primer factor. Pero el problema es con la propiedad-2. ¡Desafortunadamente, el último factor anterior no es una distribución en absoluto (olvídate del gaussiano truncado) para casi cualquier valor de !!(Y1Yn1)


Tal propuesta de algoritmo es probablemente el resultado de la siguiente concepción errónea: una vez que una distribución se factoriza naturalmente a partir de una distribución conjunta (como las gaussianas de arriba), conduce a una factorización condicional. ---- No lo hace! ---- El otro (segundo) factor también debe ser bueno.


Nota: Hay una gran respuesta de @whuber anteriormente, que realmente resuelve el problema de generar una norma gaussiana trivacada multivariada. Estoy aceptando su respuesta. Esta respuesta es solo para aclarar y compartir mi propia comprensión y la génesis de la pregunta.


2
+1 Gracias por compartir tus pensamientos: agregan información valiosa a este hilo.
whuber
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.