这是我尝试过的。我已经玩了很长时间了,无法弄清楚我做错了什么。任何人都可以帮助识别我没有看到的东西吗?
我正在尝试创建 1,000 个样本,每个样本包含两个变量,其中一个变量与另一个变量相关,r=0.85(或我指定的任何相关性)。我不太了解胆汁分解,所以我假设问题出在该步骤的某个地方。
# Create random normal bivariate data with r=0.85
rng = np.random.default_rng(0)
correlation = 0.85
corr_matrix = np.array([[1, correlation], [correlation, 1]])
L = np.linalg.cholesky(corr_matrix)
n = 1000
random_data = rng.normal(size=(n, 2))
synthetic_data = np.dot(random_data, L)
# Check the correlation
r = stats.pearsonr(synthetic_data.T[0], synthetic_data.T[1])[0]
# r computes to 0.646.
您的
L
和 random_data
的乘法不太正确。改变
synthetic_data = np.dot(random_data, L)
到
synthetic_data = np.dot(random_data, L.T)
请参阅在 Python (3.3) 中生成相关数据,了解使用随机生成器的
multivariate_normal
方法的替代方案。该答案末尾的链接指向 SciPy 食谱页面,该页面也值得查看。