R中大矩阵cholesky分解的误差
我试图将一个大的协方差矩阵分解为R中投资组合优化的一部分,但它似乎不适用于超过100个变量的矩阵。以下是一些随机数据的示例:R中大矩阵cholesky分解的误差,r,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 s
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
set.seed(123)
a如果只有100个观测值,协方差矩阵的秩最多为100。这就是cholesky分解失败的原因 我想这个问题在这里已经得到了全面的回答。。。这是同样的错误,但我相信原因可能不同。这个问题的答案是“问题的出现是因为你过度拟合了你的模型(太多的参数、变量),有些变量是高度共线的,或者你的案例中遗漏了所有变量……”,但这似乎不适用于这种情况,所以变量的数量可能不会超过观察值的数量?确切地说。chol
的帮助页面上说:“计算实对称正定方阵的Choleski分解”。如果变量的数量超过了观测值的数量,那么矩阵就不再是正定的。
b <- NULL
for(i in 1:100) {
b <- cbind(b, rnorm(100))
}
chol(cov(b))
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