Я використовую розклад Холеського для імітації корельованих випадкових змінних із заданою кореляційною матрицею. Вся справа в тому, що результат ніколи не відтворює кореляційну структуру, як це дано. Ось невеликий приклад в Python для ілюстрації ситуації.
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)))
Це відбитки:
[[ 1. 0.34450587 0.57515737]
[ 0.34450587 1. 0.1488504 ]
[ 0.57515737 0.1488504 1. ]]
Як бачимо, оціночна кореляційна матриця після спеціальних дій різко відрізняється від попередньої. Чи є помилка в моєму коді чи є якась альтернатива використанню розкладу Чолеського?
Редагувати
Прошу пробачення за цей безлад. Я не думав, що в коді та / або в способі розкладання Чолеського сталася помилка через деяке нерозуміння матеріалу, який я вивчав раніше. Насправді я був впевнений, що сам метод не повинен був бути точним, і я був з цим добре, поки не виникла ситуація, яка змусила мене поставити це питання. Дякую, що вказали на помилкове уявлення, яке я мав. Я відредагував заголовок, щоб краще відобразити реальну ситуацію, запропоновану @Silverfish.