我试图使用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
问题不在于大小,而在于数字排名!
d <- chol(corrMat, pivot = TRUE)
dim(corrMat)
#[1] 72 72
attr(d, "rank")
#[1] 62
corrMat
不是肯定的。普通的Cholesky分解会失败,但枢轴版本有效。
这里可以获得正确的乔列斯基因子(参见正半定矩阵的乔列斯基分解中枢轴的正确使用(
r <- attr(d, "rank")
reverse_piv <- order(attr(d, "pivot"))
d[-(1:r), -(1:r)] <- 0
R <- d[, reverse_piv]
这是否可接受取决于您的上下文。它可能需要对其他代码进行相应的调整。
枢轴Cholesky分解可以做许多对于有缺陷的、不可逆的协方差矩阵来说听起来不可能的事情,比如
- 抽样(通过枢轴乔列斯基分解生成具有秩缺陷协方差的多元正态 r.v.(;
- 最小二乘(通过求解正态方程进行线性回归(