我在处理排名不足的情况时非常依赖该qr()函数,但最近遇到了一些它无法正常工作的示例。考虑下面的矩阵badX:
badX <-
structure(c(-1.641906809157e-10, 0, 0, 0, 0, -0.5, 0, 0, -1.10482935525559e-16,
0, -3.06266685765538e-17, 0, -4.83736007092039e-17, 0, -3.14414492582296e-18,
-3.06158275836099e-18), dim = c(4L, 4L), dimnames = list(c("(Intercept)",
"A2", "A3", "B2"), NULL))
Run Code Online (Sandbox Code Playgroud)
我们不能使用以下方法反转该矩阵solve():
solve(badX)
## Error in solve.default(badX): system is computationally singular: reciprocal condition number = 5.55308e-18
Run Code Online (Sandbox Code Playgroud)
然而qr(),其相关例程认为该矩阵的秩为 4,并且可以对其求逆:
qr(badX)$rank
## [1] 4
qr.solve(badX)
## [,1] [,2] [,3] [,4]
## [1,] -6090479645 0 2.197085e+10 7.366741e+10
## [2,] 0 -2 0.000000e+00 0.000000e+00
## [3,] 0 …Run Code Online (Sandbox Code Playgroud)