Generowanie danych za pomocą danej macierzy kowariancji próbki


22

Biorąc pod uwagę macierz kowariancji Σs , w jaki sposób wygenerować dane, aby miała przykładową macierz kowariancji Σ^=Σs ?


Mówiąc bardziej ogólnie: często jesteśmy zainteresowani generowaniem danych z gęstości f(x|θ) , z danymi x 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 θs i chcielibyśmy wygenerować próbkę x taką, że θ^=θs .

Czy to znany problem? Czy taka metoda jest przydatna? Czy algorytmy są dostępne?


Skalowalne rozwiązanie zapewnia Attilio Meucci. Zobacz ten artykuł ryzyka i kod matlab
Peter Cotton

Odpowiedzi:


16

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Σzy=Lz+μLLL=ΣLy

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 IIn0I

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 ) + μ zz=zz¯zLz(0)=(L)1zy=Lz(0)+μn1n


1
+1. Któregoś dnia musiałem wygenerować jakieś dane przy użyciu przykładowej macierzy kowariancji, nie wiedziałem, jak to zrobić, i z jakiegoś powodu znalezienie odpowiedzi zajęło mi dużo czasu. Aby zwiększyć widoczność tego wątku i zilustrować twoje sugestie, zamieściłem tutaj inną odpowiedź z kodem Matlaba.
ameba mówi Przywróć Monikę

@amoeba Zastanawiam się, czy istnieje możliwość umieszczenia jednego z użytych terminów wyszukiwania, które nie są już tutaj obecne, w tagach pytań (lub ewentualnie wstawienie kilku w niewielkiej edycji tekstu pytania, co powinno pomóc w znalezieniu go ). Zastanawiam się teraz, czy powinienem zrobić to samo w R ... ale czy to idzie lepiej w mojej odpowiedzi, czy jako dodatek do twojej?
Glen_b

1
Zdążyłem już zredagować pytanie, a także próbowałem sformułować swoją odpowiedź tak, aby zawierała jak najwięcej słów kluczowych. Mam nadzieję, że to pomoże. Nawiasem mówiąc, byłem zaskoczony, że ta prosta wskazówka (wybielanie wygenerowanych danych przed przejściem do wymaganej kowariancji) była tak trudna do przeszukania; nie mogłem nic znaleźć (w CV ani gdzie indziej), dopóki w końcu nie znalazłem twojej odpowiedzi.
ameba mówi Przywróć Monikę

1
@amoeba Oh, okej, dzięki. Tak, właściwie nie mogę powiedzieć, że pamiętam, czy kiedykolwiek wspominałem o nim w przypadku wielowymiarowym (bez wątpienia tak było, ponieważ jest to dość oczywisty pomysł, zwłaszcza jeśli już o tym pomyślałeś w przypadku wielowymiarowym lub masz już to widziałem w przypadku jednoczynnikowym).
Glen_b

@Glen_b Jak mówisz, wynikowy rozkład tych „oczyszczonych” próbek nie może być normalny. Czy masz pojęcie, jaka może być wynikowa dystrybucja? A może to, czy jest równe / nie jest równe rozkładowi warunkowemuZz¯=μ,Cov(z)=Σ
gg

17

@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 ( Σ )ndΣchol(Σ)

n = 100;
d = 2;
Sigma = [ 1    0.7  ; ...
          0.7   1   ];
rng(42)
X = randn(n, d) * chol(Sigma);

Przykładowa macierz kowariancji uzyskanych danych nie będzie oczywiście dokładnie ; np. w powyższym przykładzie zwracaΣcov(X)

1.0690    0.7296
0.7296    1.0720

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 ( Σ )Ichol(Σ)

Oto kontynuacja mojego przykładu Matlaba:

X = randn(n, d);
X = bsxfun(@minus, X, mean(X));
X = X * inv(chol(cov(X)));
X = X * chol(Sigma);

Teraz cov(X), zgodnie z wymaganiami, powraca

1.0000    0.7000
0.7000    1.0000

+1. Jakoś to pytanie ma różne formy w różnych miejscach w CV. Czy istnieje sposób postępowania, jeśli mamy świadomość, że rozkład wielu zmiennych jest niegaussowski?
rgk

Jeśli znasz formę dystrybucji wielowymiarowej, powinna ona wyglądać, być może w niektórych przypadkach.
Glen_b
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.