Ich benutze die Cholesky-Zerlegung, um korrelierte Zufallsvariablen bei gegebener Korrelationsmatrix zu simulieren. Die Sache ist, das Ergebnis reproduziert niemals die Korrelationsstruktur, wie sie gegeben ist. Hier ist ein kleines Beispiel in Python, um die Situation zu veranschaulichen.
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)))
Dies druckt:
[[ 1. 0.34450587 0.57515737]
[ 0.34450587 1. 0.1488504 ]
[ 0.57515737 0.1488504 1. ]]
Wie Sie sehen, unterscheidet sich die post-hoc geschätzte Korrelationsmatrix drastisch von der vorherigen. Befindet sich in meinem Code ein Fehler oder gibt es eine Alternative zur Verwendung der Cholesky-Dekomposition?
Bearbeiten
Ich bitte um Verzeihung für dieses Durcheinander. Ich dachte nicht, dass es einen Fehler im Code und / oder in der Art und Weise gab, wie die Cholesky-Zerlegung angewendet wurde, weil ich das Material, das ich zuvor studiert hatte, falsch verstanden hatte. Tatsächlich war ich mir sicher, dass die Methode selbst nicht genau sein sollte, und ich war damit bis zu der Situation einverstanden, die mich veranlasste, diese Frage zu stellen. Vielen Dank für den Hinweis auf das Missverständnis, das ich hatte. Ich habe den Titel bearbeitet, um die von @Silverfish vorgeschlagene reale Situation besser widerzuspiegeln.