Python 多元正态计算不产生标准正态变量

Python 多元正态计算不产生标准正态变量,python,pandas,numpy,matplotlib,math,Python,Pandas,Numpy,Matplotlib,Math,这可能更像是一个数学问题而不是numpy,所以我不确定,这可能需要发布在交叉验证上 问题描述 我使用numpy函数np.random.multivariable\u normal()生成随机相关数据。我想有5个相关变量,每个分布标准正态分布。我相信我的协方差矩阵是正确指定的,对角线等于1.0,内部值是我想要的相关性。生成的数据始终具有正确的平均值0,但标准偏差是不可预测的 可复制示例 以下是一个可复制的代码示例: # rho = randomizer.config.customers.corre

这可能更像是一个数学问题而不是numpy,所以我不确定,这可能需要发布在交叉验证上

问题描述 我使用numpy函数
np.random.multivariable\u normal()
生成随机相关数据。我想有5个相关变量,每个分布标准正态分布。我相信我的协方差矩阵是正确指定的,对角线等于1.0,内部值是我想要的相关性。生成的数据始终具有正确的平均值0,但标准偏差是不可预测的

可复制示例 以下是一个可复制的代码示例:

# rho = randomizer.config.customers.correlation
rho = np.array([
       [  1.0 , -0.2 ,  0.7 ,  0.1 ,  0.1 ],
       [ -0.2 ,  1.0 ,  0.7 ,  0.5 ,  0.2 ],
       [  0.7 ,  0.7 ,  1.0 ,  0.6 ,  0.5 ],
       [  0.1 ,  0.5 ,  0.6 ,  1.0 ,  0.3 ],
       [  0.1 ,  0.2 ,  0.5 ,  0.3 ,  1.0 ]
])
# rho = np.identity(5)
mu = np.repeat(0, 5)


standard_deviations = []
for i in range(10000):
    np.random.seed()
    sd = np.std(np.random.multivariate_normal(mu, rho, size=1000)[:, 0])
    standard_deviations.append(sd)
    
plt.show(plt.hist(standard_deviations, edgecolor="black", bins=40))
这将生成以下绘图:

标准偏差明显大于协方差/相关矩阵中规定的1.0

有没有一个明显的解释让我错过了?我注意到,如果我使用单位矩阵而不是相关矩阵,问题就会消失:

rho = np.identity(5)
mu = np.repeat(0, 5)


standard_deviations = []
for i in range(10000):
    np.random.seed()
    sd = np.std(np.random.multivariate_normal(mu, rho, size=1000)[:, 0])
    standard_deviations.append(sd)
    
plt.show(plt.hist(standard_deviations, edgecolor="black", bins=40))


非常感谢您的帮助

不确定这是否是导致问题的原因,但多元正态分布的协方差矩阵是半正定的,而
rho
这里有一个负特征值,因此不是。

不确定这是否是导致问题的原因,但多元正态分布的协方差矩阵是半正定的,而这里的ρ有一个负的特征值,因此不是。

据我所知,协方差和相关性是不一样的。矩阵不应该是平方或者类似的吗?第一个图的标准偏差是~0.03到我的眼睛。据我所知,协方差和相关性是不一样的。矩阵不应该是平方或类似的吗?第一个图的标准偏差在我看来是~0.03这似乎是个问题!这似乎就是问题所在!