0

Microsoft R 3.3.0 を実行している macbook で主成分分析を行っていたところ、奇妙な結果が得られました。同僚に再確認したところ、SVD 関数の出力がバニラ R を使用して得られるものとは異なることに気付きました。

これは再現可能な結果です。ここでファイル (~78 Mb) をロードしてください。

Microsoft R 3.3.0 (x86_64-apple-darwin14.5.0) では、次のようになります。

>> sv <- svd(Cx)
>> print(sv$d[1:10])

 [1] 122.73664 104.45759  90.52001  87.21890  81.28256  74.33418      73.29427  66.26472  63.51379
[10]  55.20763

代わりにバニラ R (2 つの異なる Linux マシンで R 3.3 と R 3.3.1 の両方を使用):

>> sv <- svd(Cx)
>> print(sv$d[1:10])

 [1] 122.73664  34.67177  18.50610  14.04483   8.35690   6.80784   6.14566
 [8]   3.91788   3.76016   2.66381

これはすべてのデータで発生するわけではありません。ランダムな行列を作成し、それに svd を適用すると、同じ結果が得られます。つまり、一種の数値不安定性のようですね。

Cx更新: パッケージを使用して、同じバージョンの R を使用して、同じマシン (macbook) 上の同じ行列 () で SVD を計算しようとしましたがsvd 、最終的に「正しい」数値が得られました。次に、Microsoft R Open で使用される svd 実装が原因のようです。

更新: この動作は MRO 3.3.1 でも発生します

4

2 に答える 2

1

典型的な例は、悪条件の行列を形成します。SVD 分解を SVD のさまざまな実装に数値的に敏感にするゼロに最も近い SV がいくつかあります。これはおそらくあなたが見ているものです

于 2016-10-16T20:28:24.700 に答える
0

microsoft-r-open の Github で確認されているように、これは一種のバグのようです。彼らは、この動作は調査中であり、MacO の Accelerate ライブラリに関連していると述べています。

于 2016-11-04T11:01:06.563 に答える