I'm fitting a GLMM with the R-package lme4, and when trying to fix convergence issues, I ran into the setting tolPwrss, which is commented, in brief, in the CRAN-manual for lme4 (p. 31 in version 1.1-27.1):
tolPwrss tolerance for declaring convergence in the penalized iteratively weighted residual sum-of-squares (GLMMs only)
It seems that the default-level of tolPwrssis 0.0000001 (see script below, with some output included). However, changing this level to (e.g.) 0.001 changes the results slightly (and in my own data: strongly):
- Standard deviation for random intercepts is reduced
- Log-odds coefficents are a bit closer to 0
- Standard errors of ceofficients are lower (in some cases), leading to slightly lower p-values (again: in some cases), given the larger z-values.
I have a worked example below to illustrate this (in my own data, the effects of what is mentioned in the list above are more extreme).
My questions are as follows:
What motivates the default value of 0.00001 in
glmer-models?Would it be possible to get a short explanation of what changes to the
tolPwrss-value implies in GLMM's (e.g. increasing it to 0.001, like in the example below)?Is it a questionable practice, in model-building processes in explanatory analyses, to tweak the tolerance level like this? -- Or is it rather advisable, as a way to adjust the settings to get a more optimal model of the given data?
(And are there other ways to adjust tolerance-levels in GLMM's?)
P.S.: I have very little background in (advanced) maths and stats (and most of my article-readers have none), so if possible, it would be great if comments/answers are comprehensible also to us ordinary mortals ...
Here's a worked example:
# Example, adapted from https://bbolker.github.io/mixedmodels-misc/ecostats_chap.html
# The culcida_dat data is assumed to be loaded (e.g. from https://github.com/lme4/lme4/blob/master/inst/testdata/culcita_dat.RData)
# Load packages
library(lme4)
library(robustlmm)
# Make GLMM with default settings:
cmod_lme4_L <- glmer(predation~ttt+(1|block),data=culcita_dat,
family=binomial)
summary(cmod_lme4_L)
----------------------------------------------------------
[...]
Random effects:
Groups Name Variance Std.Dev.
block (Intercept) 11.81 3.437
Number of obs: 80, groups: block, 10
Fixed effects:
Estimate Std. Error z value Pr(>|z|)
(Intercept) 5.096 1.811 2.814 0.00490 **
tttcrabs -3.842 1.465 -2.623 0.00871 **
tttshrimp -4.431 1.551 -2.856 0.00429 **
tttboth -5.599 1.724 -3.247 0.00117 **
[...]
----------------------------------------------------------
# Find tolerance level (tolPwrss is the rightmost value)
cmod_lme4_L_tol <- robustlmm::getME(cmod_lme4_L, name = "devcomp")
cmod_lme4_L_tol$cmp
----------------------------------------------------------
ldL2 ldRX2 wrss ussq pwrss
20.0917039 -1.0673770 552.4808161 6.5984191 559.0792352
drsum REML dev sigmaML sigmaREML
34.0157673 NA 60.7058904 NA NA
tolPwrss
0.0000001
----------------------------------------------------------
# Change the GLMM-tolPwrss to 0.001 (from 0.0000001):
cmod_lme4_L_newtol <- update(cmod_lme4_L, ~.
, control = glmerControl(tolPwrss = 0.001)) # Added to the model
summary(cmod_lme4_L_newtol)
----------------------------------------------------------
[...]
Random effects:
Groups Name Variance Std.Dev.
block (Intercept) 11.02 3.319
Number of obs: 80, groups: block, 10
Fixed effects:
Estimate Std. Error z value Pr(>|z|)
(Intercept) 5.004 1.700 2.943 0.003249 **
tttcrabs -3.831 1.474 -2.599 0.009352 **
tttshrimp -4.405 1.535 -2.869 0.004111 **
tttboth -5.529 1.653 -3.344 0.000825 ***
[...]
----------------------------------------------------------