当我得到一些奇怪的结果时,我正在运行 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