BDgraph R 包在不同操作系统上产生不同(但一致)的结果
BDgraph R package producing different (but consistent) results on different OSs
我正在使用 R 中的 BDgraph 包从 G-Wishart 发行版(例如 Mohammadi 和 Wit (2015) 和 Mohammadi 等人 (2017))生成样本,但我得到从一个 OS 到另一个的不同结果。
然而,结果在不同机器上的相同 OS 上是一致的!
为了看到这一点(并给出一个最小的可重现示例),我将从一个 OS 上的 rgwish 函数中采样(比如 linux)
library(BDgraph)
N = 10000
s=7
nu = s+5
m = sample(5:50,s,replace = TRUE)
G = matrix(nrow = s,ncol = s,
c(0,1,0,0,0,0,0,
0,0,1,1,0,0,0,
0,0,0,1,1,1,0,
0,0,0,0,1,1,0,
0,0,0,0,0,1,0,
0,0,0,0,0,0,1,
0,0,0,0,0,0,0))
sample_linux <- rgwish( n = N, adj.g = G, b = nu - s + 1 , D = diag(m,s,s) )
save.image("foo.RData")
然后我会将生成的示例和参数保存在某处。重新启动(例如)Windows 和 运行
load("foo.RData")
library(BDgraph)
sample_win <- rgwish( n = N, adj.g = G, b = nu - s + 1 , D = diag(m,s,s) )
plot( density( sample_linux[7,7,],n=2024), type="l")
lines( density( sample_win[7,7,],n=2024 ) ,col="red" )
根据我的经验,两个边缘分布(本例中最后一个对角线元素)明显不同:
但是,如果我在安装了 linux 的另一台机器上重复该过程,则两个示例会重合。
底层图 G 似乎并不重要,我已经尝试使用可分解图或不可分解图,并尝试了邻接矩阵的不同格式(有或没有对角线,对称或上三角等。)虽然这里的那个似乎成为首选格式,并且作者在 rgwish 函数中对其进行了更正。
R 版本在所有机器和 BDgraph 上都是 3.4.1,所有连接的包都是最新版本*。
对于那些可能好奇的人 OSX 给出了始终不同的第三组答案...
我能想到的唯一改变是 BLAS 和 LAPACK 库,但我没有在我的 linux 系统上安装任何 "experimental"/weird 包 openBLAS,而且我没有甚至不知道 Windows 上的哪一个(来自 CRAN 的二进制文件中带有 R 的那个)...
编辑:我想没有真正的问题,所以...你怎么看?知道为什么会发生这种情况吗?知道如何解决这个问题吗?
直到被证明是错误的,我会假设我是做错事的人,无论是在采样还是在验证中,所以我决定在直接联系包的维护者之前写在这里。
*(在这两种情况下,从 github 编译的 igraph 在 linux 上正常安装失败。)
问题已从(我相信)版本 2.42 的软件包中解决。
问题出在某些 OMP 并行区域内的随机数采样。 Linux 和 MacOSX 可以使用 OMP 而我的 Windows 下的版本不能,因此在不同的操作系统下结果不同(Windows 版本是正确的供参考)。
软件包的作者找出了问题并提供了修复程序,该修复程序将在下一个版本发布时提供。
我正在使用 R 中的 BDgraph 包从 G-Wishart 发行版(例如 Mohammadi 和 Wit (2015) 和 Mohammadi 等人 (2017))生成样本,但我得到从一个 OS 到另一个的不同结果。
然而,结果在不同机器上的相同 OS 上是一致的!
为了看到这一点(并给出一个最小的可重现示例),我将从一个 OS 上的 rgwish 函数中采样(比如 linux)
library(BDgraph)
N = 10000
s=7
nu = s+5
m = sample(5:50,s,replace = TRUE)
G = matrix(nrow = s,ncol = s,
c(0,1,0,0,0,0,0,
0,0,1,1,0,0,0,
0,0,0,1,1,1,0,
0,0,0,0,1,1,0,
0,0,0,0,0,1,0,
0,0,0,0,0,0,1,
0,0,0,0,0,0,0))
sample_linux <- rgwish( n = N, adj.g = G, b = nu - s + 1 , D = diag(m,s,s) )
save.image("foo.RData")
然后我会将生成的示例和参数保存在某处。重新启动(例如)Windows 和 运行
load("foo.RData")
library(BDgraph)
sample_win <- rgwish( n = N, adj.g = G, b = nu - s + 1 , D = diag(m,s,s) )
plot( density( sample_linux[7,7,],n=2024), type="l")
lines( density( sample_win[7,7,],n=2024 ) ,col="red" )
根据我的经验,两个边缘分布(本例中最后一个对角线元素)明显不同:
但是,如果我在安装了 linux 的另一台机器上重复该过程,则两个示例会重合。 底层图 G 似乎并不重要,我已经尝试使用可分解图或不可分解图,并尝试了邻接矩阵的不同格式(有或没有对角线,对称或上三角等。)虽然这里的那个似乎成为首选格式,并且作者在 rgwish 函数中对其进行了更正。
R 版本在所有机器和 BDgraph 上都是 3.4.1,所有连接的包都是最新版本*。
对于那些可能好奇的人 OSX 给出了始终不同的第三组答案...
我能想到的唯一改变是 BLAS 和 LAPACK 库,但我没有在我的 linux 系统上安装任何 "experimental"/weird 包 openBLAS,而且我没有甚至不知道 Windows 上的哪一个(来自 CRAN 的二进制文件中带有 R 的那个)...
编辑:我想没有真正的问题,所以...你怎么看?知道为什么会发生这种情况吗?知道如何解决这个问题吗?
直到被证明是错误的,我会假设我是做错事的人,无论是在采样还是在验证中,所以我决定在直接联系包的维护者之前写在这里。
*(在这两种情况下,从 github 编译的 igraph 在 linux 上正常安装失败。)
问题已从(我相信)版本 2.42 的软件包中解决。
问题出在某些 OMP 并行区域内的随机数采样。 Linux 和 MacOSX 可以使用 OMP 而我的 Windows 下的版本不能,因此在不同的操作系统下结果不同(Windows 版本是正确的供参考)。
软件包的作者找出了问题并提供了修复程序,该修复程序将在下一个版本发布时提供。