4

在 R 中编码时,我发现该函数svd()有时可能会抛出错误消息:

Error in La.svd(x, nu, nv) : error code 1 from Lapack routine 'dgesdd'. 

在谷歌中搜索了一些信息,结果发现这个错误意味着使用的算法svd()没有收敛。很多人也遇到了同样的错误信息,我尝试了他们使用的许多方法,但没有一种方法能正常工作,例如使用 parameter LINPACK = TRUE,舍入矩阵甚至使用propack.svd()and trlan.svd()

我的输入数据是一个矩阵,对角线条目等于 1,其他条目为 0 或相对较小。我猜这个错误与数值精度有关,所以我尝试将矩阵四舍五入round(matrix,6)。这有时会有所帮助,但不能从根本上解决问题,我担心这种四舍五入会导致一些有偏见的结果。

如果有人能告诉我如何解决这个问题,我将不胜感激。

4

1 回答 1

-1

这发生在我身上,用于大型随机生成(rnorm)矩阵(例如,运行 svd 以获得填充 rnorm 的 250 x 800 矩阵的 cor 的前 6 个特征向量)。是的,那个cor矩阵是秩不足的。这样做足够多次,错误就会弹出。我确实发现在我的情况下四舍五入到 5 位数使它停止发生(至少减少了发生率,这样它就不会在我正在做的大量随机试验中出现)。与不会影响我结果质量的 OP 不同。

于 2015-05-29T04:47:51.507 回答