Atualmente, estou tentando valores simulados de um -dimensional variável aleatória que tem uma distribuição normal com média multivariada vetor e matriz de covariância .X μ = ( μ 1 , . . . , Μ N ) t S
Eu estou esperando para utilizar um procedimento similar ao método inverso CDF, o que significa que Quero primeiro gerar um -dimensional uniforme variável aleatória e, em seguida, ligar em que o CDF inversa desta distribuição, de modo a gerar o valor .U X
Estou tendo problemas porque o procedimento não está bem documentado e há pequenas diferenças entre a função mvnrnd no MATLAB e uma descrição que encontrei na Wikipedia .
No meu caso, também estou escolhendo os parâmetros da distribuição aleatoriamente. Em particular, eu cada um dos meios, , a partir de uma distribuição uniforme . Em seguida, construo a matriz de covariância usando o seguinte procedimento: L ( 20 , 40 ) S
Crie uma matriz triangular inferior onde para e para L ( i , i ) = 1 i = 1 .. N L ( i , j ) = U ( - 1 , 1 ) i < j
Deixe em que indica a transposição de .L T L
Este procedimento me permite garantir que seja simétrico e positivo positivo. Ele também fornece uma matriz triangular inferior modo que , que acredito ser necessária para gerar valores a partir da distribuição.L S = L L T
Usando as diretrizes da Wikipedia, eu poderia gerar valores de usando um uniforme dimensional da seguinte maneira:N
De acordo com a função MATLAB, no entanto, isso geralmente é feito como:
Onde é o inverso de uma CDF -dimensional distribuição, separável, normal, e a única diferença entre os dois métodos é simplesmente se a utilização ou . N L L T
MATLAB ou Wikipedia são o caminho a percorrer? Ou ambos estão errados?
Respostas:
Se é um vector de coluna de padrão normal de RV, em seguida, se definir , a covariância dos é . Y = L X Y L L TX∼N(0,I) Y=LX Y LLT
Eu acho que o problema que você está tendo pode surgir do fato de que a função mvnrnd do matlab retorna vetores de linha como amostras, mesmo se você especificar a média como um vetor de coluna. por exemplo,
E observe que a transformação de um vetor de linha fornece a fórmula oposta. se é um vetor de linha, também é um vetor de linha, então é um vetor de coluna e a covariância de pode ser escrita .X Z=XLT ZT=LXT ZT E[ZTZ]=LLT
Baseado no que você escreveu, porém, a fórmula Wikipedia está correto: se foram um vetor linha devolvida pelo Matlab, você não pode deixou-multiplicá-lo por . (Mas multiplicar à direita por forneceria uma amostra com a mesma covariância de ).Φ−1(U) LT LT LLT
fonte