【问题标题】:Python - Generating Set of Correlated Data Based on Existing Set of DataPython - 基于现有数据集生成相关数据集
【发布时间】:2018-08-08 19:25:00
【问题描述】:

所以我有一组数据,我想生成另一组相同大小的数据,其集合均值是正态分布的,与我已有的数据相关。

我查看了 stats.multivariate_normal 和 cholesky 分解,但它生成了两组(或更多)数据。有没有办法根据 Python 中已经存在的东西只生成一组数据?

# 100 random samples
x = stats.norm.rvs(loc=0, scale=1, size=100)

# What we got
n = 100
std_x = x.std()
mean_x = 0
mean_y = 1

# What I need
std_y = ?

# Means of x and what we want for y
mean_xy = [0, 1]

#Desired correlation matrix
r= [[1,0.83], [0.83,1]]

# How do I generate 100 random samples of y with a normal distribution with a mean 1 that has a 0.83 correlation with x?

感谢您的帮助!!!!

【问题讨论】:

    标签: python-3.x scipy statistics


    【解决方案1】:

    请参阅 Wikipedia 文章中有关多元正态分布的部分,即关于 the bivariate normal distribution。您的符号中有 sigma_1 = 1, sigma_2 = 1, rho = 0.83, mu_1 = 1, mu_2 = 0(请注意,在他们的符号中,x_1 = y 和 x_2 = x 在您的符号中)。

    所以 E(x_1 | x_2) = mu_1 + rho 乘以 sigma_1/sigma_2 乘以 (x_2 - mu_2) = 1 + 0.83 乘以 x_2 后替换值。还有条件方差 var(x_1 | x_2) = 1 - rho^2 = 1 - 0.83^2(即所有 x_2 都相同)。 (对于 mu_1 = mu_2 = 0 表示条件方差,但无论 mu_1 和 mu_2 是什么,它都是一样的。)

    因此,对于您的问题,将 x 作为给定,然后计算 mean_y = 1 + 0.83 乘以 x,并且 std_y = sqrt(var(y|x)) = sqrt(1 - 0.83^2),并生成 y = mean_y + std_y 乘以 N(0, 1),其中 N(0, 1) = 均值为 0,方差为 1 的正态分布样本。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-28
      • 2021-08-21
      • 1970-01-01
      • 2011-06-23
      • 1970-01-01
      • 1970-01-01
      • 2020-06-20
      • 2018-04-17
      相关资源
      最近更新 更多