我正在尝试使用 Python 生成合成数据。数据应该是双变量并具有指定的相关性。为什么我的代码不起作用?

问题描述 投票:0回答:1

这是我尝试过的。我已经玩了很长时间了,无法弄清楚我做错了什么。任何人都可以帮助识别我没有看到的东西吗?

我正在尝试创建 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.
python numpy linear-algebra correlation
1个回答
0
投票

您的

L
random_data
的乘法不太正确。改变

synthetic_data = np.dot(random_data, L)

synthetic_data = np.dot(random_data, L.T)

请参阅在 Python (3.3) 中生成相关数据,了解使用随机生成器的

multivariate_normal
方法的替代方案。该答案末尾的链接指向 SciPy 食谱页面,该页面也值得查看。

© www.soinside.com 2019 - 2024. All rights reserved.