Utilizo la descomposición de Cholesky para simular variables aleatorias correlacionadas dada una matriz de correlación. La cuestión es que el resultado nunca reproduce la estructura de correlación tal como se da. Aquí hay un pequeño ejemplo en Python para ilustrar la situación.
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)))
Esto imprime:
[[ 1. 0.34450587 0.57515737]
[ 0.34450587 1. 0.1488504 ]
[ 0.57515737 0.1488504 1. ]]
Como puede ver, la matriz de correlación estimada post-hoc difiere drásticamente de la anterior. ¿Hay algún error en mi código o hay alguna alternativa para usar la descomposición de Cholesky?
Editar
Perdón por este desastre. No pensé que hubiera un error en el código y / o en la forma en que se aplicó la descomposición de Cholesky debido a algunos malentendidos del material que había estudiado antes. De hecho, estaba seguro de que el método en sí no estaba destinado a ser preciso y había estado de acuerdo con eso hasta la situación que me hizo publicar esta pregunta. Gracias por señalar el error que tuve. He editado el título para reflejar mejor la situación real propuesta por @Silverfish.