Biorąc pod uwagę macierz kowariancji , w jaki sposób wygenerować dane, aby miała przykładową macierz kowariancji ?
Mówiąc bardziej ogólnie: często jesteśmy zainteresowani generowaniem danych z gęstości , z danymi podanymi parametrami wektorowymi . Daje to próbkę, z której możemy następnie ponownie oszacować wartość . Interesuje mnie odwrotny problem: co, jeśli otrzymamy zestaw parametrów i chcielibyśmy wygenerować próbkę taką, że .
Czy to znany problem? Czy taka metoda jest przydatna? Czy algorytmy są dostępne?
correlation
sampling
random-generation
covariance-matrix
Kees Mulder
źródło
źródło
Odpowiedzi:
Istnieją dwie różne typowe sytuacje dla tego rodzaju problemów:
i) chcesz wygenerować próbkę z danego rozkładu, którego charakterystyka populacji jest zgodna z określonymi (ale ze względu na zmienność próbkowania nie masz dokładnie takich samych charakterystyk próby).
ii) chcesz wygenerować próbkę, której charakterystyka próbki jest zgodna z podaną (ale z powodu ograniczeń dokładnie dopasowanych ilości próbek do wcześniej określonego zestawu wartości, tak naprawdę nie pochodzą one z pożądanego rozkładu).
Chcesz drugiego przypadku - ale otrzymujesz go, stosując to samo podejście, co pierwszy przypadek, z dodatkowym krokiem standaryzacji.
Tak więc w przypadku wielowymiarowych normalnych można to zrobić w dość prosty sposób:
W pierwszym przypadku możesz użyć losowych normalnych bez struktury populacji (takich jak iid normalna normalna, które mają oczekiwanie 0 i macierz kowariancji tożsamości), a następnie narzucić je - przekształć, aby uzyskać macierz kowariancji i oznaczać, że chcesz. Jeśli i są średnią populacji i kowariancję, której potrzebujesz, a jest w normie normalna, obliczasz , dla niektórych gdzie (np. Odpowiedni można uzyskać poprzez rozkład Cholesky'ego) . Zatem ma pożądaną charakterystykę populacji.μ z y = L z + μ L L L ′ = Σ L yΣ z y= L z+ μ L LL′=Σ L y
W drugim przypadku musisz najpierw przekształcić losowe normalne, aby usunąć nawet losową zmienność z dala od kowariancji średniej zerowej i tożsamości (co oznacza, że próbka oznacza zero i kowariancję próbki ), a następnie postępuj jak poprzednio. Ale ten początkowy etap usuwania odchylenia próbki od dokładnej średniej , wariancja zakłóca rozkład. (W małych próbkach może być dość ciężki.) 0 IIn 0 I
Można tego dokonać odejmując średnią próbki ( ) i obliczając rozkład Cholesky'ego . Jeśli jest lewym czynnikiem Cholesky'ego, to powinno mieć średnią próbki 0 i kowariancję próbki tożsamości. Następnie możesz obliczyć i uzyskać próbkę z żądanymi momentami próbki. (W zależności od tego, jak zdefiniowane są twoje próbki, może być bardzo małe skrzypienie związane z mnożeniem / dzieleniem przez czynniki takie jak , ale łatwo jest zidentyfikować tę potrzebę.)z ∗ = z - ˉ z z ∗ L ∗ z ( 0 ) = ( L ∗ ) - 1 z ∗ y = L z ( 0 ) + μ √z z∗=z−z¯ z∗ L∗ z(0)=(L∗)−1z∗ y=Lz(0)+μ n−1n−−−√
źródło
@Glen_b dał dobrą odpowiedź (+1), którą chcę zilustrować za pomocą kodu.
Jak generowania próbek z -wymiarowej wielowymiarowej rozkładu Gaussa z danym macierzy kowariancji ? Łatwo to zrobić, generując próbki ze standardowego gaussowskiego i mnożąc je przez pierwiastek kwadratowy macierzy kowariancji, np. Przez . Jest to omówione w wielu wątkach na CV, np. Tutaj: Jak wygenerować dane z uprzednio określoną macierzą korelacji? Oto prosta implementacja Matlaba:d Σ c h o l ( Σ )n d Σ chol(Σ)
Przykładowa macierz kowariancji uzyskanych danych nie będzie oczywiście dokładnie ; np. w powyższym przykładzie zwracaΣ
cov(X)
Jak wygenerować dane z wcześniej określoną macierzą korelacji lub kowariancji próbki ?
Jak napisał @Glen_b, po wygenerowaniu danych ze standardowego Gaussa wyśrodkuj, wybiel i zestandaryzuj go, aby miał przykładową macierz kowariancji ; tylko wtedy pomnóż go przez .c h o l ( Σ )I chol(Σ)
Oto kontynuacja mojego przykładu Matlaba:
Teraz
cov(X)
, zgodnie z wymaganiami, powracaźródło