r - R中函数svd()的收敛误差

标签 r svd convergence

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

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

在Google上查了一些资料,原来这个错误是指svd()中使用的算法。不收敛。很多人也遇到了同样的错误信息,我尝试了很多他们使用的方法但没有一个能正常工作,例如使用参数LINPACK = TRUE ,对矩阵进行四舍五入,甚至使用 propack.svd()trlan.svd() .

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

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

最佳答案

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

关于r - R中函数svd()的收敛误差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24405671/

相关文章:

python - Sklearn TruncatedSVD 不返回 n,组件

exception - 在 numpy 的 svd 方法中使用替代 LAPACK 驱动程序?

python - Python 可以优化我的函数输入以获得目标值吗?

R 启动时安装包时出错

R 在函数内使用临时选项设置

r - 对函数结果的赋值会改变变量

r - nls - 收敛错误

r - 如何根据与 R 中分组数据框中其他行中的值的比较来过滤行?

matlab - 在 Matlab 中使用不同函数计算的主成分

c - c中的几何级数,错误的解决方案