提问者:小点点

my相关矩阵的Cholesky分解失败


我正在尝试使用来寻找下面相关矩阵的Cholesky分解。我可以使用这个函数的最大大小吗?我这样问是因为我得到了以下几点:

d <-chol(corrMat)
Error in chol.default(corrMat) : 
  the leading minor of order 61 is not positive definite

但是,我可以将它分解为少于60个元素而没有问题(即使它包含原始元素的第61个元素):

> d  <-chol(corrMat[10:69, 10:69])
> d  <-chol(corrMat[10:70, 10:70])
Error in chol.default(corrMat[10:70, 10:70]) : 
  the leading minor of order 61 is not positive definite

下面是矩阵:

https://drive.google.com/open?id=0b0f1ywdnki2vnkjhmdvhlwh4wja


共1个答案

匿名用户

问题不在于大小,而在于数值排名!

d <- chol(corrMat, pivot = TRUE)

dim(corrMat)
#[1] 72 72

attr(d, "rank")
#[1] 62

不是正定的。普通的Cholesky分解会失败,但枢轴版本可以工作。

这里正确的Cholesky因子可以得到(参见在半正定矩阵Cholesky分解中正确使用枢轴)

r <- attr(d, "rank")
reverse_piv <- order(attr(d, "pivot"))
d[-(1:r), -(1:r)] <- 0
R <- d[, reverse_piv]

这是否可以接受取决于您的上下文。它可能需要对其他代码进行相应的调整。

枢轴Cholesky因子分解可以做许多听起来不可能的事情,对于一个亏量的,不可逆的协方差矩阵来说,比如