Generando valores a partir de una distribución gaussiana multivariante

14

Actualmente estoy tratando a los valores Simular de un N -dimensional variable aleatoria X que tiene una distribución normal multivariante con media vector μ=(μ1,...,μN)T y la matriz de covarianza S .

Espero utilizar un procedimiento similar al método CDF inverso, lo que significa que primero quiero generar unN uniforme -dimensional variable aleatoria y luego enchufe que en la CDF inversa de esta distribución, de modo de generar valor .UX

Tengo problemas porque el procedimiento no está bien documentado y existen ligeras diferencias entre la función mvnrnd en MATLAB y una descripción que encontré en Wikipedia .

En mi caso, también elijo los parámetros de la distribución al azar. En particular, genero cada uno de los medios, , a partir de una distribución uniforme U (20,40) . Luego construyo la matriz de covarianza S usando el siguiente procedimiento:μiU(20,40)S

  1. Cree una matriz triangular inferior L donde L(i,i)=1 para i=1..N y L(i,j)=U(1,1) para i<j

  2. Deje que S=LLT donde LT denota la transpuesta de L .

Este procedimiento me permite asegurar que S sea ​​simétrico y positivo definido. También proporciona una matriz triangular inferior L para que S=LLT , que creo que es necesario para generar valores a partir de la distribución.

Usando las pautas en Wikipedia, debería poder generar valores de X usando un uniforme N dimensional de la siguiente manera:

  • X=μ+LΦ1(U)

Sin embargo, de acuerdo con la función MATLAB, esto generalmente se hace como:

  • X=μ+LTΦ1(U)

Cuando es la inversa de una CDF distribución -dimensional, separable, normal, y la única diferencia entre ambos métodos es simplemente si para uso o .Φ1NLLT

¿Es MATLAB o Wikipedia el camino a seguir? ¿O ambos están equivocados?

Berk U.
fuente
2
Como se indicó, ambos están equivocados porque es un vector fila mientras que T i n v n o r m ( U ) debe ser un vector columna. Cuando endereza sus filas y columnas, esta pregunta debería responderse simplemente identificando qué versión de ( X - μ ) ( X - μ ) o ( X - μ ) ( X - μ ) μTinvnorm(U) (Xμ)(Xμ)(Xμ)(Xμ)da una matriz y la versión que da sólo un número: comprobación que se puede calcular la expectativa de la versión de la matriz y que da . S
whuber
@whuber Yeap. Realizó los cambios en el formato de la pregunta. Gracias por el consejo, definitivamente la forma más fácil de verificar.
Berk U.

Respuestas:

14

Si es un vector columna de estándar RV de normal, a continuación, si se establece Y = L X , la covarianza de Y es L L T . XN(0,I)Y=LXYLLT

Creo que el problema que tiene puede surgir del hecho de que la función mvnrnd de matlab devuelve vectores de fila como muestras, incluso si especifica la media como un vector de columna. p.ej,

 > size(mvnrnd(ones(10,1),eye(10))  
 > ans =
 >      1    10

Y tenga en cuenta que la transformación de un vector de fila le da la fórmula opuesta. si es un vector fila, entonces Z = X L T también es un vector fila, por lo que Z T = L X T es un vector columna, y la covarianza de Z T puede escribirse E [ Z T Z ] = L L T . XZ=XLTZT=LXTZTE[ZTZ]=LLT

Sobre la base de lo que ha escrito, sin embargo, la fórmula Wikipedia es correcta: si fuera un vector fila devuelta por Matlab, no se puede izquierda se multiplica por L T . (Pero la multiplicación a la derecha por L T le daría una muestra con la misma covarianza de L L T ).Φ1(U)LTLTLLT

jpillow
fuente
Tenga en cuenta que la ayuda para mvnrnd en matlab usa como número de muestras; el número de dimensiones es D . Entonces, si solicita N muestras de una normal multivariada D- dimensional, las devuelve como una matriz N × D. NDNDN×D
jpillow