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().
两个基本的线性代数性质:
如果你检查
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:看一看?solve,solve(a)会返回 的倒数a。
PS 2:有一篇关于协方差矩阵行列式解释的交叉验证的好文章。看看你为什么会看到你所看到的。