R中大矩阵的cholesky分解错误

时间:2015-08-19 10:23:50

标签: r

我正在尝试将大协方差矩阵分解为R中投资组合优化的一部分,但它似乎不适用于具有超过100个变量的矩阵。以下是一些随机数据的示例:

set.seed(123)
a <- NULL

for(i in 1:300) {
  a <- cbind(a, rnorm(100))
}

chol(cov(a))

Error in chol.default(cov(a)) : 
  the leading minor of order 101 is not positive definite

但如果我减少样本,它可以正常工作:

b <- NULL

for(i in 1:100) {
  b <- cbind(b, rnorm(100)) 
}

chol(cov(b))

我已经尝试了几次,并且对于具有超过100到105个变量的协方差矩阵,似乎会发生错误。有谁知道这个问题的根源?

编辑2:这有效:

set.seed(123)
c <- NULL

for(i in 1:300) {
  c <- cbind(c, rnorm(300))
}

chol(cov(c))

但这不是:

d <- NULL

for(i in 1:301) {
  d <- cbind(d, rnorm(300))
}

chol(cov(d))

Error in chol.default(cov(d)) : 
  the leading minor of order 300 is not positive definite

那么变量的数量可能不会超过观察数量?

1 个答案:

答案 0 :(得分:1)

如果您只有100个观测值,则您的协方差矩阵的排名最多为100.这就是胆怯分解失败的原因。