Actualmente estoy tratando a los valores Simular de un -dimensional variable aleatoria que tiene una distribución normal multivariante con media vector y la matriz de covarianza .
Espero utilizar un procedimiento similar al método CDF inverso, lo que significa que primero quiero generar un uniforme -dimensional variable aleatoria y luego enchufe que en la CDF inversa de esta distribución, de modo de generar valor .
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:
Cree una matriz triangular inferior donde para y para
Deje que donde denota la transpuesta de .
Este procedimiento me permite asegurar que sea simétrico y positivo definido. También proporciona una matriz triangular inferior para que , 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 usando un uniforme dimensional de la siguiente manera:
Sin embargo, de acuerdo con la función MATLAB, esto generalmente se hace como:
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 .
¿Es MATLAB o Wikipedia el camino a seguir? ¿O ambos están equivocados?
Respuestas:
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 .X∼N(0,I) Y=LX Y LLT
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,
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 .X Z=XLT ZT=LXT ZT E[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) LT LT LLT
fuente