R-glmer不同机器上的不同结果(非确定性)
是否有任何原因说明R-glmer不同机器上的不同结果(非确定性),r,lme4,non-deterministic,R,Lme4,Non Deterministic,是否有任何原因说明lme4的glmer功能会在不同的机器上产生不同的结果?这些机器中的硬件有着本质上的不同,尽管它们都运行着相同的OS、R和软件包版本(事实证明并非如此) 这个公式有一个分组的二项式响应变量和22个连续的固定效应,它们都在同一个尺度上,还有几个随机效应,它们是字符串,我使用的是logitlink函数 cbind(ill, not_ill) ~ 0 + fix1 + fix2 + ... + fix22 + (1|id/region/country) + (1|season) 当
lme4
的glmer
功能会在不同的机器上产生不同的结果?这些机器中的硬件有着本质上的不同,尽管它们都运行着相同的OS、R和软件包版本(事实证明并非如此)
这个公式有一个分组的二项式响应变量和22个连续的固定效应,它们都在同一个尺度上,还有几个随机效应,它们是字符串,我使用的是logit
link函数
cbind(ill, not_ill) ~ 0 + fix1 + fix2 + ... + fix22 + (1|id/region/country) +
(1|season)
当使用列和测试数据集进行遗漏交叉验证时,我得到了非常类似的结果。然而,在一台机器上,我得到了一贯干净的输出,没有任何警告;另一方面,我在测试的每一个方面都得到了收敛警告
N.B.各机器的列车/测试集相同
编辑:添加sessionInfo()
机器1(这是一个能产生好结果的机器
R version 3.3.1 (2016-06-21)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Ubuntu 16.04.1 LTS
locale:
[1] LC_CTYPE=en_GB.UTF-8 LC_NUMERIC=C
[3] LC_TIME=en_GB.UTF-8 LC_COLLATE=en_GB.UTF-8
[5] LC_MONETARY=en_GB.UTF-8 LC_MESSAGES=en_GB.UTF-8
[7] LC_PAPER=en_GB.UTF-8 LC_NAME=C
[9] LC_ADDRESS=C LC_TELEPHONE=C
[11] LC_MEASUREMENT=en_GB.UTF-8 LC_IDENTIFICATION=C
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] blmeco_1.1 arm_1.9-1 MASS_7.3-45 lme4_1.1-12 Matrix_1.2-7.1
loaded via a namespace (and not attached):
[1] minqa_1.2.4 coda_0.18-1 abind_1.4-5 Rcpp_0.12.7
[5] MuMIn_1.15.6 splines_3.3.1 nlme_3.1-128 grid_3.3.1
[9] nloptr_1.0.4 stats4_3.3.1 lattice_0.20-34
R version 3.2.3 (2015-12-10)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Ubuntu 16.04.1 LTS
locale:
[1] LC_CTYPE=en_GB.UTF-8 LC_NUMERIC=C
[3] LC_TIME=en_GB.UTF-8 LC_COLLATE=en_GB.UTF-8
[5] LC_MONETARY=en_GB.UTF-8 LC_MESSAGES=en_GB.UTF-8
[7] LC_PAPER=en_GB.UTF-8 LC_NAME=C
[9] LC_ADDRESS=C LC_TELEPHONE=C
[11] LC_MEASUREMENT=en_GB.UTF-8 LC_IDENTIFICATION=C
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] blmeco_1.1 arm_1.9-1 MASS_7.3-45 lme4_1.1-12 Matrix_1.2-3
loaded via a namespace (and not attached):
[1] minqa_1.2.4 coda_0.18-1 abind_1.4-5 Rcpp_0.12.7
[5] MuMIn_1.15.6 splines_3.2.3 nlme_3.1-124 grid_3.2.3
[9] nloptr_1.0.4 stats4_3.2.3 lattice_0.20-33
机器2(结果不太好)
显然,这里有一些差异我没有注意到,所以我会纠正一下,看看输出是否有任何变化。在存在的差异中,
矩阵
是最有可能引起问题的一个,因为(我认为)它是lme4
的依赖项。感谢您的评论,让我来到这里。我不确定您的意思这里的“非确定性”;我通常认为这意味着相同代码的连续运行,在同一台机器上,可能会产生不同的结果
对于大型、不稳定的问题,在相同的操作系统下,在不同的硬件平台上得到不同的结果,会有点奇怪,但不是不可能的。我们当然看到了相同版本的包(相同的R和C++代码)的情况。在不同的操作系统下使用不同的编译器编译时,会给出不同的结果。如果这些差异出现在公差测试的任何一方,那么在一种情况下,您将收到警告,而在另一种情况下,您将不会收到警告。我更关心的是估计值在不同平台上的差异有多大,而不是您是否收到警告。
它肯定会缩小范围,以确保您所做的一切尽可能相似(例如,您仍然在使用不同版本的R,并且,正如您所指出的,在不同的机器上使用不同版本的
Matrix
)。我不确定您所说的“非确定性”是什么意思“这里;我通常认为这意味着在同一台机器上连续运行相同的代码,,可能会得到不同的结果
对于大型、不稳定的问题,在相同的操作系统下,在不同的硬件平台上得到不同的结果,会有点奇怪,但不是不可能的。我们当然看到了相同版本的包(相同的R和C++代码)的情况。在不同的操作系统下使用不同的编译器编译时,会给出不同的结果。如果这些差异出现在公差测试的任何一方,那么在一种情况下,您将收到警告,而在另一种情况下,您将不会收到警告。我更关心的是估计值在不同平台上的差异有多大,而不是您是否收到警告。
它肯定会缩小范围,以确保您所做的一切尽可能相似(例如,您仍然在使用不同版本的R,并且正如您所指出的,在不同的机器上使用不同版本的
矩阵
)请提供一个可复制的示例,说明您在两台计算机上设置了相同的种子值,对吗?由于保密原因,这是我能提供的最多信息。我不是在寻找问题的解决方案,我只是试图了解/找出我所描述的是否存在任何不确定性组件目前,我看不到。我认为这真的不值得投反对票。这真的不是它的工作方式。每个有工作的人都有保密数据,这是99.9%的人在这里。你的负担是花时间和精力使用公开的、自创的或盲目的数据制作一个可复制的例子,这样它就可以无需反映你的问题这是您的实际数据。由于没有包含可复制的示例,我投票将此问题作为离题题结束。@RockJake28;如果您可以编辑您的问题sessionInfo()的结果,这将非常有用
来自您正在使用的每台计算机。在拟合原始模型或仅在使用交叉验证时,您是否获得了不同的结果:您是否将set.seed
用作Hack-Rsuggesed@Hack-R我很感激你所说的,但我不是在找人来解决我的问题,这当然需要一个可复制的例子问题是“lme4的glmer函数为什么会在不同的机器上产生不同的结果?”,而不是如何修复它或诸如此类的问题。我想知道是否有lme4
的某些部分使用的值会受到不同硬件的影响。@user20650一次完整运行需要几个小时,我已经添加了set.seed
值,并将报告结果,我将使用sessionIn更新fo()
请提供一个可复制的示例,您在两台计算机上设置了相同的种子值,对吗?由于保密原因,这是我能提供的最多信息。我不是在寻找问题的解决方案,我只是试图了解/找出我所描述的是否存在任何不确定的组件我没有看到。我不认为这真的值得否决。这真的不是它的工作方式。每个有工作的人都有保密数据,这是99.9%的人在这里。你的负担是花时间和精力使用公开的、自创的或盲目的数据制作一个可复制的例子,这样它就可以毫无疑问地反映你的问题艾丁