[R-sig-ME] Fixed effects only model with lme4

Ben Bolker bolker at ufl.edu
Sun Jun 7 02:08:12 CEST 2009


 A quick hack to compute a likelihood profile, for changing
random-effects variances.  A slight special case is to compute the
likelihood of a model with variance of the random effect set to zero.
This works only for a single-random-effect model, and is pulled from
code in Doug Bates's vignette.  In the past this would have dangerously
modified your original model, but I think that's fixed now.

   Other glmm hacks are available at
http://glmm.wikidot.com/local--files/reef-fish/glmmfuns.R

  I would be happy to hear about extensions or corrections.

  cheers
    Ben Bolker

## extract likelihood based on zero variance for a single random
##  effect
zerodev <- function(mm) {
  varprof(mm,0,0,1)[["ML"]]
}

varprof <- function(mm,lower=0,upper=20,n=101) {
  sg <- seq(lower, upper, len = n)
  orig.sd <- attr(VarCorr(mm)[[1]],"stddev")
  dev <- mm at deviance
  nc <- length(dev)
  nms <- names(dev)
  vals <- matrix(0, nrow = length(sg), ncol = nc, dimnames = list(NULL,
nms))
  update_dev <- function(sd) {
    .Call("mer_ST_setPars", mm, sd, PACKAGE = "lme4")
    .Call("mer_update_L", mm, PACKAGE = "lme4")
    res <- try(.Call("mer_update_RX", mm, PACKAGE = "lme4"), silent = TRUE)
    if (inherits(res, "try-error")) {
      val <- NA
    } else {
      .Call("mer_update_ranef", mm, PACKAGE = "lme4")
      .Call("mer_update_dev", mm, PACKAGE = "lme4") ## added for glmmML
      val <- mm at deviance
    }
    val
  }
  for (i in seq(along = sg)) {
      vals[i,] <- update_dev(sg[i])
    }
  update_dev(orig.sd) ## hack! to restore original sd
  data.frame(sd=sg,vals)
}


Emmanuel Charpentier wrote:
> Dear Pr Bates,
> 
> Le samedi 06 juin 2009 à 12:49 -0500, Douglas Bates a écrit :
>> On Sat, Jun 6, 2009 at 12:03 PM, Jeroen Ooms<jeroenooms at gmail.com> wrote:
>>> For my GUI, I would like the user to be able to compare a fixed effects
>>> model with a random effects model. For example:
>>> fm0 <- lmer(Reaction ~ Days, sleepstudy);
>>> fm1 <- lmer(Reaction ~ Days + (1|Subject), sleepstudy);
>>> anova(fm0,fm1);
>>>
>>> However, this returns the obvious "No random effects terms specified in
>>> formula" error for the first model. I've also tried fitting the fixed
>>> effects model with lm:
>>>
>>> fm0 <- lm(Reaction ~ Days, sleepstudy);
>>> fm1 <- lmer(Reaction ~ Days + (1|Subject), sleepstudy);
>>> anova(fm0,fm1);
>> Try listing them the other way around
>>
>> anova(fm1, fm0)
>>
>> If the first model in the call to anova is of class "lm" then the
>> method for that class is the one chosen and that method doesn't know
>> about models created by lmer.  You must list them so that the lmer
>> model comes first.
> 
> You could do that ... with lme objects. As explained by the OP, this no
> longer works with lmer objects.
> 
> One may always extract deviances and substract, and make rash hypotheses
> in difference in numerator DFs, but, while this should work (= give
> expected results) with lm and gaussian objects, nothing guarantees that
> glm and lmer use the same parametrizations for non-gaussian models (the
> GLM chapter in V&R4 states that deviances are computed up to an additive
> constant. I tried to follow lmer code, but quickly got lost in C
> code...).
> 
> May this join your (already well-grown) wishlist (along with
> deviance/likelihood under arbitrary parameters, maybe :-) ?
> 
> Sincerely,
> 
> 					Emmanuel Charpentier
> 
> _______________________________________________
> R-sig-mixed-models at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-sig-mixed-models


-- 
Ben Bolker
Associate professor, Biology Dep't, Univ. of Florida
bolker at ufl.edu / www.zoology.ufl.edu/bolker
GPG key: www.zoology.ufl.edu/bolker/benbolker-publickey.asc




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