Tôi sử dụng phân tách Cholesky để mô phỏng các biến ngẫu nhiên tương quan được đưa ra một ma trận tương quan. Điều này là, kết quả không bao giờ tái tạo cấu trúc tương quan như nó được đưa ra. Dưới đây là một ví dụ nhỏ trong Python để minh họa tình huống.
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)))
Bản in này:
[[ 1. 0.34450587 0.57515737]
[ 0.34450587 1. 0.1488504 ]
[ 0.57515737 0.1488504 1. ]]
Như bạn có thể thấy, ma trận tương quan ước tính sau hoc khác rất nhiều so với ma trận trước. Có một lỗi trong mã của tôi, hoặc có một số thay thế cho việc sử dụng phân tách Cholesky?
Chỉnh sửa
Tôi xin lỗi vì sự lộn xộn này. Tôi đã không nghĩ rằng có một lỗi trong mã và / hoặc theo cách phân tách Cholesky được áp dụng do một số hiểu lầm về tài liệu tôi đã nghiên cứu trước đây. Trong thực tế, tôi chắc chắn rằng phương pháp đó không có nghĩa là chính xác và tôi đã ổn với điều đó cho đến khi tình huống khiến tôi đăng câu hỏi này. Cảm ơn bạn đã chỉ ra quan niệm sai lầm tôi đã có. Tôi đã chỉnh sửa tiêu đề để phản ánh tốt hơn tình hình thực tế theo đề xuất của @Silverfish.