Python - 基于现有数据集生成相关数据集

时间:2018-02-28 20:00:55

标签: python-3.x scipy statistics

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

我查找了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?

感谢您的帮助!!!!

1 个答案:

答案 0 :(得分:1)

请参阅维基百科文章中有关多变量正态分布的部分,该部分约为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。