Uso la decomposizione di Cholesky per simulare variabili casuali correlate in base a una matrice di correlazione. Il fatto è che il risultato non riproduce mai la struttura di correlazione così come viene fornita. Ecco un piccolo esempio in Python per illustrare la situazione.
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)))
Questo stampa:
[[ 1. 0.34450587 0.57515737]
[ 0.34450587 1. 0.1488504 ]
[ 0.57515737 0.1488504 1. ]]
Come puoi vedere, la matrice di correlazione stimata post-hoc differisce drasticamente da quella precedente. C'è un bug nel mio codice o c'è qualche alternativa all'uso della decomposizione di Cholesky?
modificare
Chiedo scusa per questo casino. Non pensavo ci fosse un errore nel codice e / o nel modo in cui la decomposizione di Cholesky veniva applicata a causa di un malinteso sul materiale che avevo studiato prima. In effetti ero sicuro che il metodo in sé non doveva essere preciso ed ero stato d'accordo con quello fino alla situazione che mi ha fatto pubblicare questa domanda. Grazie per aver indicato l'idea sbagliata che ho avuto. Ho modificato il titolo per riflettere meglio la situazione reale proposta da @Silverfish.