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 でも発生します