【发布时间】: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