Używam dekompozycji Cholesky'ego do symulacji skorelowanych zmiennych losowych na podstawie macierzy korelacji. Chodzi o to, że wynik nigdy nie odtwarza struktury korelacji, jaka jest podana. Oto mały przykład w Pythonie ilustrujący sytuację.
import numpy as np
n_obs = 10000
means = [1, 2, 3]
sds = [1, 2, 3] # standard deviations
# generating random independent variables
observations = np.vstack([np.random.normal(loc=mean, scale=sd, size=n_obs)
for mean, sd in zip(means, sds)]) # observations, a row per variable
cor_matrix = np.array([[1.0, 0.6, 0.9],
[0.6, 1.0, 0.5],
[0.9, 0.5, 1.0]])
L = np.linalg.cholesky(cor_matrix)
print(np.corrcoef(L.dot(observations)))
To drukuje:
[[ 1. 0.34450587 0.57515737]
[ 0.34450587 1. 0.1488504 ]
[ 0.57515737 0.1488504 1. ]]
Jak widać, macierz korelacji szacowanej post hoc drastycznie różni się od poprzedniej. Czy w moim kodzie jest błąd, czy jest jakaś alternatywa dla użycia rozkładu Cholesky'ego?
Edytować
Proszę o wybaczenie za ten bałagan. Nie sądziłem, że wystąpił błąd w kodzie i / lub w sposobie, w jaki zastosowano rozkład Cholesky'ego z powodu jakiegoś nieporozumienia z materiałem, który studiowałem wcześniej. W rzeczywistości byłem pewien, że sama metoda nie była precyzyjna i nie przeszkadzało mi to aż do sytuacji, w której zadałem to pytanie. Dziękuję za wskazanie mojego błędnego przekonania. Zredagowałem tytuł, aby lepiej odzwierciedlić rzeczywistą sytuację zaproponowaną przez @Silverfish.