Uso a decomposição de Cholesky para simular variáveis aleatórias correlacionadas, dada uma matriz de correlação. A questão é que o resultado nunca reproduz a estrutura de correlação conforme é fornecida. Aqui está um pequeno exemplo em Python para ilustrar a situação.
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)))
Isso imprime:
[[ 1. 0.34450587 0.57515737]
[ 0.34450587 1. 0.1488504 ]
[ 0.57515737 0.1488504 1. ]]
Como você pode ver, a matriz de correlação estimada post-hoc difere drasticamente da matriz anterior. Existe um erro no meu código ou existe alguma alternativa ao uso da decomposição de Cholesky?
Editar
Peço perdão por essa bagunça. Não achei que houvesse um erro no código e / ou na maneira como a decomposição de Cholesky era aplicada devido a algum mal-entendido do material que eu havia estudado antes. Na verdade, eu tinha certeza de que o método em si não era para ser preciso e eu estava bem com isso até a situação que me levou a postar essa pergunta. Obrigado por apontar o equívoco que eu tive. Editei o título para refletir melhor a situação real, como proposto por @Silverfish.