我的相关矩阵的Cholesky分解失败

时间:2017-03-20 20:03:02

标签: r matrix matrix-factorization matrix-decomposition

我正在尝试使用chol()来查找下面的相关矩阵的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 个答案:

答案 0 :(得分:2)

问题不是尺寸,而是数字等级!

d <- chol(corrMat, pivot = TRUE)

dim(corrMat)
#[1] 72 72

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

corrMat不是肯定的。普通的Cholesky分解会失败,但是旋转版本会起作用。

可以获得正确的Cholesky因子(参见Correct use of pivot in Cholesky decomposition of positive semi-definite matrix

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

这是否可以接受取决于您的背景。它可能需要相应调整您的其他代码。

对于缺陷的,不可逆的协方差矩阵,单调Cholesky分解可以做很多事情,例如