Я использую разложение Холецкого для моделирования коррелированных случайных величин с учетом матрицы корреляции. Дело в том, что результат никогда не воспроизводит структуру корреляции так, как он задан. Вот небольшой пример на 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.