R - 不同机器上的 glmer 不同结果(非确定性)
R - glmer different results on different machines (non-deterministic)
为什么 lme4
中的 glmer
函数会在不同的机器上产生不同的结果?机器中的硬件有很大不同,尽管都是 运行 相同 OS,R 和包版本 (事实证明这实际上不是真的).
该公式有一个分组的二项式响应变量和 22 个连续固定效应,它们都在同一尺度上,还有几个随机效应,它们是字符串,我正在使用 logit
link 函数。
cbind(ill, not_ill) ~ 0 + fix1 + fix2 + ... + fix22 + (1|id/region/country) +
(1|season)
当使用训练和测试数据集进行留一法交叉验证时,我得到了非常 相似的结果。然而,在一台机器上,我得到的输出始终是干净的,没有任何警告;在另一个测试中,我在每一次测试中都会收到收敛警告。
N.B。 train/test 集在机器上是相同的
编辑:添加 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
机器 2(结果不太好)
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
显然这里有一些我遗漏的差异,所以我将纠正它并查看输出是否有任何变化。在存在的差异中,Matrix
是最有可能导致问题的差异,因为(我认为)它是 lme4
的依赖项。感谢引导我来到这里的评论。
我不确定你这里的 "non-deterministic" 是什么意思;我通常认为这意味着相同代码的连续运行,在同一台机器上,可能会产生不同的结果。
对于大型的、不稳定的问题,在同一操作系统下的不同硬件平台上得到不同的结果会有点令人惊讶,但并非不可能。我们当然会看到相同版本的包(相同的 R 和 C++ 代码)在不同的操作系统下使用不同的编译器编译时会给出不同的结果。如果这些差异出现在容差测试的任何一侧,那么您将在一种情况下收到警告,而在另一种情况下则不会。我更关心的是 估计值 在不同平台上的差距,而不是你是否收到警告。
它肯定会缩小范围以确保您尽可能相似地做所有事情(例如,您仍在使用不同版本的 R,正如您指出的,不同版本的 Matrix
,在不同的机器...)
为什么 lme4
中的 glmer
函数会在不同的机器上产生不同的结果?机器中的硬件有很大不同,尽管都是 运行 相同 OS,R 和包版本 (事实证明这实际上不是真的).
该公式有一个分组的二项式响应变量和 22 个连续固定效应,它们都在同一尺度上,还有几个随机效应,它们是字符串,我正在使用 logit
link 函数。
cbind(ill, not_ill) ~ 0 + fix1 + fix2 + ... + fix22 + (1|id/region/country) +
(1|season)
当使用训练和测试数据集进行留一法交叉验证时,我得到了非常 相似的结果。然而,在一台机器上,我得到的输出始终是干净的,没有任何警告;在另一个测试中,我在每一次测试中都会收到收敛警告。
N.B。 train/test 集在机器上是相同的
编辑:添加 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
机器 2(结果不太好)
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
显然这里有一些我遗漏的差异,所以我将纠正它并查看输出是否有任何变化。在存在的差异中,Matrix
是最有可能导致问题的差异,因为(我认为)它是 lme4
的依赖项。感谢引导我来到这里的评论。
我不确定你这里的 "non-deterministic" 是什么意思;我通常认为这意味着相同代码的连续运行,在同一台机器上,可能会产生不同的结果。
对于大型的、不稳定的问题,在同一操作系统下的不同硬件平台上得到不同的结果会有点令人惊讶,但并非不可能。我们当然会看到相同版本的包(相同的 R 和 C++ 代码)在不同的操作系统下使用不同的编译器编译时会给出不同的结果。如果这些差异出现在容差测试的任何一侧,那么您将在一种情况下收到警告,而在另一种情况下则不会。我更关心的是 估计值 在不同平台上的差距,而不是你是否收到警告。
它肯定会缩小范围以确保您尽可能相似地做所有事情(例如,您仍在使用不同版本的 R,正如您指出的,不同版本的 Matrix
,在不同的机器...)