Generowanie wartości z wielowymiarowego rozkładu Gaussa

14

Obecnie próbuje symulować wartościami -wymiarowej zmiennej losowej , który ma wielowymiarowego rozkładu normalnego o średniej wektor i macierzy kowariancji .X μ = ( μ 1 , . . . , Μ N ) T SNXμ=(μ1,...,μN)TS

Mam nadzieję, że do korzystania z procedury podobnej do metody odwrotność CDF, co oznacza, że chcę najpierw wygenerować wymiarowa zmienna losowa jednolity , a następnie podłączyć do CDF że odwrotnego tego rozkładu, tak aby wygenerować wartość .U XNUX

Mam problemy, ponieważ procedura nie jest dobrze udokumentowana i istnieją niewielkie różnice między funkcją mvnrnd w MATLAB a opisem, który znalazłem na Wikipedii .

W moim przypadku losowo wybieram parametry rozkładu. W szczególności generuję każdy ze środków z jednolitego rozkładu . Następnie buduję macierz kowariancji stosując następującą procedurę: U ( 20 , 40 ) SμiU(20,40)S

  1. Utwórz dolną macierz trójkątną gdzie dla i dla i <jL ( i , i ) = 1 i = 1 .. N L ( i , j ) = U ( - 1 , 1 ) i < jLL(i,i)=1i=1..NL(i,j)=U(1,1)i<j

  2. Niech S=LLT , gdzie LT oznacza transpozycję L .

Ta procedura pozwala mi upewnić się, że S jest symetryczny i pozytywnie określony. Zapewnia również dolną macierz trójkątną L tak że S=LLT , która moim zdaniem jest wymagana do wygenerowania wartości z rozkładu.

Korzystając z wytycznych dla Wikipedii, powinienem być w stanie wygenerować wartości X za pomocą N wymiarowego munduru w następujący sposób:

  • X=μ+LΦ1(U)

Jednak zgodnie z funkcją MATLAB jest to zwykle wykonywane jako:

  • X=μ+LTΦ1(U)

Gdzie jest odwrotnością CDF na -wymiarowej, rozdzielnego rozkładu normalnego, a jedyna różnica między obu metod jest to, czy po prostu do stosowania lub . N L L TΦ1NLLT

Czy MATLAB lub Wikipedia są najlepszym rozwiązaniem? Czy oba są w błędzie?

Berk U.
źródło
2
Jak wspomniano, oba są błędne, ponieważ jest wektorem wiersza, podczas gdy musi być wektorem kolumny. Kiedy wyprostujesz swoje wiersze i kolumny, na to pytanie należy odpowiedzieć po prostu, określając, która wersja lub daje matryca i która wersja daje tylko numer: Sprawdź, które można obliczyć oczekiwanie wersji matrycy i że daje . T i n v n o r m ( U ) ( X - μ ) ( X - μ ) ( X - μ ) ( X - μ ) SμTinvnorm(U) (Xμ)(Xμ)(Xμ)(Xμ)S
whuber
@whuber Yeap. Dokonano zmian w formatowaniu pytania. Dzięki za wskazówkę - zdecydowanie najłatwiejszy sposób sprawdzenia.
Berk U.

Odpowiedzi:

14

Jeśli to wektor kolumna standardowych normalne RV, a następnie, jeśli zestaw , kowariancja jest . XN(0,I)Y=LXYLLT

Myślę, że problem, który masz, może wynikać z faktu, że funkcja mvnrnd matlaba zwraca wektory wierszowe jako próbki, nawet jeśli podasz średnią jako wektor kolumny. na przykład,

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

I zauważ, że przekształcenie wektora wiersza daje odwrotną formułę. jeśli jest wektorem wiersza, to jest również wektorem wiersza, więc jest wektorem kolumny, a kowariancję można zapisać . XZ=XLTZT=LXTZTE[ZTZ]=LLT

W oparciu o to, co napisał chociaż formuła Wikipedia jest prawidłowa: jeśli były wektor wiersz zwracany przez Matlab, nie można lewej pomnożyć przez . (Ale mnożenie w prawo przez dałoby próbkę z tą samą kowariancją ).Φ1(U)LTLTLLT

jpillow
źródło
Zauważ, że pomoc dla mvnrnd w matlabie używa jako liczby próbek; liczba wymiarów jest . Więc jeśli poprosisz o próbek z normalnej wielowymiarowej wielowymiarowej wymiarowej, zwróci je jako macierzNDNDN×D
jpillow