系统在计算上是奇异的:R 中的倒数条件数
System is computationally singular: reciprocal condition number in R
x <- matrix(rnorm(80, mean = 0, sd = 0.1), 8, 8)
c <- cov(x)
solve(c)
我收到错误消息:
Error in solve.default(c) : system is computationally singular:
reciprocal condition number = 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
所以确实,det(c)
是零(在机器精度内);因此 c
是不可逆的,这正是 solve(c)
想要做的。
PS 1:看一下 ?solve
可以看到 solve(a)
将 return 与 a
相反。
PS 2:数学上存在nice post对协方差矩阵的行列式的解释。看一看以了解为什么你看到了你所看到的。
x <- matrix(rnorm(80, mean = 0, sd = 0.1), 8, 8)
c <- cov(x)
solve(c)
我收到错误消息:
Error in solve.default(c) : system is computationally singular: reciprocal condition number = 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
所以确实,det(c)
是零(在机器精度内);因此 c
是不可逆的,这正是 solve(c)
想要做的。
PS 1:看一下 ?solve
可以看到 solve(a)
将 return 与 a
相反。
PS 2:数学上存在nice post对协方差矩阵的行列式的解释。看一看以了解为什么你看到了你所看到的。