1

我试图用它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

4

1 回答 1

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 allocation 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 分解可以做许多对于有缺陷的、不可逆的协方差矩阵来说听起来不可能的事情,比如

于 2017-03-20T21:32:50.217 回答