Dear Ben and John

Thank you very much for having a look into this and your solutions.

Cheers
John


Message: 1

Date: Wed, 9 Oct 2013 22:16:43 +0000 (UTC)

From: Ben Bolker <bbolker@gmail.com<mailto:bbolker@gmail.com>>

To: r-sig-mixed-models@r-project.org<mailto:r-sig-mixed-models@r-project.org>

Subject: Re: [R-sig-ME] plot log transformed variable with Effects

      package

Message-ID: <loom.20131010T001609-902@post.gmane.org<mailto:loom.20131010T001609-902@post.gmane.org>>

Content-Type: text/plain; charset=us-ascii



Ben Bolker <bbolker@...<mailto:bbolker@...>> writes:



>

>  <John.Morrongiello <at> ...> writes:

>

> >

> > Hi list

> >

> > I'm having trouble plotting a mixed model that includes log

> > transformed

> (or any transformed) terms.

> >

> library(lme4)

> library(effects)

> data(cake, package="lme4")

> >

> > ###this works

> fm1 <- lmer(angle ~ recipe * temperature  + (1|recipe:replicate),

>   cake, REML = FALSE)

>

> plot(Effect(c('recipe','temperature'), fm1)) ##but this doesn't (log

> transformed angle)

>

> fm2 <- lmer(log(angle) ~ recipe * temperature + (1|recipe:replicate),

> cake, REML = FALSE)

>

> plot(Effect(c('recipe','temperature'), fm2))

>   This is probably something to take up with the maintainer of the

> 'effects' package, who in turn might have to consult the lme4

> maintainers.  The proximal problem occurs in

>

>   plot -> Effect -> Effect.merMod -> Effect.mer -> Effect ->

> mer.to.glm

>

>   There is a 'data' object that appears to be coming from the

> model.frame() of the original object, but I haven't tracked its source

> down yet -- but the problem is that it has log(angle) rather than

> angle as a column ...

>

>



  with a bit more work, I have come up with a way to hack the effects package to make this work.  The function below needs to be defined, then the arguments of the effects:::mer.to.glm function have to be changed from



function(mod, data=model.frame(mod))



to



function(mod, data=xdata(mod))



You can hack the package yourself and/or request the maintainer to add this capability ...



## modeled after stats::expand.model.frame ## expand the model frame to include any variables present ## in the original 'data' object but missing from the model frame ## potentially fragile:

##  * depends on 'data' still being present in the original environment ##  * doesn't check for any potential mishaps xdata <- function(model, envir=environment(formula(model))) {

    fr <- model.frame(model)

    data <- eval(getCall(model)$data,envir)

    ## find missing variables

    newvars <- setdiff(all.vars(formula(model)),names(fr))

    if (length(newvars)>0) {

        fr <- data.frame(fr,data[newvars],check.names=FALSE)

    }

    fr

}




John Morrongiello
Postdoctoral Fellow
CSIRO Marine and Atmospheric Research

Phone: +61 3 6232 5206 | Mobile: 0403 338 554
john.morrongiello@csiro.au | www.csiro.au
Address: CSIRO Marine and Atmospheric Research, Castray Esplanade, Hobart, TAS 7001



	[[alternative HTML version deleted]]

