0

当我得到一些奇怪的结果时,我正在运行 Microsoft R 3.3.0 的 macbook 上进行一些主成分分析。与同事仔细检查后,我意识到 SVD 函数的输出与我使用 vanilla 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

而是在 vanilla R 上(在两台不同的 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

典型的例子形成了一个病态矩阵。有一些 SV 最接近于零,使得 SVD 分解数值对 SVD 的不同实现敏感,这可能就是你所看到的

于 2016-10-16T20:28:24.700 回答
0

正如microsoft-r-open 的 Github 中所证实的那样,这似乎是一种错误。他们说这种行为正在调查中,它与 MacOs 中的 Accelerate 库有关。

于 2016-11-04T11:01:06.563 回答