我一直在使用R中的parameters包中的bootstrap_parameters函数来处理由glmmTMB生成的广义线性混合模型。这些模型在未开启并行处理(parallel="no")时可以正常工作,在我的旧Mac上开启“multicore”方式的并行处理也能正常工作。现在我正在一台新的Windows电脑上工作,需要使用parallel="snow"来进行并行处理,但是我遇到了以下错误:
system.time(b <- bootstrap_parameters(m1, iterations = 10, parallel = "snow", n_cpus = 6)) Error in data.frame(..., check.names = FALSE) : arguments imply differing number of rows: 0, 1 In addition: Warning message: In lme4::bootMer(model, boot_function, nsim = iterations, verbose = FALSE, : some bootstrap runs failed (10/10) Timing stopped at: 0.89 0.3 7.11
如果我选择n_cpus=1,则函数可以正常工作;如果我将bootstrap_parameters或bootstrap_model应用于lm对象(其中基础代码使用boot::boot),它也可以正常工作。我已经将问题缩小到了bootMer(lme4)。我怀疑使用clusterExport导出的数据集落入了与聚类bootMer函数所查找的环境不同的环境中。以下是一个可重复的示例。
有没有解决这个问题的想法?
system.time(b <- bootstrap_parameters(m1, iterations = 10, parallel = "snow", n_cpus = 6)) Error in data.frame(..., check.names = FALSE) : arguments imply differing number of rows: 0, 1 In addition: Warning message: In lme4::bootMer(model, boot_function, nsim = iterations, verbose = FALSE, : some bootstrap runs failed (10/10) Timing stopped at: 0.89 0.3 7.11
如果我选择n_cpus=1,则函数可以正常工作;如果我将bootstrap_parameters或bootstrap_model应用于lm对象(其中基础代码使用boot::boot),它也可以正常工作。我已经将问题缩小到了bootMer(lme4)。我怀疑使用clusterExport导出的数据集落入了与聚类bootMer函数所查找的环境不同的环境中。以下是一个可重复的示例。
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)
有没有解决这个问题的想法?
bootMer
:例如,bootMer(m1, FUN = \(x)fixef(x)$cond, nsim =5, cl = cl)
对我来说是有效的。 - Ben Bolkersystem.time(c <- bootMer(m1, FUN = \(x)fixef(x)$cond, nsim =24, ncpus = 6, cl = cl, parallel = "snow"))
- plants-22