如何从 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
的零均值多元正态分布。
我需要为项目生成一个 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
的零均值多元正态分布。