Python 多元正态计算不产生标准正态变量
这可能更像是一个数学问题而不是numpy,所以我不确定,这可能需要发布在交叉验证上 问题描述 我使用numpy函数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
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这似乎是个问题!这似乎就是问题所在!