【问题标题】:R - glmer different results on different machines (non-deterministic)R - glmer 在不同机器上的不同结果(非确定性)
【发布时间】:2016-10-30 00:09:54
【问题描述】:

lme4 中的 glmer 函数在不同的机器上会产生不同的结果有什么原因吗?机器中的硬件有很大不同,尽管它们都运行相同的操作系统、R 和软件包版本(事实证明这不是真的)

该公式有一个分组的二项式响应变量和 22 个连续固定效应,它们都在相同的尺度上,还有几个随机效应,它们是字符串,我正在使用 logit 链接函数。

cbind(ill, not_ill) ~ 0 + fix1 + fix2 + ... + fix22 + (1|id/region/country) +
(1|season)

当使用训练和测试数据集进行遗漏交叉验证时,我得到非常相似的结果。然而,在一台机器上,我得到始终如一的干净输出,没有任何警告;另一方面,我在测试的每一部分都会收到收敛警告。

注意训练/测试集在机器上是相同的

编辑:添加sessionInfo()

Machine 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 的依赖项。感谢 cmets 带领我来到这里。

【问题讨论】:

  • 请提供一个可复现的例子stackoverflow.com/help/mcve话虽如此,你在两台计算机上设置了相同的种子值,对吧?
  • 出于保密原因,这是我能提供的最多信息。我不是在寻找我的问题的解决方案,我只是想了解/找出我所描述的内容是否有任何我没有看到的非确定性组件。我不认为这真的值得投反对票。
  • 这真的不是它的工作原理。每个有工作的人都有机密数据,这是这里 99.9% 的人。您有责任花时间和精力使用公共、自行创建或不知情的数据制作一个可重复的示例,这样它就可以反映您的问题,而无需成为您的实际数据。由于不包含可重复的示例,我投票结束这个问题作为题外话。
  • @RockJake28 ;如果您可以从您正在使用的每台计算机上编辑您的问题sessionInfo() 的结果,那将会很有帮助。在拟合原始模型时或仅在使用交叉验证时,您会得到不同的结果吗:您是否按照 Hack-R 的建议使用了 set.seed
  • @Hack-R 我很欣赏你所说的,但我不是在找人来解决我的问题,这当然需要一个可重现的例子。我的问题是“有什么理由为什么 lme4 的 glmer 函数会在不同的机器上产生不同的结果?”,而不是如何修复它或类似的东西。我正在寻找是否有,例如,lme4 的某些部分使用会受不同硬件影响的值。 @user20650 完整运行需要几个小时,我添加了 set.seedvalue 并将报告结果,我将更新 sessionInfo()

标签: r lme4 non-deterministic


【解决方案1】:

我不确定您在这里所说的“非确定性”是什么意思;我通常认为这意味着同一代码的连续运行,在同一台机器上,可能会产生不同的结果。

对于大而不稳定的问题,在同一操作系统下的不同硬件平台上得到不同的结果会有点令人惊讶,但并非不可能。我们当然会看到相同版本的包(相同的 R 和 C++ 代码)在不同操作系统下使用不同编译器编译时会产生不同结果的情况。如果这些差异在公差测试的任一侧,那么您将在一种情况下收到警告,而在另一种情况下则不会。我更关心的是估计在不同平台上的差距有多远,而不是你是否收到警告。

这肯定会缩小范围以确保您做的所有事情都尽可能相似(例如,您仍在使用不同版本的 R,并且正如您所指出的,在不同的机器上使用不同版本的 Matrix .. .)

【讨论】:

  • “相同版本的包(相同的 R 和 C++ 代码)在使用不同的编译器编译时会产生不同的结果”这就是我一直在寻找的。谢谢。
猜你喜欢
  • 2021-08-21
  • 1970-01-01
  • 1970-01-01
  • 2019-07-08
  • 1970-01-01
  • 2018-03-27
  • 2020-09-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多