[R] bug in lme4?

Martin Maechler maechler at stat.math.ethz.ch
Wed Aug 20 10:30:18 CEST 2008


>>>>>   <Antonio.Gasparrini at lshtm.ac.uk>
>>>>>     on Wed, 20 Aug 2008 03:03:29 +0100 writes:

    > Dear all,
    > I found a problem with 'lme4'. Basically, once you load the package 'aod' (Analysis of Overdispersed Data), the functions 'lmer' and 'glmer' don't work anymore:
 
    > library(lme4)
    > (fm1 <- lmer(Reaction ~ Days + (Days|Subject), sleepstudy))
    > (gm1 <- glmer(cbind(incidence, size - incidence) ~ period + (1 | herd),
    > family = binomial, data = cbpp))
    > install.packages("aod")
    > library(aod)
    > (fm1 <- lmer(Reaction ~ Days + (Days|Subject), sleepstudy))
    > (gm1 <- glmer(cbind(incidence, size - incidence) ~ period + (1 | herd),
    > family = binomial, data = cbpp))
 
    > Taking into account that this package is used to perform
    > similar analyses, this could be a problem.

It is a problem, and it *is* a bug;
thank you for reporting it, Antonio.

Since lme4 uses a NAMESPACE, it could and probably should make
sure to protect itself from incompatible function redefinitions 
such as the one the  'aod' package "provides" :

Arguably, the bug is really in package 'aod' rather than 'lme4':
'aod' redefines the AIC() method for 'logLik' objects in a not quite
backward-compatible way:

The standard method (S3 alas, in package 'stats') is

   > stats:::AIC.logLik
   function (object, ..., k = 2) 
   -2 * c(object) + k * attr(object, "df")
   <environment: namespace:stats>

The redefinition from package 'aod' is

   > selectMethod(AIC, "logLik")
   Method Definition:

   function (object, ..., k = 2) 
   {
       npar <- attr(object, "df")
       nobs <- attr(object, "nobs")
       c(AIC = -2 * c(object) + k * npar, AICc = -2 * c(object) + 
	   k * npar + 2 * npar * (npar + 1)/(nobs - npar - 1))
   }
   <environment: 0x1cd22b80>

   Signatures:
	   object  
   target  "logLik"
   defined "logLik"

which returns a (named) numeric vector of length 2,
and the code in lme4 was expecting length 1.

As a matter of fact, I even like the idea to extend AIC() to
also compute newer versions of AIC; but probably 'aod' should
have done so in a different way {maybe with an additional
'kind' argument to the method}.

Martin

    > All the best
 
    > Antonio Gasparrini
    > Public and Environmental Health Research Unit (PEHRU)
    > London School of Hygiene & Tropical Medicine
    > Keppel Street, London WC1E 7HT, UK
    > Office: 0044 (0)20 79272406 - Mobile: 0044 (0)79 64925523
    > http://www.lshtm.ac.uk/people/gasparrini.antonio ( http://www.lshtm.ac.uk/pehru/ )



More information about the R-help mailing list