【问题标题】:Cholesky decomposition failure for my correlation matrix我的相关矩阵的 Cholesky 分解失败
【发布时间】:2017-08-12 06:44:29
【问题描述】:

我正在尝试使用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

【问题讨论】:

  • @zheyuan li 这有效,因为它给了我一个答案,但我不明白输出。我打算将其用于蒙特卡洛模拟,并且根据我正在阅读的有关枢轴的内容,输出的顺序与原始矩阵的顺序不同。还能用吗?

标签: r matrix matrix-factorization matrix-decomposition


【解决方案1】:

问题不是大小,而是数字排名!

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]

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

Pivoted Cholesky 因式分解可以做许多对于有缺陷的不可逆协方差矩阵来说听起来不可能的事情,例如

【讨论】:

  • @zheyuan li 我喜欢你的回答,但我不知道它是否正确。通过阅读文档,我不明白枢轴选项在做什么。我正在使用 d 为资产组合生成蒙特卡罗模拟。因此,我生成了一堆随机法线,通过它们对应的 vol 调整它们,然后将结果传递给 d。如果我对您的矩阵 R 进行此操作,我是否会丢失有关我的投资组合的任何信息(由此产生的回报是否具有正确的相关性)?枢轴的重新排序如何使 Cholesky 分解起作用?
猜你喜欢
  • 2017-10-24
  • 1970-01-01
  • 2011-10-30
  • 1970-01-01
  • 1970-01-01
  • 2022-01-06
  • 2012-07-19
  • 1970-01-01
  • 2015-06-18
相关资源
最近更新 更多