[R-sig-ME] lmer() with 'na.action=na.exclude'; error with summary()
Ben Bolker
bbolker at gmail.com
Tue Sep 9 16:05:47 CEST 2014
On 14-09-09 10:02 AM, Martin Maechler wrote:
>>>>>> John Maindonald <john.maindonald at anu.edu.au>
>>>>>> on Mon, 8 Sep 2014 23:31:14 +0000 writes:
>
> > On 9 Sep 2014, at 2:50, Ben Bolker <bbolker at gmail.com>
> > wrote:
> >> John Maindonald <john.maindonald at ...> writes:
> >>
> >>>
> >>> The following demonstrates the issue:
> >>>
> >>>> library(DAAG) science.lmer <- lmer(like ~ sex + PrivPub
> >>>> + (1 | school) +
> >>> + (1 | school:class), data = science, +
> >>> na.action=na.exclude)
> >>>> summary(science.lmer)
> >>> Linear mixed model fit by REML ['lmerMod']
> >>
> >> [snip]
> >>
> >>> Scaled residuals: Error in quantile.default(resids) :
> >>> missing values and NaN's not allowed if 'na.rm' is FALSE
> >>>> ## Suppress details of residuals
> >>
> >>
> >>>> summary(science.lmer, show.resids=FALSE)
> >>
> >> This is a confusion between the arguments of the summary
> >> method (summary.merMod) and the *print method*
> >> (print.summary.merMod). We should add a warning to
> >> summary that says it is discarding unused arguments (the
> >> ... in the model definition is only there for
> >> compatibility with the summary() generic method).
> >>
> >> print(summary(science.lmer), show.resids=FALSE)
> >>
> >> works fine.
>
> > That is a subtlety that I had not contemplated. It is not
> > in forming the summary object, but in printing it that the
> > problem is evident.
>
> >> I doubt that there is an intention for summary.merMod()
> >> to throw an error
> >>> lmer() has been called with 'na.action=na.exclude’. It
> >>> should certainly not throw an error with the argument
> >>> 'show.resids=FALSE’.
> >>
> >> Now I'm wondering whether the correct behaviour when
> >> there are NAs in the (extended) residuals is
> >>
> >> 1 omit NAs from the residual quantile calculation
> >> (easiest)
>
> > I see no reason not to choose (1), At the time we prepared
> > the 3rd edition of 'Data Analysis and Graphics using R’,
> > this was the behaviour. My understanding of
> > ‘na.action=na.exclude’ has been that the result is as for
> > ‘na.action=na.omit’, except that residuals match up with
> > the original observations, with NAs inserted as necessary.
> > In other words, the change from ‘na.action=na.omit’ to
> > ‘na.action=na.exclude’ is all about wharf appears when one
> > explicitly calculates and returns residuals, not about
> > what happens when summary information (quantiles, not the
> > residuals themselves!) is printed.
>
> > This strategy also simplifies documenting and describing
> > what is done.
>
> >> 2 return NA values for all quantiles of the residual
>
> >> 3 return the quantiles plus a statement of the number of NAs.
> >>
> >> Any good reason not to just do #1?
>
> We should follow the behavior of lm()
> in all such cases of doubt unless we have very very strong
> reasons not to follow lm().
> It has been *the* example and motivator to a big extent AFAIR
> for the na.action semantics when they were introduced (in S).
I just checked, and it definitely na.omits (it pulls out the
'residuals' component from the summary object).
I've already pushed a fix along these lines (different implementation,
but same behaviour) to Github, although I haven't pushed tests or
updated the NEWS file ...
Ben
>
> Martin
>
> > John Maindonald email: john.maindonald at anu.edu.au phone :
> > +61 2 (6125)3473 fax : +61 2(6125)5549 Centre for
> > Mathematics & Its Applications, Room 1194, John Dedman
> > Mathematical Sciences Building (Building 27) Australian
> > National University, Canberra ACT 0200.
>
More information about the R-sig-mixed-models
mailing list