温馨提示:本文翻译自stackoverflow.com,查看原文请点击:r - Make a random correlation matrix semi definite positive
matrix r random

r - 使随机相关矩阵半定正

发布于 2020-03-27 16:01:47

我正在尝试对183个变量进行随机矩阵相关,以计算Cholesky分解并与183个随机法线相关。为了创建相关矩阵,下面使用了可重复的代码:

首先我放下种子

set.seed(2)

然后我生成0.6到0.8之间的随机数

corr <- matrix(runif(183*183, min = 0.6, max = 0.8), 183, 183)

下一步是将对角线变成

for (i in 1:183) {
  for (j in 1:183) {
    if (i == j) {
    corr[i,j] <- 1
    }
  }
}

最后一步是使其对称

for (i in 1:183) {
  for (j in 1:183) {
    if (i < j) {
    corr[i,j] <- corr[j,i]
    }
  }
}

当我尝试进行cholesky分解时出现了我遇到的问题

cholesky <- chol(corr)

我收到以下错误:

chol.default(corr)中的错误:14阶的前导未成年人不是肯定的

如何使相关矩阵半定正?

查看更多

查看更多

提问者
Mauro
被浏览
76
ThomasIsCoding 2020-01-31 17:07

也许您可以尝试下面的代码来生成半定正矩阵

set.seed(2)
v <- runif(183,0.6,0.8)
corr <- `diag<-`(tcrossprod(v),1)