如果有警告,请不要将p值/系数保存在glmer中

时间:2017-06-11 18:29:54

标签: r glm lme4

我正在通过一系列分析运行for循环。对于其中一些测试,glmer会返回一条警告消息(复制如下)。我想不保存这些网站的p值或参数估计值。我想这会是一个带有类似if no warning, then print beta/p-value to tests的伪代码的if语句,但我无法弄清楚如何实现它。任何建议将不胜感激!

  

警告信息:
  在checkConv(attr(opt,“derivs”)中,选择$ par,ctrl = control $ checkConv,:
  模型无法与max | grad |收敛= 0.00778865(tol = 0.001,组分1)

for (i in 1:10000) {
  test <- glmer(cbind(mcounts[i,], counts[i,] - mcounts[i,]) ~ pred + (1 |indiv), family = binomial)
  summary(test)$coefficients[2,4] -> tests[i,2]
  summary(test)$coefficients[2,1] -> tests[i,1]
}

1 个答案:

答案 0 :(得分:2)

对于它的价值,这些是警告,而不是错误(老派R的人往往对这种区别挑剔:我相应地编辑了你的问题,你可以如果您愿意,请回滚更改)。您可以按照@ RichardTelford的建议(在上面的评论中),但是如果不是将所有警告升级为错误,您将获得更高的精度,您只升级渐变收敛警告(您还可以选择调整容差)这次检查)。

为了可读性和健壮性,我稍微修改了你的代码(例如,通过名称而不是位置来引用你想要的系数表的组件)。

 gcontrol <- glmerControl(check.conv.grad = .makeCC("error", tol = 2e-3))
 for (i in 1:10000) {
     test <- try(glmer(cbind(mcounts[i,], counts[i,] - mcounts[i,]) ~ 
                pred + (1 |indiv), family = binomial,
                control=gcontrol
                ))
     if (inherits(test,"try-error")) next ## if error skip to next iteration
     cc <- coef(summary(test))
     tests[i,] <- cc["pred",c("Estimate","Pr(>|z|)")]    
}

确保在开始之前用tests值填充NA结构:然后您可以轻松查看哪些测试失败,并将结果仅删除成功测试(例如{{1} }})。

可能值得一读na.omit(as.data.frame(tests)):我可能会将不良收敛的容忍度设置得稍高一些(例如0.02)。