Tolerance-levels in GLMMs ("tolPwrss" in R-package lme4)?

Viewed 74

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:

  1. What motivates the default value of 0.00001 in glmer-models?

  2. 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)?

  3. 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 ***
[...]
----------------------------------------------------------
0 Answers
Related