我正在尝试将大协方差矩阵分解为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
那么变量的数量可能不会超过观察数量?
答案 0 :(得分:1)
如果您只有100个观测值,则您的协方差矩阵的排名最多为100.这就是胆怯分解失败的原因。