Chciałbym wygenerować losową macierz korelacji, tak aby rozkład jej elementów nie przekątnych wyglądał w przybliżeniu normalnie. Jak mogę to zrobić?
Motywacja jest taka. Dla zestawu danych szeregów czasowych rozkład korelacji często wygląda dość normalnie. Chciałbym wygenerować wiele „normalnych” macierzy korelacji w celu przedstawienia ogólnej sytuacji i użyć ich do obliczenia liczby ryzyka.
Znam jedną metodę, ale wynikowe odchylenie standardowe (rozkładu elementów poziagonalnych) jest zbyt małe jak na mój cel: wygeneruj równych lub normalnych losowych wierszy macierzy , standaryzuj rzędy (odejmij średnią, podziel przez odchylenie standardowe), a następnie przykładowa macierz korelacji ma normalnie rozmieszczone wpisy o przekątnej [ Aktualizacja po komentarzach: odchylenie standardowe będzie ].X 1~n-1/2
Czy ktoś może zasugerować lepszą metodę, za pomocą której mogę kontrolować odchylenie standardowe?
Odpowiedzi:
Najpierw udzieliłem odpowiedzi, która moim zdaniem nie jest optymalna; dlatego zredagowałem swoją odpowiedź, aby zacząć od lepszej sugestii.
Metoda winorośli
W tym wątku: Jak efektywnie generować losowe macierze korelacji dodatnich i półkolistych? - Opisałem i podałem kod dwóch wydajnych algorytmów generowania macierzy losowej korelacji. Oba pochodzą z pracy Lewandowskiego, Kurowickiej i Joe (2009).
Proszę zobaczyć moją odpowiedź tam dla wielu cyfr i kodu Matlab. Chciałbym tylko powiedzieć, że metoda winorośli pozwala na generowanie losowych macierzy korelacji z dowolnym rozkładem korelacji cząstkowych (zwróć uwagę na słowo „częściowe”) i może być stosowana do generowania macierzy korelacji o dużych wartościach nie przekątnych. Oto odpowiednia liczba z tego wątku:
Jedyną rzeczą, która zmienia się między podplotami, jest jeden parametr, który kontroluje, w jakim stopniu rozkład korelacji cząstkowych jest skoncentrowany wokół . Ponieważ OP poprosił o mniej więcej rozkład normalny poza przekątną, oto wykres z histogramami elementów poza przekątną (dla tych samych matryc jak powyżej):±1
Myślę, że te rozkłady są w miarę „normalne” i widać, jak stopniowo odchyla się standardowe. Powinienem dodać, że algorytm jest bardzo szybki. Zobacz link do wątku po szczegóły.
Moja oryginalna odpowiedź
Prosta modyfikacja metody może załatwić sprawę (w zależności od tego, jak blisko rozkładu ma być normalny). Ta odpowiedź została zainspirowana powyższymi komentarzami @ kardynała i odpowiedzią @ psarka na moje własne pytanie Jak wygenerować dużą macierz korelacji losowej pełnej rangi z obecnymi silnymi korelacjami?
Sztuczka polega na tym, aby próbki twojego skorelowane (nie funkcje, ale próbki). Oto przykład: generuję macierz losową wielkości (wszystkie elementy ze standardowej normy), a następnie dodam liczbę losową z do każdego wiersza, dla . Dla macierz korelacji (po standaryzacji funkcji) będzie miała elementy o przekątnej mniej więcej normalnie rozmieszczonej ze standardowym odchyleniem . DlaX 1000 × 100 [ - a / 2 , a / 2 ] a = 0 , 1 , 2 , 5 a = 0 X ⊤ X 1 / √X X 1000×100 [−a/2,a/2] a=0,1,2,5 a=0 X⊤X a>0aa=0,1,2,51/1000−−−−√ a>0 , To obliczanie macierzy korelacji bez centrowania zmiennych (Zachowuje wstawione korelacje), a odchylenie standardowe elementów niediagonalnych rosnąć z jak to pokazano na tym rysunku (rzędy odpowiadają )a a=0,1,2,5
Wszystkie te macierze są oczywiście określone pozytywnie. Oto kod Matlab:
Dane wyjściowe tego kodu (minimalne i maksymalne wartości własne) to:
źródło
Możesz być zainteresowany częścią kodu pod następującym linkiem:
Korelacja i kointegracja
źródło
Jeśli próbujesz wygenerować macierze losowej korelacji, rozważ próbkowanie z rozkładu Wishart. Poniższe pytanie zawiera informacje na temat rozkładu Wishart, a także porady dotyczące próbkowania: Jak skutecznie generować losowe macierze korelacji dodatnich i półfinałowych?
źródło
To nie jest bardzo wyrafinowana odpowiedź, ale nic nie mogę poradzić, ale myślę, że to wciąż dobra odpowiedź ...
Jeśli twoją motywacją jest to, że parametry korelacji generowane przez dane szeregów czasowych wyglądają normalnie, dlaczego po prostu nie symulować danych szeregów czasowych, obliczyć parametry korelacji i użyć ich?
Być może masz dobry powód, aby tego nie robić, ale pytanie nie brzmi dla mnie jasno.
źródło