2

我正在尝试使用 dredge 的并行计算版本(包 MUMIn)来选择我的完整 glmer 模型的模型:

 modmer.pom.full<-glmer(cbind(TEST,CONTROL)~ G+MS+l+MS*l+G*MS+G*l+I(l^2) + (1|c)+(1|s)+(1|l)+offset(log(qTEST/qCONTROL)),family=binomial(link = "logit"),data=df.pom.mer, control=glmerControl(optimizer="bobyqa"))

在将 R 集群设置为并​​行运行后,

cl <- makeCluster(3)
registerDoParallel(cl)
clusterExport(cl,"df.pom.mer")

我只是尝试使用 pdredge 函数,如下所示:

pdredge(modmer.pom.full,cluster=cl,rank = "AIC")

但没有评估,相反,我得到了所有子模型的以下输出:

Warning messages:
1: In eval(expr, envir, enclos) :
  could not find function "glmer" (model 0 skipped)

使用非并行计算函数dedge,我没有观察到这个问题。pdredge似乎无法识别glmer,但我找不到原因。我是 MUMIn 和并行包的新用户,所以我可能在 pdredge 参数中遗漏了一些重要的东西吗?

非常感谢,胡安

4

1 回答 1

1

只是为了完整性,正如评论中所建议的那样,如果您 1)指定完全限定名称(lme4::lmer如下)(2)使用clusterEvalQ(cluster, library(lme4))以确保将包加载到工作人员上,则此方法工作正常。

library(lme4)
library(parallel )
cluster = makeCluster(3, type = "SOCK")  ## also need snow installed
set.seed(101)
dd <- data.frame(x1=rnorm(1000),x2=rnorm(1000),x3=rnorm(1000),f=rep(1:20,each=50))
dd$z <- simulate(~x1+x2+x3+(1|f), newdata=dd, 
      newparams=list(theta=1,beta=rep(1,4), sigma=1), family=gaussian)[[1]]
full_model = lme4::lmer(z ~ x1*x2*x3 + (1 | f), data = dd, 
                        REML = FALSE, na.action = "na.fail")
clusterExport(cluster,"dd")
clusterEvalQ(cluster, library(lme4))
MuMIn::pdredge(full_model, cluster)
于 2020-08-25T22:01:55.687 回答