4

R でコーディングすると、関数svd()がエラー メッセージをスローすることがあります。

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

Google で情報を検索したところ、このエラーは で使用されているアルゴリズムsvd()が収束していないことを意味していることがわかりました。LINPACK = TRUE多くの人も同じエラーメッセージに遭遇し、私は彼らが使用した多くの方法を試しましたが、 parameterの使用、行列の丸め、さらにはpropack.svd()andの使用など、誰も正しく機能しませんでしtrlan.svd()た。

私の入力データは、対角要素が 1 に等しい行列で、他の要素は 0 または比較的小さいです。このエラーは数値の精度に関係していると思われるので、行列を のように丸めてみましたround(matrix,6)。これは役立つ場合もありますが、問題を根本的に解決することはできず、この丸めにより偏った結果が生じるのではないかと心配しています。

誰かがこの問題を解決する方法を教えてくれたら、とても感謝しています。

4

1 に答える 1

-1

これは、ランダムに生成された大規模な (rnorm) マトリックスで発生しました (たとえば、svd を実行して、rnorm で満たされた 250 x 800 マトリックスのコアの最初の 6 つの固有ベクトルを取得します)。はい、そのcor行列はランク落ちです。これを十分な回数行うと、エラーがポップアップします。私の場合、5桁に丸めると発生しなくなることがわかりました(少なくとも、私が行っている多数のランダム試行で発生しないように、発生を減らします)。結果の品質に影響を与えない OP とは異なります。

于 2015-05-29T04:47:51.507 に答える