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

时间:2014-06-25 10:01:55

标签: 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()。< / p>

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

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

1 个答案:

答案 0 :(得分:-1)

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