如何从 Wishart 分布生成随机协方差矩阵

How to Generate Random Covariance Matrix from Wishart Distrubtion

我需要为项目生成一个 n x n 正定协方差矩阵。建议从 Wishart 分布中提取。如何在 R 中生成随机协方差矩阵,最好也使用 Wishart 分布。我试过 rwishart() 来获取值,但需要更多帮助。谢谢

请参阅 运行 ?rWishart 的函数文档。

如您所见,您需要提供所需的样本数 n(即 n 随机矩阵)、自由度 df 和参数 Sigma 到函数。另外,你还需要决定想要的随机矩阵的维数。

# Set parameters
n <- 1  # Number of matrices
p <- 5  # Dimension
df <- 10  # Degrees of freedom
Sigma <- toeplitz((p:1)/p)  # the matrix parameter of the distribution

# Draw n Wishart distributed matrices
rwish <- drop(rWishart(n, df, Sigma))
print(rwish)

该函数生成一个 1 x p x p 数组(实际上是一个矩阵),但我们删除了不需要的维度。

您可以通过

生成一个 wishart 分布式矩阵 "manually"
library("mvtnorm")
rgaus <- rmvnorm(n = df, mean = rep(0, p), sigma = Sigma)
rwish2 <- crossprod(rgaus) # crossprod is the same as "t(rgaus) %*% rgaus"

这应该可以帮助您更好地理解 Wishart 分布的实际含义。它是所谓的散点矩阵 df 样本的分布,来自具有方差 Sigma 的零均值多元正态分布。