我的顾问说,如果模型无法收敛,则不会估计标准误差。然而,尽管以下未能收敛,但似乎估计了标准误差。
您展示的模型has收敛了。您知道这一点是因为以下消息:
optimizer (nloptwrap) convergence code: 0 (OK)
如果它没有收敛,您会看到如下警告:
In checkConv(attr(opt, "derivs"), opt$par, ctrl = control$checkConv, :
Model failed to converge: degenerate Hessian with 1 negative eigenvalues
然而,它已经收敛到奇异拟合,如下一行所示:
boundary (singular) fit: see ?isSingular
除了注意警告消息之外,是否有任何明确的功能或方式来通知该功能是否收敛或收敛失败
我为此使用以下辅助函数:
# helper function
# Has the model converged ?
hasConverged <- function (mm) {
if ( !inherits(mm, "merMod")) stop("Error: must pass a lmerMod object")
retval <- NULL
if(is.null(unlist(mm@optinfo$conv$lme4))) {
retval = 1
}
else {
if (isSingular(mm)) {
retval = 0
} else {
retval = -1
}
}
return(retval)
}
如果模型收敛则返回 1normally即不是奇异拟合,如果收敛到奇异拟合则为 0,如果未能收敛则为 -1。另一种方法是根据 @SamR 的评论将警告升级为错误:
一般来说,如果警告还不够,您可以使用 options(warn=2) 将警告变成错误,这意味着操作将结束,因此您不应该得到任何标准错误或其他输出。请记住之后将警告设置回 1。
继续:
为什么模型无法收敛时仍然估计标准误差?
好吧,如上所述,它已经收敛了,而你的顾问在这里错了:
我的顾问说,如果模型无法收敛,则不会估计标准误差。
如果模型未能收敛,它将输出放弃前最后一次迭代获得的估计值。