繁体   English   中英

来自外积的矩阵不是正定的

[英]Matrix from outer product not positive definite

我试图通过以下方式模拟 python 中的多元法线数据

n = 100
p = 10
mu = np.random.normal(loc=0, scale=3, size=p)
A = np.random.uniform(low = -4, high = 4, size = (p, 1))
A = pd.DataFrame(A)
Sigma = np.dot(A, np.transpose(A))
Sigma = pd.DataFrame(Sigma)
X = np.random.multivariate_normal(mean = mu, cov = Sigma, size = n)

然而,结果变量总是完全线性相关的。 然后我检查了np.linalg.eigvals(Sigma)并意识到Sigma不是半正定的。 这让我感到惊讶,因为 1)我没有从multivariate_normal中得到错误,2) Sigma是从外部产品生成的,它应该是半正定的。 谁能告诉我发生了什么以及如何解决这个问题?

这是一个想法。 其原理是生成p个随机向量(而不是原始代码中的p个标量),找到每对向量之间的协方差,然后使用该协方差矩阵来构造多元分布。 这消除了原始Sigma元素之间可预测的相互关系(见评论)。

import numpy as np

n = 100
p = 10

mu = np.random.normal(loc=0, scale=3, size=p)
A_vec = np.random.uniform(low = -4, high = 4, size = (p, p))
Sigma_vec = np.cov(A_vec)
X = np.random.multivariate_normal(mean = mu, cov = Sigma_vec, size = n)

使用np.corrcoef(XT)检查结果表明生成的变量不再完全相关。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM