您所看到的正是人们所期望的。矩阵的条件数X是关于106. 双精度浮点计算给出大约 18 位精度,因此,在双精度下,您最多可以得到18 - 6 = 12来自 QR 的估计系数的有效数字,最多18 - 6 - 6 = 6Cholesky 的重要数字,在考虑到由于条件反射而损失的准确性之后。(Cholesky 损失了两倍的有效数字,因为形成X吨X条件数的平方。)因此,两种算法的系数应该在第 6 位有效数字开始有所不同,这正是您所看到的。您的结果表明,x2两种算法之间的相对差异约为
0.2 / 148232 = 1.35 ×10− 6,
它与您开始时的条件编号非常吻合。
条件数X当残差很小时,是一个合理的精度指南。如果我们确保确切的系数是 1 和 1.00001
> y <- X %*% c(1,1.00001)
并重新运行我们得到的计算
> result
chol qr
x1 0.9999833544961814 0.999999999968327
x2 1.0000266455870466 1.000010000031673
确认 QR 实际上对 12 位有效数字是正确的,而 Cholesky 对 6 位有效数字是正确的。
Cholesky 的拟合值通常比估计的系数更精确。如果拟合值对您来说比系数更重要,并且在高度共线的情况下通常如此,那么 Cholesky 通常没问题。当残差非常大时,Cholesky 也与 QR 一样好,但这对于两种算法来说都是最困难的情况。我的博士生导师是澳大利亚最重要的数字分析师(迈克·奥斯本),他过去常说 Cholesky 并没有人们想象的那么糟糕。
在 Golub 和 Van Loan (1996) 的第 5.3.8 节中给出了 Cholesky 与 QR 的完整敏感性分析,并且比我上面使用的简单计算要复杂得多。Cholesky 的灵敏度大致与κ + ρκ2在哪里κ是条件数X和ρ是一个在实践中几乎不可能计算的理论量。
ρ取决于残差的大小——它大致与残差的平均平方成正比,但要小得多。QR 的灵敏度比 Cholesky 好一些,但并不总是像我上面建议的那样好。Golub 和 Van Loan 评论:
至少,这个讨论应该让你相信选择“正确”的算法是多么困难!
参考
Golub, GH 和 Van Loan CF (1996)。矩阵计算。约翰霍普金斯大学出版社,巴尔的摩。