系统在计算上是奇异的:R 中的倒数条件数

Mat*_*d18 1 r matrix solver

x <- matrix(rnorm(80, mean = 0, sd = 0.1), 8, 8)
c <- cov(x)
solve(c)
Run Code Online (Sandbox Code Playgroud)

我收到错误消息:

solve.default(c) 中的错误:系统在计算上是奇异的:倒数条件数 = 6.57889e-18

我一直在试图找出问题背后的原因,Stack Overflow 上的其他线程表明该问题可能是由于奇异矩阵、高度相关的变量、线性组合等rnorm造成的。但是,我认为这会避免提到的问题.

对于我正在使用的另一个矩阵 det() 给出了8.313969e-95,但它仍然可以与solve().

Mau*_*ers 7

两个基本的线性代数性质:

  1. 奇异(方)矩阵是不可逆的(方)矩阵。
  2. 如果行列式为零,则矩阵不可逆。

如果你检查

set.seed(2018);
x <- matrix(rnorm(80, mean = 0, sd = 0.1), 8, 8)
c <- cov(x)
det(c)
#[1] -3.109158e-38
Run Code Online (Sandbox Code Playgroud)

所以确实det(c)是零(在机器精度范围内);因此c是不可逆的,这正是我们solve(c)想要做的。

PS 1:看一看?solvesolve(a)会返回 的倒数a
PS 2:有一篇关于协方差矩阵行列式解释的交叉验证的好文章。看看你为什么会看到你所看到的。