[英]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.