簡體   English   中英

在 merMod 上的 bootstrap_parameters/model 中使用“snow”並行操作 object (R)

[英]Using "snow" parallel operations in bootstrap_parameters/model on merMod object (R)

我一直在使用 glmmTMB 生成的廣義線性混合模型上使用 bootstrap_parameters(R 中的參數 package)。 這些在沒有並行處理的情況下工作正常(parallel =“no”),並且在我使用 parallel =“multicore”的舊的和慢速 mac 上也工作正常。 我正在使用一台新 PC(Windows 操作系統),因此需要使用 parallel = "snow" 但是我收到以下錯誤:

system.time(b <- bootstrap_parameters(m1, iterations = 10, parallel = "snow", n_cpus = 6)) error in data.frame(..., check.names = FALSE): arguments 意味着行數不同: 0, 1 此外:警告消息:在 lme4::bootMer(model, boot_function, nsim = iterations, verbose = FALSE, : some bootstrap runs failed (10/10) Timing stopped at: 0.89 0.3 7.11

如果我 select n_cpus = 1,則 function 可以工作,或者如果我將 bootstrap_parameters 或 bootstrap_model 提供給 lm object(其中底層代碼使用 boot::boot),它也可以正常工作。 我已將問題縮小到 bootMer (lme4)。 我懷疑使用 clusterExport 導出的數據集所處的環境與集群 bootMer function 所處的環境不同。 下面是一個可重現的例子

library(glmmTMB)
library(parameters)
library(parallel)
library(lme4)

m1 <- glmmTMB(count ~ mined + (1|site), zi=~mined,
              family=poisson, data=Salamanders)
summary(m1)

cl <- makeCluster(6)
clusterEvalQ(cl, library("lme4"))
clusterExport(cl, varlist = c("Salamanders"))

system.time(b <- bootstrap_parameters(m1, iterations = 10, parallel = "snow", n_cpus = 6))

stopCluster(cl)

關於解決這個問題的任何想法?

您需要clusterEvalQ(cl, library("glmmTMB")) 來自https://github.com/glmmTMB/glmmTMB/issues/843

這個問題或多或少地通過文檔補丁解決了(我們需要明確地 clusterEvalQ(cl, library("glmmTMB")))。 唯一的問題是我們是否可以讓用戶更輕松地做到這一點。 這里有兩個問題:(1)當用戶設置自己的集群而不是讓它在 bootMer 中完成時,在任何情況下都需要更明確的 clusterEvalQ/clusterExport 東西; (2) bootMer 在內部執行 parallel::clusterExport(cl, varlist=getNamespaceExports("lme4")) 如果它正在設置集群(如果集群已設置並由用戶傳遞給 bootMer),但我們不會不希望它向 glmmTMB 提供同樣的禮貌......

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM