Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R中大矩阵cholesky分解的误差_R - Fatal编程技术网

R中大矩阵cholesky分解的误差

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

我试图将一个大的协方差矩阵分解为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
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