[R-sig-ME] glmmTMB predicted values and AIC, vs glmer

Ben Bolker bbo|ker @end|ng |rom gm@||@com
Sat May 22 03:29:10 CEST 2021


   I figured out the infinite-prediction thing (didn't solve it, but 
figured it out):

https://github.com/glmmTMB/glmmTMB/issues/696

On 5/21/21 6:24 PM, John Maindonald wrote:
> Setting nAGQ=1 does bring the AIC values closer together, albeit with
> convergence failure when other parameters are left at their defaults.
> Running allFit() does not provide (to me) any obvious clues on what
> might work better.  Or, should one just accept the less strict tolerance?
> Nor does centering and scale scTime help in this case.
> 
> llik <- summary(allFit(Obsglmer1.cll))$llik
> max(lik)-lik
> ##                       bobyqa                   Nelder_Mead
> ##           0.00000000000e+00             1.31201379190e-04
> ##                   nlminbwrap                         nmkbw
> ##            1.76015646502e-09             3.48215053236e-06
> ##              optimx.L-BFGS-B nloptwrap.NLOPT_LN_NELDERMEAD
> ##            1.09246872171e-06             1.13990722639e-07
> ##    nloptwrap.NLOPT_LN_BOBYQA
> ##            5.81495783081e-07
> 
> John Maindonaldemail: john.maindonald using anu.edu.au 
> <mailto:john.maindonald using anu.edu.au>
> 
> 
>> On 22/05/2021, at 01:27, Ben Bolker <bbolker using gmail.com 
>> <mailto:bbolker using gmail.com>> wrote:
>>
>>  I don't know yet, I will dig in and try to see what's going on.  An 
>> infinite predicted value certainly seems like an issue.
>>
>>  The most obvious difference is that nAGQ=0 is actually doing 
>> something slightly different (it's fitting the fixed-effect parameters 
>> as part of the PIRLS loop rather than maximizing over them 
>> explicitly); I would rather compare the nAGQ=1 case, just to minimize 
>> the number of differences.
>>
>> On 5/21/21 6:30 AM, John Maindonald wrote:
>>> The code that follows below demonstrates what I find a very odd
>>> issue with r-sig-mixed-models using r-project.org 
>>> <mailto:r-sig-mixed-models using r-project.org><mailto:r-sig-mixed-models using r-project.org 
>>> <mailto:r-sig-mixed-models using r-project.org>>, and with the comparison 
>>> between
>>> glmmTMB::glmmTMB and lme4::glmer, for models that have the
>>> same model formulae.
>>> 1) In the glmmTMB model as fitted to `ffly`, one predicted value is
>>> infinite.  This, even though all coefficients and standard errors
>>> have finite values.  This surely indicates that there is something
>>> odd in the way that predictions on the scale of the linear
>>> predictor are calculated.
>>> 2) Initially, I'd thought that the `Inf` value explained the
>>> difference between the two AIC values.  But the difference
>>> pretty much stays the same when the "offending" point is
>>> removed.
>>> I've not checked what happens when there are no observation level
>>> random effects.  Is there some difference in the way that the
>>> model formulae are interpreted in the two cases?
>>> ffly <- 
>>> read.csv('https://github.com/jhmaindonald/dataR/files/6521483/ffly.csv <https://github.com/jhmaindonald/dataR/files/6521483/ffly.csv>')
>>> ffly$obs <- factor(ffly$obs)
>>> form1 <- cbind(Dead,Live)~0+trtGp/TrtTime+(1|obs)+(1|trtGpRep)
>>> library(lme4); library(glmmTMB)
>>> ObsTMB.cll <- glmmTMB(form1,
>>>                       family=binomial(link="cloglog"), data=ffly)
>>> Obsglmer.cll <- glmer(form1, nAGQ=0,
>>>                       family=binomial(link="cloglog"), data=ffly)
>>> round(AIC(Obsglmer.cll, ObsTMB.cll), 2)
>>> ##                      df    AIC
>>> ## Obsglmer.cll 14 639.44
>>> ## ObsTMB.cll  14 636.02
>>> round(c(max(predict(ObsTMB.cll)),max(predict(Obsglmer.cll))),3)
>>> ## [1]   Inf 3.833
>>> range(fixef(ObsTMB.cll))
>>> ## [1] -5.28780064553  1.15952249272
>>> range(vcov(ObsTMB.cll))
>>> ## [1] -0.0546986905338  0.2887049942215
>>> ## Try also; there are small deviations from the line
>>> plot(predict(Obsglmer.cll)~predict(ObsTMB.cll))
>>> abline(0,1)
>>> ## Remove offending point
>>> ffly1 <- ffly[-which.max(predict(ObsTMB.cll)),]
>>> ObsTMB1.cll <- glmmTMB(form1,
>>>                       family=binomial(link="cloglog"), data=ffly1)
>>> Obsglmer1.cll <- glmer(form1, nAGQ=0,
>>>                       family=binomial(link="cloglog"), data=ffly1)
>>> cbind(AIC(Obsglmer.cll, ObsTMB.cll), AIC1=AIC(Obsglmer1.cll, 
>>> ObsTMB1.cll)[,2])
>>> ##                       df                    AIC                  AIC1
>>> ## Obsglmer.cll  14 639.441888969 639.441889196
>>> ## ObsTMB.cll   14 636.016597730 636.016597723
>>>   ## Observe that changes are in the final four decimal places.
>>> round(rbind(glmer=fixef(Obsglmer1.cll),
>>> TMB=unclass(fixef(ObsTMB1.cll)$cond)),3)
>>>       trtGpspAEgg trtGpspAL2 trtGpspAL3 trtGpspBEgg trtGpspBL2 trtGpspBL3
>>> glmer       0.772     -2.255     -3.299      -1.803     -2.632     -5.114
>>> TMB         0.790     -2.367     -3.441      -1.889     -2.757     -5.288
>>>       trtGpspAEgg:TrtTime trtGpspAL2:TrtTime trtGpspAL3:TrtTime
>>> glmer               0.231              0.372              0.563
>>> TMB                 0.288              0.398              0.602
>>>       trtGpspBEgg:TrtTime trtGpspBL2:TrtTime trtGpspBL3:TrtTime
>>> glmer               0.278              0.517              1.112
>>> TMB                 0.299              0.554              1.160
>>> John Maindonald email: john.maindonald using anu.edu.au 
>>> <mailto:john.maindonald using anu.edu.au><mailto:john.maindonald using anu.edu.au 
>>> <mailto:john.maindonald using anu.edu.au>>
>>> [[alternative HTML version deleted]]
>>> _______________________________________________
>>> R-sig-mixed-models using r-project.org 
>>> <mailto:R-sig-mixed-models using r-project.org> mailing list
>>> https://stat.ethz.ch/mailman/listinfo/r-sig-mixed-models 
>>> <https://stat.ethz.ch/mailman/listinfo/r-sig-mixed-models>
>>>
>>
>> _______________________________________________
>> R-sig-mixed-models using r-project.org 
>> <mailto:R-sig-mixed-models using r-project.org> mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-sig-mixed-models 
>> <https://stat.ethz.ch/mailman/listinfo/r-sig-mixed-models>
>



More information about the R-sig-mixed-models mailing list