我正在使用R中的BDgraph包从G-Wishart分布(例如Mohammadi和Wit(2015)和Mohammadi等人(2017))生成样本,但我得到的结果不同从一个操作系统到另一个操作系统。
然而,结果在不同机器上的相同操作系统上是一致的!
要看到这个(并给出一个可重复的最小例子)我将从一个操作系统上的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版本为3.4.1,而BDgraph和所有连接的软件包都是最新版本*。
对于那些可能好奇的人,OSX会给出一致的不同第三组答案......
我能想到的唯一改变的是BLAS和LAPACK库,但我没有在我的linux系统上安装任何“实验性”/奇怪的包,openBLAS,我甚至不知道Windows上哪一个(R中的一个R来自CRAN的二进制文件)......
编辑:我认为没有真正的问题,所以...你怎么看待它?知道为什么会这样吗?知道如何解决这个问题吗?在证明错误之前,我会假设我是那个做错事的人,无论是在抽样中还是在验证中,所以我决定在直接联系包的维护者之前写这篇文章。
*(在两种情况下从github编译的igraph在Linux上正常安装失败。)
答案 0 :(得分:0)
问题已解决(我相信)该软件包的2.42版本。
问题在于在一些OMP并行区域内采样随机数。 Linux和MacOSX可以使用OMP而Windows下的版本无法使用,因此不同操作系统下的结果不同(Windows版本可供参考)。
该软件包的作者找出了问题,并提供了在本答复时可从下一版本获得的修复程序。