R解决:系统完全是奇异的
Posted
技术标签:
【中文标题】R解决:系统完全是奇异的【英文标题】:R solve:system is exactly singular 【发布时间】:2011-09-28 03:56:55 【问题描述】:我正在解决简单的优化问题。该数据集有 26 列和 3000 多行。 源代码看起来像
Means <- colMeans(Returns)
Sigma <- cov(Returns)
invSigma1 <- solve(Sigma)
一切正常——但是我想在更短的时间内做同样的事情(只有 261 行),并且求解函数写入以下错误:
solve(Sigma)
Error in solve.default(Sigma) :
Lapack routine dgesv: system is exactly singular
这很奇怪,因为当我对一些随机数做同样的事情时:
Returns<-matrix(runif(6786,-1,1), nrow=261)
Means <- colMeans(Returns)
Sigma <- cov(Returns)
invSigma <- solve(Sigma)
根本没有发生错误。有人可以解释一下问题出在哪里以及如何治疗。 非常感谢, 亚历克斯
【问题讨论】:
【参考方案1】:将solve
与单个参数一起使用是对矩阵求逆的请求。错误信息告诉你你的矩阵是单数的,不能倒置。
【讨论】:
以下页面,靠近底部,帮助我理解了反转和奇点问题的概念:link【参考方案2】:我猜你的代码在第二种情况下使用了奇异矩阵(即不可逆),并且求解函数需要将其反转。这与大小无关,而是与您的某些向量(可能)共线的事实有关。
【讨论】:
数据集包含26种资产的日收益率,应该是可逆的吧?我很困惑为什么当我拥有整个数据集而缩短会产生错误时没有问题。任何想法如何处理它? @Alex Checkdet(Sigma)
:如果为零,则无法反转。
确实是0,缩短数据集有什么问题?
我唯一不明白的是为什么样本量较小会出现问题,分别如何处理因为我需要反转它
@Alex 要么您只是对数字不走运,要么您将数据减少了太多,无法确保线性独立。以下链接可能有用:m-hikari.com/imf-2010/45-48-2010/kaimakamisIMF45-48-2010.pdfarxiv.org/abs/1010.0601【参考方案3】:
Lapack 是一个线性代数包,在solve()
下被 R 使用(实际上它无处不在),当您作为参数传递的矩阵是单数时,dgesv 会吐出这种错误。
作为附录:dgesv 执行 LU 分解,当使用您的矩阵时,它会强制除以 0,因为这是不明确的,它会引发此错误。这只发生在矩阵是奇异矩阵或它在您的机器上是奇异矩阵时(由于近似值,您可以将非常小的数字视为 0)
如果您使用的矩阵主要包含整数并且不大,我建议您检查其行列式。大的话看this link。
【讨论】:
【参考方案4】:我能理解你的问题。问题是你的矩阵是垂直的。您可以看到您的第一个数字和矩阵的最后一个数字相同。
【讨论】:
正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center。以上是关于R解决:系统完全是奇异的的主要内容,如果未能解决你的问题,请参考以下文章